commit
This commit is contained in:
+4
-1
@@ -154,6 +154,7 @@ public class FamilyActivityStatisticsController {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
ts.*,
|
||||
CONCAT(DATE_FORMAT(ac.courseStartTime, '%H:%i:%s'),'至',DATE_FORMAT(ac.courseEndTime, '%H:%i:%s')) AS courseTime,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.sex,
|
||||
@@ -162,6 +163,7 @@ public class FamilyActivityStatisticsController {
|
||||
tsc.courseName
|
||||
FROM
|
||||
family_user ts
|
||||
left join family_activity_course ac on ts.activityCourseId = ac.id
|
||||
left join `vw_user` u on u.id = ts. userId
|
||||
left join family_course tsc on tsc.id = ts.courseId
|
||||
WHERE
|
||||
@@ -183,7 +185,8 @@ public class FamilyActivityStatisticsController {
|
||||
Map.of("name", "单位", "key", "unitName"),
|
||||
Map.of("name", "分工会", "key", "unionName"),
|
||||
Map.of("name", "性别", "key", "sex"),
|
||||
Map.of("name", "手机号", "key", "newMobile")
|
||||
Map.of("name", "手机号", "key", "newMobile"),
|
||||
Map.of("name", "报名时段", "key", "courseTime")
|
||||
);
|
||||
|
||||
List<ExcelExportEntity> excelCommonExportEntity = basicEntity.stream().map(entity -> {
|
||||
|
||||
@@ -71,6 +71,11 @@ public class FamilyUser implements Serializable {
|
||||
@Comment("报名时间")
|
||||
private Date signUpTime;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("活动课程时段id")
|
||||
private String activityCourseId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
@Comment("手机端报名字段和值")
|
||||
|
||||
+18
-1
@@ -13,6 +13,8 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.family.models.*;
|
||||
import com.budwk.app.zhgh.activity.family.service.FamilyActivityService;
|
||||
import com.budwk.app.zhgh.activity.family.service.FamilyActivityStatisticsService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivityCourse;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.async.Async;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
@@ -273,7 +275,22 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> i
|
||||
familyUser.setSignUpTime(new Date());
|
||||
|
||||
dao().insert(familyUser);
|
||||
asyncInsertUserCourse(familyUser.getActivityId(), familyUser.getCourseId(), userId);
|
||||
|
||||
if (StrUtil.isNotBlank(familyUser.getActivityCourseId())) {
|
||||
TrainSignUpActivityCourse fetch = dao().fetch(TrainSignUpActivityCourse.class, familyUser.getActivityCourseId());
|
||||
TrainSignUpUserCourse userCourse = new TrainSignUpUserCourse();
|
||||
userCourse.setActivityId(familyUser.getActivityId());
|
||||
userCourse.setCourseId(familyUser.getCourseId());
|
||||
userCourse.setUserId(familyUser.getUserId());
|
||||
userCourse.setCourseStartTime(fetch.getCourseStartTime());
|
||||
userCourse.setCourseEndTime(fetch.getCourseEndTime());
|
||||
userCourse.setAttend(false);
|
||||
userCourse.setAttendTime(null);
|
||||
userCourse.setActivityCourseId(fetch.getId());
|
||||
dao().insert(userCourse);
|
||||
} else {
|
||||
asyncInsertUserCourse(familyUser.getActivityId(), familyUser.getCourseId(), userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Async
|
||||
|
||||
+1
-1
@@ -143,7 +143,7 @@ public class FamilyActivityStatisticsServiceImpl extends BaseServiceImpl<FamilyU
|
||||
u.unitname,
|
||||
u.unionname,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
ifnull(tsuu.mobile, u.mobile) as mobile,
|
||||
tsuu.signUpTime,
|
||||
tsuu.state
|
||||
FROM
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ public class FamilyUserServiceImpl extends BaseServiceImpl<FamilyBlackList> impl
|
||||
u.id AS userId,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.mobile,
|
||||
ifnull(tsuu.mobile, u.mobile) as mobile,
|
||||
u.unitname,
|
||||
u.unionname,
|
||||
tsuc.courseName,
|
||||
|
||||
+77
@@ -1,12 +1,17 @@
|
||||
package com.budwk.app.zhgh.activity.planSummary.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_file;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.utils.SysFileMinIoUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.basic.models.ActivityBasicSettings;
|
||||
@@ -21,13 +26,23 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* @ClassName YearPlanController
|
||||
@@ -139,4 +154,66 @@ public class YearPlanController {
|
||||
List<SysClub> list = dao.query(SysClub.class, cnd);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("planSummary.yearPlan.manage")
|
||||
public void downloadFiles(PageForm pageForm,
|
||||
@Param(value = "year") Integer year,
|
||||
@Param(value = "tissueIdByUnion") String tissueIdByUnion,
|
||||
@Param(value = "tissueIdByClub") String tissueIdByClub,
|
||||
@Param(value = "planName") String planName,
|
||||
HttpServletResponse response) throws IOException {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
cnd.andEX("YEAR(yp.planTime)", "=", year);
|
||||
cnd.andEX("yp.tissueId", "=", tissueIdByUnion);
|
||||
cnd.andEX("yp.tissueId", "=", tissueIdByClub);
|
||||
cnd.and(Cnd.likeEX("yp.planName", planName));
|
||||
|
||||
List<NutMap> listMap = yearPlanService.queryData(cnd);
|
||||
|
||||
List<String> urlList = new ArrayList<>();
|
||||
for (NutMap map : listMap) {
|
||||
if(StrUtil.isNotBlank(map.getString("files"))) {
|
||||
List<JSONObject> files = Json.fromJsonAsList(JSONObject.class, map.getString("files"));
|
||||
ArrayList<String> list = files.stream().map(o -> o.getStr("url")).collect(Collectors.toCollection(ArrayList::new));
|
||||
urlList.addAll(list);
|
||||
}
|
||||
}
|
||||
|
||||
response.setContentType("application/zip");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode("文件汇总.zip"));
|
||||
|
||||
try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
|
||||
for (String url : urlList) {
|
||||
String fileId = extractFileId(url);
|
||||
if(StrUtil.isNotBlank(fileId)) {
|
||||
Sys_file file = dao.fetch(Sys_file.class, fileId);
|
||||
byte[] bytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
||||
if(bytes == null || bytes.length == 0){
|
||||
continue;
|
||||
}
|
||||
|
||||
String entryName = file.getName();
|
||||
zos.putNextEntry(new ZipEntry(entryName));
|
||||
zos.write(bytes);
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "生成ZIP文件失败");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static String extractFileId(String url) {
|
||||
if (url == null) return null;
|
||||
Pattern pattern = Pattern.compile("[?&]id=([^&]*)");
|
||||
Matcher matcher = pattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
return matcher.group(1);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+78
@@ -2,13 +2,18 @@ package com.budwk.app.zhgh.activity.planSummary.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
import com.budwk.app.sys.models.Sys_file;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.utils.SysFileMinIoUtil;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
@@ -26,13 +31,22 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* @ClassName YearSummaryController
|
||||
@@ -119,4 +133,68 @@ public class YearSummaryController {
|
||||
yearSummaryService.delete(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("planSummary.yearPlan.manage")
|
||||
public void downloadFiles(PageForm pageForm,
|
||||
@Param(value = "year") Integer year,
|
||||
@Param(value = "tissueIdByUnion") String tissueIdByUnion,
|
||||
@Param(value = "tissueIdByClub") String tissueIdByClub,
|
||||
@Param(value = "summaryType") String summaryType,
|
||||
@Param(value = "summaryFrom") String summaryFrom,
|
||||
HttpServletResponse response) throws IOException {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
cnd.andEX("YEAR(ys.cTime)", "=", year);
|
||||
cnd.andEX("ys.tissueId", "=", tissueIdByUnion);
|
||||
cnd.andEX("ys.tissueId", "=", tissueIdByClub);
|
||||
cnd.andEX("ys.summaryType", "=", summaryType);
|
||||
cnd.andEX("ys.summaryFrom", "=", summaryFrom);
|
||||
|
||||
List<NutMap> listMap = yearSummaryService.queryData(cnd);
|
||||
|
||||
List<String> urlList = new ArrayList<>();
|
||||
for (NutMap map : listMap) {
|
||||
if(StrUtil.isNotBlank(map.getString("files"))) {
|
||||
List<JSONObject> files = Json.fromJsonAsList(JSONObject.class, map.getString("files"));
|
||||
ArrayList<String> list = files.stream().map(o -> o.getStr("url")).collect(Collectors.toCollection(ArrayList::new));
|
||||
urlList.addAll(list);
|
||||
}
|
||||
}
|
||||
|
||||
response.setContentType("application/zip");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode("文件汇总.zip"));
|
||||
|
||||
try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
|
||||
for (String url : urlList) {
|
||||
String fileId = extractFileId(url);
|
||||
if(StrUtil.isNotBlank(fileId)) {
|
||||
Sys_file file = dao.fetch(Sys_file.class, fileId);
|
||||
byte[] bytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
||||
if(bytes == null || bytes.length == 0){
|
||||
continue;
|
||||
}
|
||||
|
||||
String entryName = file.getName();
|
||||
zos.putNextEntry(new ZipEntry(entryName));
|
||||
zos.write(bytes);
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "生成ZIP文件失败");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static String extractFileId(String url) {
|
||||
if (url == null) return null;
|
||||
Pattern pattern = Pattern.compile("[?&]id=([^&]*)");
|
||||
Matcher matcher = pattern.matcher(url);
|
||||
if (matcher.find()) {
|
||||
return matcher.group(1);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.budwk.app.zhgh.activity.planSummary.model;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -7,6 +8,8 @@ import lombok.experimental.Accessors;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName Plan
|
||||
* @Author JyuHsin
|
||||
@@ -66,4 +69,9 @@ public class YearPlan extends BaseModel {
|
||||
@Comment("活动类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String activityType;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@ import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.planSummary.model.YearPlan;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName YearPlanService
|
||||
@@ -16,4 +19,6 @@ import org.nutz.dao.Cnd;
|
||||
public interface YearPlanService extends BaseService<YearPlan> {
|
||||
|
||||
Pagination pageData(PageForm pageForm, Cnd cnd);
|
||||
|
||||
List<NutMap> queryData(Cnd cnd);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@ import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.planSummary.model.YearSummary;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName YearSummaryService
|
||||
@@ -16,4 +19,6 @@ import org.nutz.dao.Cnd;
|
||||
public interface YearSummaryService extends BaseService<YearSummary> {
|
||||
|
||||
Pagination pageData(PageForm pageForm, Cnd cnd);
|
||||
|
||||
List<NutMap> queryData(Cnd cnd);
|
||||
}
|
||||
|
||||
+13
-1
@@ -20,6 +20,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -43,6 +44,17 @@ public class YearPlanServiceImpl extends BaseServiceImpl<YearPlan> implements Ye
|
||||
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Cnd cnd) {
|
||||
Sql sql = buildSql(cnd);
|
||||
return this.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> queryData(Cnd cnd) {
|
||||
Sql sql = buildSql(cnd);
|
||||
return this.listMap(sql);
|
||||
}
|
||||
|
||||
private Sql buildSql(Cnd cnd) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
yp.*,
|
||||
@@ -68,6 +80,6 @@ public class YearPlanServiceImpl extends BaseServiceImpl<YearPlan> implements Ye
|
||||
}
|
||||
cnd.desc("yp.planTime");
|
||||
sql.setCondition(cnd);
|
||||
return this.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
|
||||
+13
-1
@@ -19,6 +19,7 @@ import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -42,6 +43,17 @@ public class YearSummaryServiceImpl extends BaseServiceImpl<YearSummary> impleme
|
||||
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Cnd cnd) {
|
||||
Sql sql = buildSql(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> queryData(Cnd cnd) {
|
||||
Sql sql = buildSql(cnd);
|
||||
return this.listMap(sql);
|
||||
}
|
||||
|
||||
private Sql buildSql(Cnd cnd) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
ys.*,
|
||||
@@ -66,6 +78,6 @@ public class YearSummaryServiceImpl extends BaseServiceImpl<YearSummary> impleme
|
||||
}
|
||||
cnd.desc("ys.cTime");
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -15,6 +15,7 @@ import com.budwk.app.zhgh.activity.family.models.FamilyCourse;
|
||||
import com.budwk.app.zhgh.activity.family.models.FamilyUser;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Chain;
|
||||
@@ -53,6 +54,8 @@ public class MTrainSignUpActivityController {
|
||||
private TrainSignUpActivityService trainSignUpActivityService;
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
@Inject
|
||||
private TrainSignUpActivityStatisticsService statisticsService;
|
||||
|
||||
@At("/trainList")
|
||||
@Ok("beetl:/platform/zhghh5/activity/trainSignUp/trainList/index.html")
|
||||
|
||||
+7
-6
@@ -152,16 +152,16 @@ public class TrainSignUpActivityStatisticsController {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
ts.*,
|
||||
CONCAT(DATE_FORMAT(ac.courseStartTime, '%H:%i:%s'),'至',DATE_FORMAT(ac.courseEndTime, '%H:%i:%s')) AS courseTime,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.unitname,
|
||||
u.unionname,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
ifnull(ts.mobile, u.mobile) as mobile,
|
||||
u.birthday,
|
||||
tsc.courseName
|
||||
FROM
|
||||
train_sign_up_user ts
|
||||
train_sign_up_user ts
|
||||
left join train_sign_up_activity_course ac on ts.activityCourseId = ac.id
|
||||
left join `vw_user` u on u.id = ts. userId
|
||||
left join train_sign_up_course tsc on tsc.id = ts.courseId
|
||||
WHERE
|
||||
@@ -180,11 +180,12 @@ public class TrainSignUpActivityStatisticsController {
|
||||
List<ExcelExportEntity> excelCommonExportEntity = new ArrayList<>();
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitname", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionname", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("生日", "birthday", 20));
|
||||
excelCommonExportEntity.add(new ExcelExportEntity("报名时段", "courseTime", 20));
|
||||
|
||||
for (TrainSignUpCourse c : courseList) {
|
||||
String k = c.getCourseName();
|
||||
|
||||
@@ -132,6 +132,5 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH
|
||||
sysHomeActivity.setEnable(!this.isDisabled());
|
||||
sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
|
||||
return sysHomeActivity;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,6 +70,11 @@ public class TrainSignUpUser implements Serializable {
|
||||
@Comment("报名时间")
|
||||
private Date signUpTime;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("活动课程时段id")
|
||||
private String activityCourseId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
@Comment("手机端报名字段和值")
|
||||
|
||||
+16
-1
@@ -278,7 +278,22 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl<TrainSignUpA
|
||||
trainSignUpUser.setSignUpTime(new Date());
|
||||
|
||||
dao().insert(trainSignUpUser);
|
||||
asyncInsertUserCourse(trainSignUpUser.getActivityId(), trainSignUpUser.getCourseId(), userId);
|
||||
|
||||
if (StrUtil.isNotBlank(trainSignUpUser.getActivityCourseId())) {
|
||||
TrainSignUpActivityCourse fetch = dao().fetch(TrainSignUpActivityCourse.class, trainSignUpUser.getActivityCourseId());
|
||||
TrainSignUpUserCourse userCourse = new TrainSignUpUserCourse();
|
||||
userCourse.setActivityId(trainSignUpUser.getActivityId());
|
||||
userCourse.setCourseId(trainSignUpUser.getCourseId());
|
||||
userCourse.setUserId(trainSignUpUser.getUserId());
|
||||
userCourse.setCourseStartTime(fetch.getCourseStartTime());
|
||||
userCourse.setCourseEndTime(fetch.getCourseEndTime());
|
||||
userCourse.setAttend(false);
|
||||
userCourse.setAttendTime(null);
|
||||
userCourse.setActivityCourseId(fetch.getId());
|
||||
dao().insert(userCourse);
|
||||
} else {
|
||||
asyncInsertUserCourse(trainSignUpUser.getActivityId(), trainSignUpUser.getCourseId(), trainSignUpUser.getUserId());
|
||||
}
|
||||
}
|
||||
|
||||
@Async
|
||||
|
||||
+14
-3
@@ -18,6 +18,7 @@ import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
@@ -90,7 +91,8 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl<Tr
|
||||
tsuu.unitName,
|
||||
ifnull(tsuu.mobile, u.mobile) as mobile,
|
||||
tsuu.signUpTime,
|
||||
tsuu.state
|
||||
tsuu.state,
|
||||
tsuu.mobileColumnsValue
|
||||
FROM
|
||||
train_sign_up_user tsuu
|
||||
LEFT JOIN `vw_user` u ON u.id = tsuu.userId
|
||||
@@ -100,7 +102,16 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl<Tr
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("tsuu.courseId", "=", courseId);
|
||||
sql.setCondition(cnd);
|
||||
return listMap(sql);
|
||||
List<NutMap> list = listMap(sql);
|
||||
list.forEach(o -> {
|
||||
List<NutMap> mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue"));
|
||||
if(Lang.isNotEmpty(mobileColumnsValue)) {
|
||||
mobileColumnsValue.forEach(m -> {
|
||||
o.put(m.getString("columnCode"), m.getString("columnValue"));
|
||||
});
|
||||
}
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -125,7 +136,7 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl<Tr
|
||||
u.unitname,
|
||||
u.unionname,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
ifnull(tsuu.mobile, u.mobile) as mobile,
|
||||
tsuu.signUpTime,
|
||||
tsuu.state
|
||||
FROM
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl<TrainSignUpBlack
|
||||
u.id AS userId,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.mobile,
|
||||
ifnull(tsuu.mobile, u.mobile) as mobile,
|
||||
u.unitname,
|
||||
u.unionname,
|
||||
tsuc.courseName,
|
||||
|
||||
+4
@@ -9,6 +9,7 @@ import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.base.utils.DateUtil;
|
||||
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
||||
import com.budwk.app.zhgh.activity.basic.models.ActivityBasicSettings;
|
||||
import com.budwk.app.zhgh.dayofficework.clothing.service.ClothingService;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
@@ -143,6 +144,9 @@ public class ClothingRecordController {
|
||||
Configure config = Configure.builder().bind("buys", policy).build();
|
||||
clothes.put("buys", buyUserList);
|
||||
|
||||
ActivityBasicSettings basicSettings = clothingService.dao().fetch(ActivityBasicSettings.class, Cnd.where(ActivityBasicSettings::getCode, "=", projectId));
|
||||
clothes.put("projectName", basicSettings.getName());
|
||||
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
XWPFTemplate template = XWPFTemplate.compile(officeTemplateUtil.getTemplate("clothes"), config);
|
||||
template.render(clothes).writeAndClose(os);
|
||||
|
||||
+6
-1
@@ -1,6 +1,8 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.legal.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
@@ -51,7 +53,7 @@ public class LegalAppointmentSetController {
|
||||
|
||||
@At
|
||||
@ApiOperation("查询时间段内的预约信息")
|
||||
@SaCheckPermission("legal.appointmentSet")
|
||||
@SaCheckLogin
|
||||
public Result queryAppointmentInfo(Long startTimeTs, Long endTimeTs) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -136,6 +138,9 @@ public class LegalAppointmentSetController {
|
||||
@ApiOperation("查询咨询师")
|
||||
@SaCheckPermission("legal.appointmentSet")
|
||||
public Result queryDoctorUser(String keyWord, long startTimeTs, long endTimeTs) {
|
||||
if(StrUtil.isBlank(keyWord)) {
|
||||
keyWord = "";
|
||||
}
|
||||
//先查询该时间段没时间的咨询师
|
||||
Sql doctorSql = Sqls.create("""
|
||||
SELECT
|
||||
|
||||
+6
-1
@@ -1,7 +1,9 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.psychology.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
@@ -55,7 +57,7 @@ public class PsychologyAppointmentSetController {
|
||||
|
||||
@At
|
||||
@ApiOperation("查询时间段内的预约信息")
|
||||
@SaCheckPermission("psychology.appointmentSet")
|
||||
@SaCheckLogin
|
||||
public Result queryAppointmentInfo(Long startTimeTs, Long endTimeTs) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -140,6 +142,9 @@ public class PsychologyAppointmentSetController {
|
||||
@ApiOperation("查询咨询师")
|
||||
@SaCheckPermission("psychology.appointmentSet")
|
||||
public Result queryDoctorUser(String keyWord, long startTimeTs, long endTimeTs) {
|
||||
if(StrUtil.isBlank(keyWord)) {
|
||||
keyWord = "";
|
||||
}
|
||||
//先查询该时间段没时间的咨询师
|
||||
Sql doctorSql = Sqls.create("""
|
||||
SELECT
|
||||
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.constant;
|
||||
|
||||
import com.budwk.app.base.annotation.DictEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @FileName io.v.nutz.zhgh.Recuperation.constant.RecuperationType
|
||||
* @Description: 疗休养分类
|
||||
* @Author zxc
|
||||
* @Date 2022/6/2:14:02
|
||||
* @Version V1.0
|
||||
**/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
@DictEnum(key = "RecuperationProvinceType", name = "疗休养分类")
|
||||
public enum RecuperationType {
|
||||
/**
|
||||
* 省内线路
|
||||
*/
|
||||
provinceInLine("省内线路", 0, RecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/Recuperation/in.png"),
|
||||
|
||||
/**
|
||||
* 省外线路
|
||||
*/
|
||||
provinceOutLine("省外线路", 1, RecuperationProvinceType.provinceOut.getValue(), "/assets/mobile/img/Recuperation/out.png"),
|
||||
|
||||
/**
|
||||
* 省内旅行社
|
||||
*/
|
||||
provinceInTravelAgency("旅行社", 2, RecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/Recuperation/lxs.png"),
|
||||
|
||||
/**
|
||||
* 酒店
|
||||
*/
|
||||
provinceInHotel("分段疗休养", 3, RecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/Recuperation/lxs.png");
|
||||
|
||||
/**
|
||||
* 学校自由组织
|
||||
*/
|
||||
// schoolFree("学校自由报名", 3, RecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/Recuperation/lxs.png");
|
||||
|
||||
private final String label;
|
||||
private final int value;
|
||||
private final String regionType;
|
||||
/**
|
||||
* 缓存状态map k->value v->RecuperationProvinceType.value
|
||||
*/
|
||||
public static Map<Integer, String> typeMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 缓存状态map k->value v->RecuperationProvinceType
|
||||
*/
|
||||
public static Map<Integer, RecuperationType> objMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
RecuperationType[] values = RecuperationType.values();
|
||||
for (RecuperationType t : values) {
|
||||
typeMap.put(t.getValue(), t.getRegionType());
|
||||
objMap.put(t.getValue(), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private final String imgUrl;
|
||||
|
||||
}
|
||||
+372
@@ -0,0 +1,372 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.RecuperationState;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLine;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLineSelect;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLot;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationLineService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationAnnualAnalysisController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/18 15:24
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@At("/platform/recuperation/annualAnalysis")
|
||||
@Api("疗休养年度分析")
|
||||
@Ok("json:full")
|
||||
public class RecuperationAnnualAnalysisController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private RecuperationLineService lineService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/recuperation/annualAnalysis/index.html")
|
||||
@SaCheckLogin
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取年度出行人数、线路数、省内、省外、校工会组织线路数、校省内、校省外线路数")
|
||||
@SaCheckPermission("recuperation.annualAnalysis")
|
||||
public Result getNumData(@Param(value = "year") Integer year,
|
||||
@Param(value = "lineType") String lineType) {
|
||||
// 获取选择线路表的id,后面发现了,报名表里有线路id不在线路表的情况,这类人员要排除掉
|
||||
Sql selectIdSql = Sqls.create("select id from recuperation_line_select");
|
||||
selectIdSql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(selectIdSql);
|
||||
List<String> selectIdList = selectIdSql.getList(String.class);
|
||||
|
||||
// 获取今年报名的所有人数,还要确保报名线路是属于上面选择线路的id
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
takePartInLineId
|
||||
FROM
|
||||
`recuperation_enroll`
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(signingUptime)", "=", year);
|
||||
cnd.andEX("isNormal", "=", true);
|
||||
cnd.andEX("stateId", "=", RecuperationState.PASS);
|
||||
cnd.andEX("takePartInLineId", "in", selectIdList);
|
||||
sql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(sql);
|
||||
// 今年的报名记录
|
||||
List<String> enrollTakePartLineIdList = sql.getList(String.class);
|
||||
|
||||
List<String> takePartInLineIdList = enrollTakePartLineIdList.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
// 今年报名的线路
|
||||
List<RecuperationLineSelect> selectLineList = dao.query(RecuperationLineSelect.class, Cnd.where("id", "in", takePartInLineIdList));
|
||||
|
||||
// 找出选择的线路详情,用于区分省内还是省外
|
||||
List<String> lineIdList = selectLineList.stream().map(RecuperationLineSelect::getLineId).distinct().collect(Collectors.toList());
|
||||
List<RecuperationLine> lineList = dao.query(RecuperationLine.class, Cnd.where("id", "in", lineIdList));
|
||||
|
||||
// 如果不是全部,按搜索条件查询省内还是省外
|
||||
if (StrUtil.isNotBlank(lineType) && !"全部".equals(lineType)) {
|
||||
lineList = lineList.stream().filter(line -> line.getRegionalNature().equals(lineType)).toList();
|
||||
|
||||
List<String> lineTypeIdList = lineList.stream().map(RecuperationLine::getId).toList();
|
||||
|
||||
selectLineList = selectLineList.stream().filter(v -> lineTypeIdList.contains(v.getLineId())).toList();
|
||||
}
|
||||
|
||||
// 省内线路
|
||||
List<RecuperationLine> inLineList = lineList.stream().filter(line -> "省内".equals(line.getRegionalNature())).toList();
|
||||
Set<String> inLineIds = inLineList.stream().map(RecuperationLine::getId).collect(Collectors.toSet());
|
||||
// 选择省内的线路
|
||||
List<String> selectInLineIds = selectLineList.stream().filter(v -> inLineIds.contains(v.getLineId()))
|
||||
.map(RecuperationLineSelect::getId).toList();
|
||||
|
||||
// 省外线路
|
||||
List<RecuperationLine> outLineList = lineList.stream().filter(line -> "省外".equals(line.getRegionalNature())).toList();
|
||||
Set<String> outLineIds = outLineList.stream().map(RecuperationLine::getId).collect(Collectors.toSet());
|
||||
// 选择省外的线路
|
||||
List<String> selectOutLineIds = selectLineList.stream().filter(v -> outLineIds.contains(v.getLineId()))
|
||||
.map(RecuperationLineSelect::getId).toList();
|
||||
|
||||
// 返回前端的数据展示
|
||||
NutMap nutMap = NutMap.NEW();
|
||||
// 总出行人数
|
||||
int allNum = enrollTakePartLineIdList.size();
|
||||
// 省内出行人数
|
||||
int provinceNum = (int) enrollTakePartLineIdList.stream().filter(selectInLineIds::contains).count();
|
||||
// 省外出行人数
|
||||
int outProvinceNum = (int) enrollTakePartLineIdList.stream().filter(selectOutLineIds::contains).count();
|
||||
nutMap.addv("allNum", allNum).addv("provinceNum", provinceNum).addv("outProvinceNum", outProvinceNum);
|
||||
|
||||
// 总线路数
|
||||
int lineNum = selectLineList.size();
|
||||
// 总省内
|
||||
int inLineNum = selectInLineIds.size();
|
||||
// 总省外
|
||||
int outLineNum = selectOutLineIds.size();
|
||||
nutMap.addv("lineNum", lineNum).addv("inLineNum", inLineNum).addv("outLineNum", outLineNum);
|
||||
|
||||
// 校工会组织线路
|
||||
List<RecuperationLineSelect> schoolSelectLineList = selectLineList.stream().filter(v -> v.getSignUpMode() == 2).toList();
|
||||
int schoolUnionLineNum = schoolSelectLineList.size();
|
||||
// 校省内
|
||||
int schoolInLineNum = (int) schoolSelectLineList.stream().filter(s -> inLineIds.contains(s.getLineId())).count();
|
||||
// 校省外
|
||||
int schoolOutLineNum = (int) schoolSelectLineList.stream().filter(s -> outLineIds.contains(s.getLineId())).count();
|
||||
nutMap.addv("schoolUnionLineNum", schoolUnionLineNum).addv("schoolInLineNum", schoolInLineNum).addv("schoolOutLineNum", schoolOutLineNum);
|
||||
|
||||
// 分工会组织线路
|
||||
List<RecuperationLineSelect> unionSelectLineList = selectLineList.stream().filter(v -> v.getSignUpMode() == 1).toList();
|
||||
int unionLineNum = unionSelectLineList.size();
|
||||
// 分省内
|
||||
int unionInLineNum = (int) unionSelectLineList.stream().filter(s -> inLineIds.contains(s.getLineId())).count();
|
||||
// 分省外
|
||||
int unionOutLineNum = (int) unionSelectLineList.stream().filter(s -> outLineIds.contains(s.getLineId())).count();
|
||||
nutMap.addv("unionLineNum", unionLineNum).addv("unionInLineNum", unionInLineNum).addv("unionOutLineNum", unionOutLineNum);
|
||||
return Result.success(nutMap);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("出行时间标段统计")
|
||||
@SaCheckPermission("recuperation.annualAnalysis")
|
||||
public Result getLotNum(@Param(value = "year") Integer year,
|
||||
@Param(value = "lineType") String lineType) {
|
||||
if (year == null) {
|
||||
year = DateUtil.thisYear();
|
||||
}
|
||||
List<RecuperationLot> lotList = dao.query(RecuperationLot.class, Cnd.NEW().asc("lotValue"));
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
enroll.*,
|
||||
line.lotId AS lineLotId
|
||||
FROM
|
||||
recuperation_enroll enroll
|
||||
LEFT JOIN recuperation_line_select us ON us.id = enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(signingUpTime)", "=", year);
|
||||
cnd.and("enroll.isNormal", "=", true);
|
||||
cnd.and("enroll.stateId", "=", RecuperationState.PASS);
|
||||
if (StrUtil.isNotBlank(lineType) && !"全部".equals(lineType)) {
|
||||
cnd.andEX("line.regionalNature", "=", lineType);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = lineService.listMap(sql);
|
||||
|
||||
List<NutMap> resultMap = new ArrayList<>();
|
||||
|
||||
lotList.forEach(item -> {
|
||||
NutMap map = NutMap.NEW();
|
||||
int value = list.stream().filter(v -> item.getId().equals(v.getString("lineLotId"))).toList().size();
|
||||
map.put("label", item.getLotName());
|
||||
map.put("value", value);
|
||||
resultMap.add(map);
|
||||
});
|
||||
return Result.success().addData(resultMap);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("出行年龄分布统计")
|
||||
@SaCheckPermission("recuperation.annualAnalysis")
|
||||
public Result getAgeNum(@Param(value = "year") Integer year,
|
||||
@Param(value = "lineType") String lineType) {
|
||||
if (year == null) {
|
||||
year = DateUtil.thisYear();
|
||||
}
|
||||
Map<String, Integer> result = new HashMap<>();
|
||||
result.put("35岁以下", 0);
|
||||
result.put("35至45岁", 0);
|
||||
result.put("45岁以上", 0);
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
enroll.idCard
|
||||
FROM
|
||||
recuperation_enroll enroll
|
||||
LEFT JOIN recuperation_line_select us ON us.id = enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(signingUpTime)", "=", year);
|
||||
cnd.and("enroll.isNormal", "=", true);
|
||||
cnd.and("enroll.stateId", "=", RecuperationState.PASS);
|
||||
cnd.and("enroll.idCard", "is not", null);
|
||||
cnd.groupBy("enroll.idCard");
|
||||
if (StrUtil.isNotBlank(lineType) && !"全部".equals(lineType)) {
|
||||
cnd.andEX("line.regionalNature", "=", lineType);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
sql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(sql);
|
||||
List<String> idCardList = sql.getList(String.class);
|
||||
|
||||
for (String idCard : idCardList) {
|
||||
if (StrUtil.isBlank(idCard)) {
|
||||
continue;
|
||||
}
|
||||
int birthYear = getBirthYearFromIdCard(idCard);
|
||||
|
||||
if (birthYear == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int age = year - birthYear;
|
||||
|
||||
if (age < 35) {
|
||||
result.put("35岁以下", result.get("35岁以下") + 1);
|
||||
} else if (age <= 45) {
|
||||
result.put("35至45岁", result.get("35至45岁") + 1);
|
||||
} else {
|
||||
result.put("45岁以上", result.get("45岁以上") + 1);
|
||||
}
|
||||
}
|
||||
|
||||
List<NutMap> list = new ArrayList<>();
|
||||
result.forEach((k, v) -> {
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("label", k);
|
||||
map.put("value", v);
|
||||
list.add(map);
|
||||
});
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
private static int getBirthYearFromIdCard(String idCard) {
|
||||
String birthYearStr;
|
||||
if (idCard.length() == 18) {
|
||||
// 18位身份证号,直接取第7到第10位作为出生年份
|
||||
birthYearStr = idCard.substring(6, 10);
|
||||
} else if (idCard.length() == 15) {
|
||||
// 15位身份证号,取第7到第8位作为出生年份的后两位 15位身份证号均为19xx年
|
||||
birthYearStr = "19" + idCard.substring(6, 8);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Integer.parseInt(birthYearStr);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取线路出行人数和年龄统计数据")
|
||||
@SaCheckPermission("recuperation.annualAnalysis")
|
||||
public Result getLineTravelAndAgeData(@Param(value = "year") Integer year,
|
||||
@Param(value = "lineType") String lineType) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
us.id,
|
||||
CONCAT(line.lineName,'(',DATE_FORMAT(us.playStartTime,'%m月%d'),'至',DATE_FORMAT(us.playEndTime,'%m月%d'),')') AS lineName,
|
||||
su.name as unionName,
|
||||
lot.lotName,
|
||||
COUNT(enroll.id) AS takePartInLineNum,
|
||||
SUM(CASE
|
||||
WHEN @year - (CASE
|
||||
WHEN LENGTH(enroll.idCard) = 18 THEN CAST(SUBSTR(enroll.idCard, 7, 4) AS UNSIGNED)
|
||||
WHEN LENGTH(enroll.idCard) = 15 THEN 1900 + CAST(SUBSTR(enroll.idCard, 7, 2) AS UNSIGNED)
|
||||
ELSE NULL
|
||||
END) < 35 THEN 1 ELSE 0 END) AS underThirtyFive,
|
||||
SUM(CASE
|
||||
WHEN @year - (CASE
|
||||
WHEN LENGTH(enroll.idCard) = 18 THEN CAST(SUBSTR(enroll.idCard, 7, 4) AS UNSIGNED)
|
||||
WHEN LENGTH(enroll.idCard) = 15 THEN 1900 + CAST(SUBSTR(enroll.idCard, 7, 2) AS UNSIGNED)
|
||||
ELSE NULL
|
||||
END) BETWEEN 35 AND 45 THEN 1 ELSE 0 END) AS thirtyFiveToFortyFive,
|
||||
SUM(CASE
|
||||
WHEN @year - (CASE
|
||||
WHEN LENGTH(enroll.idCard) = 18 THEN CAST(SUBSTR(enroll.idCard, 7, 4) AS UNSIGNED)
|
||||
WHEN LENGTH(enroll.idCard) = 15 THEN 1900 + CAST(SUBSTR(enroll.idCard, 7, 2) AS UNSIGNED)
|
||||
ELSE NULL
|
||||
END) > 45 THEN 1 ELSE 0 END) AS aboveFortyFive
|
||||
FROM
|
||||
recuperation_line_select us
|
||||
LEFT JOIN recuperation_line line ON us.lineId = line.id
|
||||
LEFT JOIN recuperation_enroll enroll ON enroll.takePartInLineId = us.id
|
||||
LEFT JOIN recuperation_lot lot ON lot.id = line.lotId
|
||||
LEFT JOIN sys_union su ON su.id = us.unionId
|
||||
$condition
|
||||
""").setParam("year", year == null ? DateUtil.thisYear() : year);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(us.selectTime)", "=", year);
|
||||
cnd.and("enroll.isNormal", "=", true);
|
||||
cnd.and("us.`enable`", "=", true);
|
||||
cnd.groupBy("us.id");
|
||||
if (StrUtil.isNotBlank(lineType) && !"全部".equals(lineType)) {
|
||||
cnd.andEX("line.regionalNature", "=", lineType);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = lineService.listMap(sql);
|
||||
|
||||
NutMap result = NutMap.NEW();
|
||||
// 柱状图
|
||||
List<NutMap> uvData = list.stream().map(v -> {
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("lineName", v.getString("lineName"));
|
||||
map.put("value", v.getInt("takePartInLineNum"));
|
||||
return map;
|
||||
}).sorted(Comparator.comparing(v -> v.getString("lineName"))).collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
// 折线图
|
||||
List<NutMap> underThirtyFiveList = list.stream().map(v -> {
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("lineName", v.getString("lineName"));
|
||||
map.put("count", v.getInt("underThirtyFive"));
|
||||
map.put("name", "35岁以下");
|
||||
return map;
|
||||
}).collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
List<NutMap> thirtyFiveToFortyFiveList = list.stream().map(v -> {
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("lineName", v.getString("lineName"));
|
||||
map.put("count", v.getInt("thirtyFiveToFortyFive"));
|
||||
map.put("name", "35至45岁");
|
||||
return map;
|
||||
}).collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
List<NutMap> aboveFortyFiveList = list.stream().map(v -> {
|
||||
NutMap map = NutMap.NEW();
|
||||
map.put("lineName", v.getString("lineName"));
|
||||
map.put("count", v.getInt("aboveFortyFive"));
|
||||
map.put("name", "45岁以上");
|
||||
return map;
|
||||
}).collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
underThirtyFiveList.addAll(thirtyFiveToFortyFiveList);
|
||||
underThirtyFiveList.addAll(aboveFortyFiveList);
|
||||
|
||||
List<NutMap> collect = underThirtyFiveList.stream().sorted(Comparator.comparing(v -> v.getString("lineName"))).collect(Collectors.toList());
|
||||
result.put("uvData", uvData);
|
||||
result.put("transformData", collect);
|
||||
|
||||
return Result.success(result);
|
||||
}
|
||||
}
|
||||
+416
@@ -0,0 +1,416 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.RecuperationState;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationConfig;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnroll;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnrollBed;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnrollCompanion;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationEnrollService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationBranchUnionUserQueryController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/19 15:24
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@At("/platform/recuperation/branchUnionUserQuery")
|
||||
@Api("疗休养分工会查询")
|
||||
@Ok("json:full")
|
||||
public class RecuperationBranchUnionUserQueryController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private RecuperationEnrollService enrollService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/recuperation/branchUnionUserQuery/index.html")
|
||||
@SaCheckLogin
|
||||
public void index() {}
|
||||
|
||||
/**
|
||||
* 分工会人员信息查询
|
||||
*
|
||||
* @param pageForm 分页
|
||||
* @param year 年度
|
||||
* @param userName 姓名
|
||||
* @param loginName 登录名
|
||||
* @param signUpMode 报名方式(1分工会 2校工会 3个人)
|
||||
* @param unionId
|
||||
* @param takePartInLineId 线路id
|
||||
* @param lotId 标段id
|
||||
* @param regionalNature 区域性质 省内 省外
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("recuperation.branchUnionUserQuery")
|
||||
public Result pageData(PageForm pageForm,
|
||||
Integer year,
|
||||
String userName,
|
||||
String loginName,
|
||||
String signUpMode,
|
||||
String unionId,
|
||||
String takePartInLineId,
|
||||
String lotId,
|
||||
String regionalNature) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.regionalNature,
|
||||
line.lineName,
|
||||
agency.travelAgencyName,
|
||||
ma.baseName,
|
||||
enroll.*,
|
||||
lineu.lineId,
|
||||
lineu.playStartTime,
|
||||
lineu.playEndTime,
|
||||
( SELECT COUNT( 1 ) FROM recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
|
||||
$lotSql
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id=enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
|
||||
LEFT JOIN recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
|
||||
$condition
|
||||
""");
|
||||
if (Strings.isNotBlank(pageForm.getSearchKeyword()) && Strings.isNotBlank(pageForm.getSearchName())) {
|
||||
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), "ascending".equalsIgnoreCase(pageForm.getPageOrderBy()) ? "ASC" : "DESC");
|
||||
}
|
||||
|
||||
// 年度
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
if (StrUtil.isNotBlank(userName)) {
|
||||
cnd.where().andLike("enroll.userName", loginName);
|
||||
}
|
||||
if (StrUtil.isNotBlank(loginName)) {
|
||||
cnd.where().andLike("enroll.loginName", userName);
|
||||
}
|
||||
|
||||
// 线路
|
||||
cnd.andEX("enroll.takePartInLineId", "=", takePartInLineId);
|
||||
|
||||
// 标段
|
||||
if (StrUtil.isNotBlank(lotId)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("line.lotId", "=", lotId);
|
||||
seg.or("ma.lotId", "=", lotId);
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// 区域
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
|
||||
// 分工会只查本分工会的人员
|
||||
cnd.and("enroll.selfUnionId", "=", SecurityUtil.getUnionId());
|
||||
|
||||
// 报名模式
|
||||
if (StrUtil.isNotBlank(signUpMode)) {
|
||||
if ("1".equals(signUpMode)) {
|
||||
cnd.andEX("line.signUpMode", "=", 2);
|
||||
} else if ("2".equals(signUpMode)) {
|
||||
cnd.andEX("lineu.unionId", "=", SecurityUtil.getUnionId());
|
||||
cnd.andEX("line.signUpMode", "=", 1);
|
||||
} else if ("3".equals(signUpMode)) {
|
||||
cnd.andEX("lineu.unionId", "!=", SecurityUtil.getUnionId());
|
||||
cnd.andEX("line.signUpMode", "=", 1);
|
||||
} else if ("4".equals(signUpMode)) {
|
||||
cnd.andEX("line.signUpMode", "=", 3);
|
||||
}
|
||||
}
|
||||
|
||||
cnd.desc("enroll.stateId");
|
||||
cnd.andEX("enroll.stateId", "=", RecuperationState.PASS);
|
||||
cnd.andEX("enroll.isNormal", "=", true);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
Pagination pagination = enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
list.forEach(v -> {
|
||||
List<RecuperationEnrollCompanion> companionList = dao.query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
|
||||
for (RecuperationEnrollCompanion enrollCompanion : companionList) {
|
||||
enrollService.fetchLinks(enrollCompanion, "bedInfo");
|
||||
}
|
||||
v.setv("companionList", companionList);
|
||||
});
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置出行人员
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("设置出行人员")
|
||||
@SaCheckPermission("recuperation.branchUnionUserQuery")
|
||||
@SLog(type = "recuperation", tag = "设置出行人员", msg = "设置出行人员")
|
||||
public Result setUpParticipants(@Param("data") String data) {
|
||||
List<NutMap> list = Json.fromJsonAsList(NutMap.class, data);
|
||||
for (NutMap map : list) {
|
||||
Chain chain = Chain.make("lotId", map.getString("lotId")).add("takePartInTime", map.getString("takePartInTime")).add("isTakePartIn", true);
|
||||
dao.update(RecuperationEnroll.class, chain, Cnd.where("id", "=", map.getString("id")));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除报名信息
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("删除报名信息")
|
||||
@SaCheckPermission("recuperation.baseManagement")
|
||||
@SLog(type = "recuperation", tag = "删除报名信息", msg = "删除报名信息")
|
||||
public Result deleteMyEnrollInfoById(String id) {
|
||||
enrollService.deleteMyEnrollInfoById(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑查询详细信息
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("编辑查询详细信息")
|
||||
@SaCheckPermission("recuperation.branchUnionUserQuery")
|
||||
public Result findOne(String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
lxs.travelAgencyName,
|
||||
enroll.*,
|
||||
line.lineName,
|
||||
if(enroll.takePartInUnionId!=enroll.selfUnionId,true,false) isTransferIn,
|
||||
(SELECT COUNT(1) FROM recuperation_enroll_companion WHERE trreId=enroll.id and relation='亲属') isFamily
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN recuperation_travel_agency lxs ON lxs.id = line.travelAgencyId
|
||||
where enroll.id=@id
|
||||
""");
|
||||
sql.setParam("id", id);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao.execute(sql);
|
||||
NutMap data = (NutMap) sql.getResult();
|
||||
List<RecuperationEnrollCompanion> companionList = dao.query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
|
||||
companionList.forEach(v -> {
|
||||
v.setBedInfo(dao.fetch(RecuperationEnrollBed.class, v.getBedInfoId()));
|
||||
});
|
||||
data.put("companionList", companionList);
|
||||
return Result.success(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取线路
|
||||
*
|
||||
* @param year 年度
|
||||
* @param signUpMode 报名模式
|
||||
* @param regionalNature 区域
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("获取线路")
|
||||
@SaCheckPermission("recuperation.branchUnionUserQuery")
|
||||
public Result listLine(Integer year, String signUpMode, String regionalNature) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.takePartInLineId,
|
||||
t3.lineName,
|
||||
t4.name as unionName
|
||||
FROM
|
||||
recuperation_enroll t1
|
||||
LEFT JOIN recuperation_line_select t2 ON t2.id = t1.takePartInLineId
|
||||
LEFT JOIN recuperation_line t3 ON t3.id = t2.lineId
|
||||
LEFT JOIN sys_union t4 ON t4.id = t2.unionId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t1.selfUnionId", "=", SecurityUtil.getUnionId());
|
||||
cnd.andEX("YEAR(t2.selectTime)", "=", year);
|
||||
cnd.andEX("t3.regionalNature", "=", regionalNature);
|
||||
|
||||
if ("1".equals(signUpMode)) {
|
||||
cnd.andEX("t3.signUpMode", "=", 2);
|
||||
} else if ("2".equals(signUpMode)) {
|
||||
cnd.andEX("t2.unionId", "=", SecurityUtil.getUnionId());
|
||||
cnd.and("t3.signUpMode", "=", 1);
|
||||
} else if ("3".equals(signUpMode)) {
|
||||
cnd.andEX("t2.unionId", "!=", SecurityUtil.getUnionId());
|
||||
cnd.and("t3.signUpMode", "=", 1);
|
||||
} else if ("4".equals(signUpMode)) {
|
||||
cnd.andEX("t3.signUpMode", "=", 3);
|
||||
}
|
||||
cnd.groupBy("t1.takePartInLineId");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出")
|
||||
@SaCheckPermission("recuperation.branchUnionUserQuery")
|
||||
public void exportXlsx(Integer year,
|
||||
String userName,
|
||||
String loginName,
|
||||
String signUpMode,
|
||||
String unionId,
|
||||
String takePartInLineId,
|
||||
String lotId,
|
||||
String regionalNature,
|
||||
HttpServletResponse response) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.regionalNature,
|
||||
line.lineName,
|
||||
agency.travelAgencyName,
|
||||
ma.baseName,
|
||||
enroll.*,
|
||||
lineu.lineId,
|
||||
lineu.playStartTime,
|
||||
lineu.playEndTime,
|
||||
( SELECT COUNT( 1 ) FROM recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
|
||||
$lotSql
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id=enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
|
||||
LEFT JOIN recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
|
||||
$condition
|
||||
""");
|
||||
// 年度
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
if (StrUtil.isNotBlank(userName)) {
|
||||
cnd.where().andLike("enroll.userName", userName);
|
||||
}
|
||||
if (StrUtil.isNotBlank(loginName)) {
|
||||
cnd.where().andLike("enroll.loginName", loginName);
|
||||
}
|
||||
|
||||
// 线路
|
||||
cnd.andEX("enroll.takePartInLineId", "=", takePartInLineId);
|
||||
|
||||
// 标段
|
||||
if (StrUtil.isNotBlank(lotId)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("line.lotId", "=", lotId);
|
||||
seg.or("ma.lotId", "=", lotId);
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// 区域
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
|
||||
// 分工会只查本分工会的人员
|
||||
cnd.and("enroll.selfUnionId", "=", SecurityUtil.getUnionId());
|
||||
|
||||
// 报名模式
|
||||
if (StrUtil.isNotBlank(signUpMode)) {
|
||||
if ("1".equals(signUpMode)) {
|
||||
cnd.andEX("line.signUpMode", "=", 2);
|
||||
} else if ("2".equals(signUpMode)) {
|
||||
cnd.andEX("lineu.unionId", "=", SecurityUtil.getUnionId());
|
||||
cnd.andEX("line.signUpMode", "=", 1);
|
||||
} else if ("3".equals(signUpMode)) {
|
||||
cnd.andEX("lineu.unionId", "!=", SecurityUtil.getUnionId());
|
||||
cnd.andEX("line.signUpMode", "=", 1);
|
||||
} else if ("4".equals(signUpMode)) {
|
||||
cnd.andEX("line.signUpMode", "=", 3);
|
||||
}
|
||||
}
|
||||
|
||||
cnd.desc("enroll.stateId");
|
||||
cnd.andEX("enroll.stateId", "=", RecuperationState.PASS);
|
||||
cnd.andEX("enroll.isNormal", "=", true);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
list.forEach(v -> {
|
||||
List<RecuperationEnrollCompanion> companionList = dao.query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
|
||||
for (RecuperationEnrollCompanion enrollCompanion : companionList) {
|
||||
enrollService.fetchLinks(enrollCompanion, "bedInfo");
|
||||
}
|
||||
v.setv("companionList", companionList);
|
||||
});
|
||||
|
||||
// 配置
|
||||
RecuperationConfig config = dao.fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
|
||||
List<ExcelExportEntity> excelEntities = new ArrayList<>();
|
||||
excelEntities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
excelEntities.add(new ExcelExportEntity("单位", "unitName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("工会", "unionName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
|
||||
excelEntities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
if (config.getFamilyInfo() == 2) {
|
||||
excelEntities.add(new ExcelExportEntity("与本人关系", "relation", 10));
|
||||
excelEntities.add(new ExcelExportEntity("床型", "bedType", 10));
|
||||
excelEntities.add(new ExcelExportEntity("床位数", "bedNum", 10));
|
||||
excelEntities.add(new ExcelExportEntity("意向拼房人", "otherSleepUser", 10));
|
||||
} else {
|
||||
excelEntities.add(new ExcelExportEntity("携带家属数", "familyNumber", 10));
|
||||
|
||||
}
|
||||
excelEntities.add(new ExcelExportEntity("备注", "bz", 20));
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("报名人员.xlsx").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelEntities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+130
-25
@@ -1,23 +1,36 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationEnrollService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationEvaluateStatisticsController
|
||||
* @Author JyuHsin
|
||||
@@ -34,11 +47,14 @@ public class RecuperationEvaluateStatisticsController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private RecuperationEnrollService enrollService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/recuperation/statistics/index.html")
|
||||
@SaCheckLogin
|
||||
public void index() {}
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@@ -51,35 +67,38 @@ public class RecuperationEvaluateStatisticsController {
|
||||
@Param(value = "userState") String userState,
|
||||
@Param(value = "evaluateScore") String evaluateScore) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
we.evaluateText,
|
||||
we.evaluateScore,
|
||||
we.userName,
|
||||
we.loginName,
|
||||
u.unionname,
|
||||
u.unitname,
|
||||
u.userState,
|
||||
u.personType,
|
||||
line.lineName,
|
||||
us.playStartTime
|
||||
FROM
|
||||
`recuperation_evaluate` we
|
||||
LEFT JOIN `vw_user` u ON u.id = we.userId
|
||||
LEFT JOIN recuperation_enroll en ON en.takePartInLineId = we.lineId
|
||||
LEFT JOIN recuperation_line_union_select us ON us.id = en.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
$condition
|
||||
""");
|
||||
SELECT
|
||||
we.evaluateText,
|
||||
we.evaluateScore,
|
||||
we.userName,
|
||||
we.loginName,
|
||||
u.unionname as unionName,
|
||||
u.unitname as unitName,
|
||||
u.userState,
|
||||
u.personType,
|
||||
line.lineName,
|
||||
us.playStartTime
|
||||
FROM
|
||||
`recuperation_evaluate` we
|
||||
LEFT JOIN `vw_user` u ON u.id = we.userId
|
||||
LEFT JOIN recuperation_enroll en ON en.takePartInLineId = we.lineId
|
||||
LEFT JOIN recuperation_line_select us ON us.id = en.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), "ascending".equals(pageForm.getPageOrderBy()) ? "asc" : "desc");
|
||||
} else {
|
||||
cnd.desc("we.evaluateScore");
|
||||
}
|
||||
if(StrUtil.isNotBlank(lineId)) {
|
||||
if (StrUtil.isNotBlank(lineId)) {
|
||||
cnd.andEX("we.lineId", "in", lineId.split(","));
|
||||
}
|
||||
cnd.andEX("u.unionid", "=", unionId);
|
||||
@@ -89,7 +108,93 @@ public class RecuperationEvaluateStatisticsController {
|
||||
cnd.andEX("we.evaluateScore", "=", evaluateScore);
|
||||
cnd.groupBy("we.lineId");
|
||||
sql.setCondition(cnd);
|
||||
//enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success();
|
||||
Pagination pagination = enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取线路列表")
|
||||
@SaCheckPermission("recuperation.statistics")
|
||||
public Result lineList(Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
GROUP_CONCAT(us.id) as id,
|
||||
line.lineName,
|
||||
if(us.signUpMode = 2, '校工会', un.name) as unionName
|
||||
FROM
|
||||
recuperation_line_select us
|
||||
LEFT JOIN recuperation_line line ON us.lineId = line.id
|
||||
LEFT JOIN sys_union un ON un.id = us.unionId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("year(us.selectTime)", "=", year);
|
||||
cnd.groupBy("lineId, unionid");
|
||||
sql.setCondition(cnd);
|
||||
return Result.success(enrollService.listMap(sql));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("导出评价统计")
|
||||
@SaCheckPermission("recuperation.statistics")
|
||||
public void exportEvaluate(String lineId,
|
||||
String unionId,
|
||||
String unitId,
|
||||
String evaluateScore,
|
||||
String searchKeyword,
|
||||
String searchName,
|
||||
HttpServletResponse response) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
we.evaluateText,
|
||||
we.evaluateScore,
|
||||
we.userName,
|
||||
we.loginName,
|
||||
u.unionname,
|
||||
u.unitname,
|
||||
u.userState,
|
||||
u.personType,
|
||||
line.lineName,
|
||||
us.playStartTime
|
||||
FROM
|
||||
`recuperation_evaluate` we
|
||||
LEFT JOIN `vw_user` u ON u.id = we.userId
|
||||
LEFT JOIN recuperation_enroll en ON en.takePartInLineId = we.lineId
|
||||
LEFT JOIN recuperation_line_select us ON us.id = en.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(searchName) && StrUtil.isNotBlank(searchKeyword)) {
|
||||
cnd.and(Cnd.likeEX(searchName, searchKeyword));
|
||||
}
|
||||
if (StrUtil.isNotBlank(lineId)) {
|
||||
cnd.andEX("we.lineId", "in", lineId.split(","));
|
||||
}
|
||||
cnd.andEX("u.unionid", "=", unionId);
|
||||
cnd.andEX("u.unitid", "=", unitId);
|
||||
cnd.andEX("we.evaluateScore", "=", evaluateScore);
|
||||
cnd.groupBy("we.lineId");
|
||||
sql.setCondition(cnd);
|
||||
|
||||
List<NutMap> listMap = enrollService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("线路", "lineName", 20));
|
||||
entities.add(new ExcelExportEntity("出行时间", "playStartTime", 20));
|
||||
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
entities.add(new ExcelExportEntity("所属单位", "unitname", 20));
|
||||
entities.add(new ExcelExportEntity("所属工会", "unionname", 20));
|
||||
entities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
entities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
entities.add(new ExcelExportEntity("评分", "evaluateScore", 20));
|
||||
entities.add(new ExcelExportEntity("评价", "evaluateText", 40));
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, listMap);
|
||||
CommonDownloadUtil.download("评价人员名单.xlsx", workbook, response);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+357
@@ -0,0 +1,357 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationConfig;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLineSelect;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLot;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationLineSelectService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationLineSelectController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/18 15:53
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@At("/platform/recuperation/lineSelect")
|
||||
@Api("疗休养选择线路")
|
||||
@Ok("json:full")
|
||||
public class RecuperationLineSelectController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private RecuperationLineSelectService lineSelectService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/recuperation/lineSelect/index.html")
|
||||
@SaCheckLogin
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param("year") Integer year,
|
||||
@Param("keywords") String keywords,
|
||||
@Param("selectStatus") int selectStatus,
|
||||
@Param("unionId") String unionId,
|
||||
@Param("lotId") String lotId,
|
||||
@Param("travelAgencyId") String travelAgencyId,
|
||||
@Param("mode") Integer mode,
|
||||
@Param("regionalNature") String regionalNature) {
|
||||
RecuperationConfig config = lineSelectService.dao().fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("line.lotId", "=", lotId);
|
||||
cnd.andEX("line.travelAgencyId", "=", travelAgencyId);
|
||||
if (!"全部".equals(regionalNature)) {
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
}
|
||||
|
||||
//当前登录用户已选择的线路id
|
||||
Sql hasSelectLineSql;
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and(Cnd.exps("line.createUnionId", "=", SecurityUtil.getUnionId()).or("createMode", "=", 2));
|
||||
hasSelectLineSql = Sqls.createf("""
|
||||
select lineId from recuperation_line_select where selectUserId = '%s' AND unionId = '%s' AND year(selectTime) = %s
|
||||
""", SecurityUtil.getUserId(), SecurityUtil.getUnionId(), year == null ? DateUtil.thisYear() : year);
|
||||
} else {
|
||||
hasSelectLineSql = Sqls.createf("""
|
||||
select lineId from recuperation_line_select where year(selectTime) = %s
|
||||
""", year == null ? DateUtil.thisYear() : year);
|
||||
}
|
||||
|
||||
switch (selectStatus) {
|
||||
//查询未选择的线路
|
||||
case -1 -> {
|
||||
cnd.and("line.id", "not in", hasSelectLineSql);
|
||||
cnd.and("line.year", "in", year == null ? Lang.array(config.getProvinceStartYear(), config.getProvinceStartYear() + 1) : year);
|
||||
}
|
||||
|
||||
case 0 -> {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("us.signUpMode", "is", null);
|
||||
seg.or("us.signUpMode", "=", mode);
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
/*case 0 -> {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or(Cnd.exps("line.id", "not in", hasSelectLineSql).and("line.createMode", "=", RecuperationLineCreateMode.SCHOOL.getValue()));
|
||||
seg.or("line.id", "in", hasSelectLineSql);
|
||||
cnd.and(seg);
|
||||
}*/
|
||||
|
||||
//查询已选择的线路
|
||||
case 1 -> {
|
||||
cnd.and("line.id", "in", hasSelectLineSql);
|
||||
cnd.and("us.signUpMode", "=", mode);
|
||||
cnd.and("year(us.selectTime)", "=", year == null ? DateUtil.thisYear() : year);
|
||||
}
|
||||
}
|
||||
|
||||
cnd.and("line.isDisabled", "=", 0);
|
||||
|
||||
if (StrUtil.isNotBlank(keywords)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("line.lineName", keywords);
|
||||
seg.orLike("ta.travelAgencyName", keywords);
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotEmpty(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().replace("ending", ""));
|
||||
} else {
|
||||
cnd.asc("createUnionId").desc("year").asc("serialNumber");
|
||||
}
|
||||
Pagination pagination = lineSelectService.pageData(pageForm, cnd, year);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择线路
|
||||
*
|
||||
* @param us 选择线路信息
|
||||
* @return {@link Result}
|
||||
*/
|
||||
@At("/selectLine")
|
||||
@ApiOperation("选择线路")
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
@SLog(type = "recuperation", tag = "选择线路", msg = "选择线路")
|
||||
public Result selectLine(RecuperationLineSelect us) {
|
||||
lineSelectService.selectLine(us);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择线路时间
|
||||
*
|
||||
* @param lineSelects 选择线路
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At("/selectLineTimes")
|
||||
@ApiOperation("选择线路时间")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
@SLog(type = "recuperation", tag = "选择线路时间", msg = "选择线路时间")
|
||||
public Result selectLineTimes(@Param("lineSelects") RecuperationLineSelect[] lineSelects) {
|
||||
if (Lang.isNotEmpty(lineSelects)) {
|
||||
RecuperationLineSelect lineUnionSelect = lineSelects[0];
|
||||
List<RecuperationLineSelect> oldUnionSelects = lineSelectService.query(Cnd.where("unionId", "=", SecurityUtil.getUnionId()).and("lineId", "=", lineUnionSelect.getUnionId()));
|
||||
|
||||
//组织形式
|
||||
int signUpMode = AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name()) ? 1 : 2;
|
||||
|
||||
RecuperationLineSelect recuperationLineSelect = dao.fetch(RecuperationLineSelect.class, Cnd.where("id", "=", lineUnionSelect.getId()));
|
||||
|
||||
for (RecuperationLineSelect lineSelect : lineSelects) {
|
||||
lineSelect.setSelectTime(new Date());
|
||||
lineSelect.setSelectUserId(SecurityUtil.getUserId());
|
||||
lineSelect.setUnionId(SecurityUtil.getUnionId());
|
||||
lineSelect.setIsOpen(Lang.isNotEmpty(recuperationLineSelect) ? recuperationLineSelect.getIsOpen() : false);
|
||||
lineSelect.setDelFlag(signUpMode == 2);
|
||||
lineSelect.setSignUpMode(signUpMode);
|
||||
}
|
||||
|
||||
//新增或修改
|
||||
dao.insertOrUpdate(lineSelects);
|
||||
List<String> newIds = Arrays.stream(lineSelects).map(RecuperationLineSelect::getId).toList();
|
||||
//删除
|
||||
List<String> deleteIds = oldUnionSelects.stream().map(RecuperationLineSelect::getId).filter(v -> !newIds.contains(v)).toList();
|
||||
lineSelectService.clear(Cnd.where("id", "in", deleteIds));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询线路信息")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
public Result selectLineInfo(@Param("lineId") String lineId, @Param("unionId") String unionId, @Param("mode") Integer mode, @Param("year") Integer year) {
|
||||
try {
|
||||
Assert.notBlank(lineId);
|
||||
Assert.notNull(mode);
|
||||
unionId = StrUtil.emptyToNull(SecurityUtil.getUnionId());
|
||||
|
||||
if (mode == 1 && !AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
||||
return Result.error("您没有分工会角色权限!");
|
||||
} else if (mode == 2 && !AuthUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
return Result.error("您没有校工会角色权限!");
|
||||
}
|
||||
return Result.success(lineSelectService.selectLineInfo(lineId, unionId, mode, year));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询某个分工会设置的线路时间信息
|
||||
*
|
||||
* @param lineId 行id
|
||||
* @param usUnionId 我们工会id
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("查询某个分工会设置的线路时间信息")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
public Result findUsLineInfo(String lineId, String usUnionId) {
|
||||
RecuperationLineSelect lineSelect = lineSelectService.findUsLineInfo(lineId, usUnionId);
|
||||
return Result.success(lineSelect);
|
||||
}
|
||||
|
||||
@At("/deSelect")
|
||||
@ApiOperation("取消选择线路")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
@SLog(tag = "recuperation", msg = "取消选择线路", param = true, result = true)
|
||||
public Result deSelect(@Param("lineId") String lineId, @Param("unionId") String unionId) {
|
||||
try {
|
||||
Assert.notBlank(lineId);
|
||||
Assert.notBlank(unionId);
|
||||
Cnd enrollCnd = Cnd.where("unionId", "=", unionId);
|
||||
enrollCnd.and("lineId", "=", lineId);
|
||||
lineSelectService.clear(enrollCnd);
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 旅行社
|
||||
*
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("查询旅行社信息")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
public Result getTravelAgencyOptions() {
|
||||
List<RecuperationTravelAgency> travelAgencies = lineSelectService.dao().query(RecuperationTravelAgency.class, Cnd.NEW().asc("serialNumber"));
|
||||
return Result.success(travelAgencies);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否公开分工会选择线路
|
||||
*
|
||||
* @param id 分工会选择线路id
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At("/isOpenUnionLine/?")
|
||||
@ApiOperation("是否公开分工会选择线路")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
@SLog(tag = "recuperation", msg = "公开分工会选择线路", param = true, result = true)
|
||||
public Result isOpenUnionLine(String id) {
|
||||
if (StrUtil.isBlank(id)) {
|
||||
return Result.error("参数错误");
|
||||
}
|
||||
dao.update(RecuperationLineSelect.class, Chain.makeSpecial("isOpen", "isOpen ^ 1"), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At("/getLineConfig/?")
|
||||
@ApiOperation("获取线路配置信息")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
public Result getLineConfig(String id) {
|
||||
Sql sql = Sqls.create("select lotId from recuperation_line where id = @lineId");
|
||||
sql.setParam("lineId", id);
|
||||
String lotId = (String) Daos.query(dao, sql.toString(), Sqls.callback.str());
|
||||
RecuperationLot lotInfo = dao.fetch(RecuperationLot.class, lotId);
|
||||
Integer cost = Optional.ofNullable(lotInfo).map(RecuperationLot::getActivityCost).orElse(0);
|
||||
RecuperationConfig config = dao.fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
Integer groupNumber = Optional.ofNullable(config).map(RecuperationConfig::getGroupNumber).orElse(0);
|
||||
return Result.success(Map.of("cost", cost, "groupNumber", groupNumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* 一键统赋时间,针对于已选择的线路
|
||||
*
|
||||
* @param lineIds 线路Id数组
|
||||
* @param lineSelects 出行时段
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@At("/setGiveLineTimes")
|
||||
@ApiOperation("一键统赋时间,针对于已选择的线路")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
@SLog(type = "普惠疗休养", tag = "分工会/校工会选择线路", msg = "一键统赋时间,针对于已选择的线路", param = true, result = true)
|
||||
public Result setGiveLineTimes(@Param("lineIds") String[] lineIds,
|
||||
@Param("lineUnionSelects") RecuperationLineSelect[] lineSelects,
|
||||
@Param(value = "year") Integer year) {
|
||||
if (Lang.isNotEmpty(lineSelects) && Lang.isNotEmpty(lineIds)) {
|
||||
RecuperationLineSelect lineUnionSelect = lineSelects[0];
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
cnd.and("selectUserId", "=", SecurityUtil.getUserId());
|
||||
cnd.and("YEAR(selectTime)", "=", year == null ? DateUtil.thisYear() : year);
|
||||
List<RecuperationLineSelect> unionSelectList = dao.query(RecuperationLineSelect.class, cnd);
|
||||
|
||||
List<String> selectIdList = unionSelectList.stream().map(RecuperationLineSelect::getId).collect(Collectors.toList());
|
||||
Chain chain = Chain.make("enable", 1);
|
||||
if (lineUnionSelect.getSignUpStartTime() != null)
|
||||
chain.add("signUpStartTime", lineUnionSelect.getSignUpStartTime());
|
||||
if (lineUnionSelect.getSignUpEndTime() != null)
|
||||
chain.add("signUpEndTime", lineUnionSelect.getSignUpEndTime());
|
||||
if (lineUnionSelect.getChangeEndTime() != null)
|
||||
chain.add("changeEndTime", lineUnionSelect.getChangeEndTime());
|
||||
if (lineUnionSelect.getPlayStartTime() != null)
|
||||
chain.add("playStartTime", lineUnionSelect.getPlayStartTime());
|
||||
if (lineUnionSelect.getPlayEndTime() != null) chain.add("playEndTime", lineUnionSelect.getPlayEndTime());
|
||||
|
||||
dao.update(RecuperationLineSelect.class, chain, Cnd.where("id", "in", selectIdList));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("是否开放对外报名")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"recuperation.branchUnionSelect", "recuperation.schoolUnionSelect"}, mode = SaMode.OR)
|
||||
@SLog(type = "普惠疗休养", tag = "分工会/校工会选择线路", msg = "是否开放对外报名", param = true, result = true)
|
||||
public Result doEditOpen(String id) {
|
||||
dao.update(RecuperationLineSelect.class, Chain.makeSpecial("isOpen", "isOpen ^ 1"), Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+463
@@ -0,0 +1,463 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.RecuperationState;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationConfig;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnroll;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnrollBed;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnrollCompanion;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationEnrollService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationSchoolUnionUserQueryController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/19 15:34
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@At("/platform/recuperation/schoolUnionUserQuery")
|
||||
@Api("疗休养校工会查询")
|
||||
@Ok("json:full")
|
||||
public class RecuperationSchoolUnionUserQueryController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private RecuperationEnrollService enrollService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/recuperation/schoolUnionUserQuery/index.html")
|
||||
@SaCheckLogin
|
||||
public void index() {}
|
||||
|
||||
/**
|
||||
* 校工会人员信息查询
|
||||
*
|
||||
* @param pageForm 分页
|
||||
* @param year 年度
|
||||
* @param userName 姓名
|
||||
* @param loginName 登录名
|
||||
* @param signUpMode 报名方式(1分工会 2校工会 3个人)
|
||||
* @param unionId 分工会id
|
||||
* @param takePartInLineId 线路id
|
||||
* @param lotId 标段id
|
||||
* @param regionalNature 区域性质 省内 省外
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
public Result pageData(PageForm pageForm,
|
||||
Integer year,
|
||||
String userName,
|
||||
String loginName,
|
||||
String signUpMode,
|
||||
String unionId,
|
||||
String takePartInLineId,
|
||||
String lotId,
|
||||
String regionalNature) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.regionalNature,
|
||||
line.lineName,
|
||||
agency.travelAgencyName,
|
||||
ma.baseName,
|
||||
enroll.*,
|
||||
lineu.lineId,
|
||||
lineu.playStartTime,
|
||||
lineu.playEndTime,
|
||||
( SELECT COUNT( 1 ) FROM recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
|
||||
$lotSql
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id=enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
|
||||
LEFT JOIN recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
|
||||
$condition
|
||||
""");
|
||||
if (Strings.isNotBlank(pageForm.getSearchKeyword()) && Strings.isNotBlank(pageForm.getSearchName())) {
|
||||
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), "ascending".equalsIgnoreCase(pageForm.getPageOrderBy()) ? "ASC" : "DESC");
|
||||
}
|
||||
|
||||
cnd.and("enroll.takePartInLineId", "is not", null);
|
||||
|
||||
// 年度
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
if (StrUtil.isNotBlank(userName)) {
|
||||
cnd.where().andLike("enroll.userName", userName);
|
||||
}
|
||||
if (StrUtil.isNotBlank(loginName)) {
|
||||
cnd.where().andLike("enroll.loginName", loginName);
|
||||
}
|
||||
|
||||
// 线路
|
||||
cnd.andEX("enroll.takePartInLineId", "=", takePartInLineId);
|
||||
|
||||
// 标段
|
||||
if (StrUtil.isNotBlank(lotId)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("line.lotId", "=", lotId);
|
||||
seg.or("ma.lotId", "=", lotId);
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// 区域
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
|
||||
// 校工会可查询指定分工会
|
||||
cnd.andEX("enroll.selfUnionId", "=", unionId);
|
||||
|
||||
// // 报名模式
|
||||
// if (StrUtil.isNotBlank(signUpMode)) {
|
||||
// if (signUpMode.equals("1")) {
|
||||
// cnd.andEX("line.signUpMode", "=", 2);
|
||||
// } else if (signUpMode.equals("2")) {
|
||||
// cnd.andEX("lineu.unionId", "=", Vi.getUnionId());
|
||||
// cnd.andEX("line.signUpMode", "=", 1);
|
||||
// } else if (signUpMode.equals("3")) {
|
||||
// cnd.andEX("lineu.unionId", "!=", Vi.getUnionId());
|
||||
// cnd.andEX("line.signUpMode", "=", 1);
|
||||
// } else if (signUpMode.equals("4")) {
|
||||
// cnd.andEX("line.signUpMode", "=", 3);
|
||||
// }
|
||||
// }
|
||||
|
||||
cnd.desc("enroll.stateId");
|
||||
cnd.andEX("enroll.stateId", "=", RecuperationState.PASS);
|
||||
cnd.andEX("enroll.isNormal", "=", true);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
Pagination pagination = enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
list.forEach(v -> {
|
||||
List<RecuperationEnrollCompanion> companionList = dao.query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
|
||||
for (RecuperationEnrollCompanion enrollCompanion : companionList) {
|
||||
enrollService.fetchLinks(enrollCompanion, "bedInfo");
|
||||
}
|
||||
v.setv("companionList", companionList);
|
||||
});
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置出行人员
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("设置出行人员")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
@SLog(type = "recuperation", tag = "设置出行人员", msg = "设置出行人员")
|
||||
public Result setUpParticipants(@Param("data") String data) {
|
||||
List<NutMap> list = Json.fromJsonAsList(NutMap.class, data);
|
||||
for (NutMap map : list) {
|
||||
Chain chain = Chain.make("lotId", map.getString("lotId")).add("takePartInTime", map.getString("takePartInTime")).add("isTakePartIn", true);
|
||||
dao.update(RecuperationEnroll.class, chain, Cnd.where("id", "=", map.getString("id")));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除报名信息
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("删除报名信息")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
@SLog(type = "recuperation", tag = "删除报名信息", msg = "删除报名信息")
|
||||
public Result deleteMyEnrollInfoById(String id) {
|
||||
enrollService.deleteMyEnrollInfoById(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑查询详细信息
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("编辑查询详细信息")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
public Result findOne(String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
lxs.travelAgencyName,
|
||||
enroll.*,
|
||||
line.lineName,
|
||||
if(enroll.takePartInUnionId!=enroll.selfUnionId,true,false) isTransferIn,
|
||||
(SELECT COUNT(1) FROM recuperation_enroll_companion WHERE trreId=enroll.id and relation='亲属') isFamily
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN recuperation_travel_agency lxs ON lxs.id = line.travelAgencyId
|
||||
where enroll.id=@id
|
||||
""");
|
||||
sql.setParam("id", id);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao.execute(sql);
|
||||
NutMap data = (NutMap) sql.getResult();
|
||||
List<RecuperationEnrollCompanion> companionList = dao.query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
|
||||
companionList.forEach(v -> {
|
||||
v.setBedInfo(dao.fetch(RecuperationEnrollBed.class, v.getBedInfoId()));
|
||||
});
|
||||
data.put("companionList", companionList);
|
||||
return Result.success(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取线路
|
||||
*
|
||||
* @param year 年度
|
||||
* @param signUpMode 报名模式
|
||||
* @param unionId 分工会id
|
||||
* @param regionalNature 区域
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("获取线路")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
public Result listLine(Integer year, String signUpMode, String unionId, String regionalNature) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.takePartInLineId,
|
||||
t3.lineName,
|
||||
t4.name as unionName
|
||||
FROM
|
||||
recuperation_enroll t1
|
||||
LEFT JOIN recuperation_line_select t2 ON t2.id = t1.takePartInLineId
|
||||
LEFT JOIN recuperation_line t3 ON t3.id = t2.lineId
|
||||
LEFT JOIN sys_union t4 ON t4.id = t2.unionId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("t1.selfUnionId", "=", unionId);
|
||||
cnd.andEX("YEAR(t2.selectTime)", "=", year);
|
||||
cnd.andEX("t3.regionalNature", "=", regionalNature);
|
||||
cnd.groupBy("t1.takePartInLineId");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
public void exportXlsx(Integer year,
|
||||
String userName,
|
||||
String loginName,
|
||||
String signUpMode,
|
||||
String unionId,
|
||||
String takePartInLineId,
|
||||
String lotId,
|
||||
String regionalNature,
|
||||
HttpServletResponse response) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.regionalNature,
|
||||
line.lineName,
|
||||
agency.travelAgencyName,
|
||||
ma.baseName,
|
||||
enroll.*,
|
||||
lineu.lineId,
|
||||
lineu.playStartTime,
|
||||
lineu.playEndTime,
|
||||
( SELECT COUNT( 1 ) FROM recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
|
||||
$lotSql
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id=enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
|
||||
LEFT JOIN recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
|
||||
$condition
|
||||
""");
|
||||
cnd.and("enroll.takePartInLineId", "is not", null);
|
||||
// 年度
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
if (StrUtil.isNotBlank(userName)) {
|
||||
cnd.where().andLike("enroll.userName", userName);
|
||||
}
|
||||
if (StrUtil.isNotBlank(loginName)) {
|
||||
cnd.where().andLike("enroll.loginName", loginName);
|
||||
}
|
||||
|
||||
// 线路
|
||||
cnd.andEX("enroll.takePartInLineId", "=", takePartInLineId);
|
||||
|
||||
// 标段
|
||||
if (StrUtil.isNotBlank(lotId)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("line.lotId", "=", lotId);
|
||||
seg.or("ma.lotId", "=", lotId);
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// 区域
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
|
||||
// 校工会可查询指定分工会
|
||||
cnd.andEX("enroll.selfUnionId", "=", unionId);
|
||||
|
||||
// // 报名模式
|
||||
// if (StrUtil.isNotBlank(signUpMode)) {
|
||||
// if (signUpMode.equals("1")) {
|
||||
// cnd.andEX("line.signUpMode", "=", 2);
|
||||
// } else if (signUpMode.equals("2")) {
|
||||
// cnd.andEX("lineu.unionId", "=", Vi.getUnionId());
|
||||
// cnd.andEX("line.signUpMode", "=", 1);
|
||||
// } else if (signUpMode.equals("3")) {
|
||||
// cnd.andEX("lineu.unionId", "!=", Vi.getUnionId());
|
||||
// cnd.andEX("line.signUpMode", "=", 1);
|
||||
// } else if (signUpMode.equals("4")) {
|
||||
// cnd.andEX("line.signUpMode", "=", 3);
|
||||
// }
|
||||
// }
|
||||
|
||||
cnd.desc("enroll.stateId");
|
||||
cnd.andEX("enroll.stateId", "=", RecuperationState.PASS);
|
||||
cnd.andEX("enroll.isNormal", "=", true);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
list.forEach(v -> {
|
||||
List<RecuperationEnrollCompanion> companionList = dao.query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
|
||||
for (RecuperationEnrollCompanion enrollCompanion : companionList) {
|
||||
enrollService.fetchLinks(enrollCompanion, "bedInfo");
|
||||
}
|
||||
v.setv("companionList", companionList);
|
||||
});
|
||||
|
||||
// 配置
|
||||
RecuperationConfig config = dao.fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
|
||||
List<ExcelExportEntity> excelEntities = new ArrayList<>();
|
||||
excelEntities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
excelEntities.add(new ExcelExportEntity("单位", "unitName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("工会", "unionName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
|
||||
excelEntities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||
if (config.getFamilyInfo() == 2) {
|
||||
excelEntities.add(new ExcelExportEntity("与本人关系", "relation", 10));
|
||||
excelEntities.add(new ExcelExportEntity("床型", "bedType", 10));
|
||||
excelEntities.add(new ExcelExportEntity("床位数", "bedNum", 10));
|
||||
excelEntities.add(new ExcelExportEntity("意向拼房人", "otherSleepUser", 10));
|
||||
} else {
|
||||
excelEntities.add(new ExcelExportEntity("携带家属数", "familyNumber", 10));
|
||||
|
||||
}
|
||||
excelEntities.add(new ExcelExportEntity("备注", "bz", 20));
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("报名人员.xlsx").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelEntities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出未报名人员")
|
||||
@SaCheckPermission("recuperation.schoolUnionUserQuery")
|
||||
public void noSignExport(HttpServletResponse response) {
|
||||
RecuperationConfig config = dao.fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
Sql sql = Sqls.create("""
|
||||
select
|
||||
u.username as userName,
|
||||
u.loginname as loginName,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.unitname as unitName,
|
||||
u.name as unionName,
|
||||
u.remark
|
||||
from
|
||||
activity_user_scope us
|
||||
left join vw_user u on u.id = us.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("us.groupId", "=", config.getActivityGroupId());
|
||||
cnd.and(new Static(" u.loginname not in (select loginName from recuperation_enroll where year(signingUptime) = '%s' and isNormal = true)".formatted(DateUtil.thisYear())));
|
||||
cnd.asc("unitcode");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> listMap = enrollService.listMap(sql);
|
||||
|
||||
for (int i = 0; i < listMap.size(); i++) {
|
||||
listMap.get(i).put("index", i + 1);
|
||||
}
|
||||
|
||||
List<ExcelExportEntity> excelEntities = new ArrayList<>();
|
||||
excelEntities.add(new ExcelExportEntity("序号", "index", 10));
|
||||
excelEntities.add(new ExcelExportEntity("姓名", "userName", 10));
|
||||
excelEntities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("性别", "sex", 10));
|
||||
excelEntities.add(new ExcelExportEntity("联系方式", "mobile", 20));
|
||||
excelEntities.add(new ExcelExportEntity("所属单位", "unitName", 20));
|
||||
excelEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String((DateUtil.thisYear() + "未报名人员.xlsx").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelEntities, listMap);
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.model;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationEnrollChangeRecord
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/19 15:48
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Data
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("疗休养登记变更记录表")
|
||||
public class RecuperationEnrollChangeRecord {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("变更记录id")
|
||||
private String enrollId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("变更时间")
|
||||
private Date changeTime;
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author NINGMEI
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("recuperation_evaluate")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("疗休养评价统计表")
|
||||
public class RecuperationEvaluate extends BaseModel implements Serializable {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("参加线路id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String lineId;
|
||||
|
||||
@Column
|
||||
@Comment("用户ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@Comment("工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@Comment("评分")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String evaluateScore;
|
||||
|
||||
@Column
|
||||
@Comment("评价内容")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String evaluateText;
|
||||
|
||||
@Column
|
||||
@Comment("评价时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date applyDate;
|
||||
}
|
||||
+2
-2
@@ -17,10 +17,10 @@ import java.util.Date;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("recuperation_line_union_select")
|
||||
@Table("recuperation_line_select")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("疗休养线路")
|
||||
public class RecuperationLineUnionSelect extends BaseModel {
|
||||
public class RecuperationLineSelect extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnroll;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationEnrollService
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/18 14:56
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
public interface RecuperationEnrollService extends BaseService<RecuperationEnroll> {
|
||||
|
||||
/**
|
||||
* 报名页面数据
|
||||
*
|
||||
* @param pageForm 分页参数
|
||||
* @param trrt trrt
|
||||
* @return {@link Pagination}
|
||||
*/
|
||||
Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType);
|
||||
|
||||
List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType);
|
||||
|
||||
/**
|
||||
* 线路报名
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
void doSignUpForLine(RecuperationEnroll enrollInfo);
|
||||
|
||||
/**
|
||||
* 变更报名
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
void updateSignUpLine(RecuperationEnroll enrollInfo);
|
||||
|
||||
/**
|
||||
* 报名旅行社
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
void doSignUpForTravelAgency(RecuperationEnroll enrollInfo);
|
||||
|
||||
/**
|
||||
* 报名酒店
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
void doSignUpForHotel(RecuperationEnroll enrollInfo);
|
||||
|
||||
void updateSignUpHotel(RecuperationEnroll enrollInfo);
|
||||
|
||||
/**
|
||||
* 变更报名旅行社
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
void updateSignUpTravelAgency(RecuperationEnroll enrollInfo);
|
||||
|
||||
/**
|
||||
* 验证报名登记信息
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
* @param loginName 用户名
|
||||
* @return {@link Map}<{@link Boolean}, {@link String}>
|
||||
*/
|
||||
Map<Boolean, String> validSignUpInfo(String loginName, RecuperationEnroll enrollInfo);
|
||||
|
||||
/**
|
||||
* 我报名的页面数据
|
||||
*
|
||||
* @param pageForm 分页参数
|
||||
* @param cnd cnd
|
||||
* @return {@link Pagination}
|
||||
*/
|
||||
Pagination mySignUpPageData(PageForm pageForm, Cnd cnd, int trrt, Integer year);
|
||||
|
||||
/**
|
||||
* 找到报名信息通过id
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link RecuperationEnroll}
|
||||
*/
|
||||
RecuperationEnroll findSignUpInfoById(String id);
|
||||
|
||||
/**
|
||||
* 删除我的报名信息
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
void deleteMyEnrollInfoById(String id);
|
||||
|
||||
/**
|
||||
* 手机端线路介绍所有信息
|
||||
*
|
||||
* @param usId usId
|
||||
* @param usUnionId usUnionId
|
||||
* @return {@link NutMap}
|
||||
*/
|
||||
NutMap selectLineAllInfo(String usId, String usUnionId);
|
||||
|
||||
List<Sys_union> getUnions(Integer year);
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLineSelect;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationLineUnionSelectService
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/18 15:54
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
public interface RecuperationLineSelectService extends BaseService<RecuperationLineSelect> {
|
||||
|
||||
/**
|
||||
* 页面数据
|
||||
* @param pageForm 分页参数
|
||||
* @param cnd cnd
|
||||
* @return {@link Pagination}
|
||||
*/
|
||||
Pagination pageData(PageForm pageForm, Cnd cnd, Integer year);
|
||||
|
||||
/**
|
||||
* 选择线路
|
||||
* @param us 分工会选择线路信息
|
||||
*/
|
||||
void selectLine(RecuperationLineSelect us);
|
||||
|
||||
/**
|
||||
* 已经选择的线路ids
|
||||
*
|
||||
* @return {@link List}<{@link String}>
|
||||
*/
|
||||
List<String> getHasSelectLineIds();
|
||||
|
||||
/**
|
||||
* 设置的活动时间信息
|
||||
*
|
||||
* @param lineId 行id
|
||||
* @return {@link Object}
|
||||
*/
|
||||
Object selectLineInfo(String lineId, String unionId,Integer mode, Integer year);
|
||||
|
||||
/**
|
||||
* 设置线路时间信息
|
||||
* @param lineSelect 联盟选择
|
||||
*/
|
||||
void setLineInfo(RecuperationLineSelect lineSelect);
|
||||
|
||||
/**
|
||||
* 查询某个分工会设置的线路时间信息
|
||||
* @param lineId 行id
|
||||
* @param usUnionId 我们工会id
|
||||
* @return {@link NutMap}
|
||||
*/
|
||||
RecuperationLineSelect findUsLineInfo(String lineId, String usUnionId);
|
||||
|
||||
/**
|
||||
* 分工会取消选择线路
|
||||
*
|
||||
* @param usId union_select 主键id
|
||||
*/
|
||||
void deSelect(String usId);
|
||||
}
|
||||
+934
@@ -0,0 +1,934 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.*;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.*;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationEnrollService;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationLineService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.entity.Record;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.Period;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationEnrollServiceImpl
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/18 14:56
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class RecuperationEnrollServiceImpl extends BaseServiceImpl<RecuperationEnroll> implements RecuperationEnrollService {
|
||||
|
||||
@Inject
|
||||
private RecuperationLineService lineService;
|
||||
|
||||
public RecuperationEnrollServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
static Map<String, RecuperationType> regionTypeLineMap = new HashMap<>() {{
|
||||
put(RecuperationType.provinceOutLine.getRegionType(), RecuperationType.provinceOutLine);
|
||||
put(RecuperationType.provinceInLine.getRegionType(), RecuperationType.provinceInLine);
|
||||
}};
|
||||
|
||||
@Override
|
||||
public Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (List.of(RecuperationType.provinceInLine.getValue(), RecuperationType.provinceOutLine.getValue()).contains(trrt)) {
|
||||
Sql lineSql = Sqls.create("""
|
||||
SELECT
|
||||
us.id as usId,
|
||||
line.id as lineId,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
us.minimumGroupSize,
|
||||
line.`year`,
|
||||
us.enable,
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.changeEndTime,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
us.signUpMode,
|
||||
us.estimatedFamilyNumbers,
|
||||
line.file AS fileId,
|
||||
usgh.name AS usUnionName,
|
||||
usgh.id AS takePartInUnionId,
|
||||
u.username AS createUserName,
|
||||
ta.travelAgencyName,
|
||||
ta.contact,
|
||||
ta.contactMobileNumber,
|
||||
lot.lotName,
|
||||
lot.lotValue,
|
||||
lot.activityCost as lotActivityCost,
|
||||
count(us.id) as playCount,
|
||||
(select count(1) from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year) as signUpUserNum,
|
||||
(select count(1) from recuperation_enroll_companion where trreId in (select id from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year)) as signUpUserFamilyNum,
|
||||
(select ifnull(sum(familyNumber),0) from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year) as familyNumber
|
||||
FROM
|
||||
`recuperation_line_select` us
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
LEFT JOIN recuperation_lot lot on lot.id = line.lotId
|
||||
LEFT JOIN sys_union usgh ON usgh.id = us.unionId
|
||||
LEFT JOIN sys_user u ON u.id = line.opBy
|
||||
LEFT JOIN recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
$lineCnd
|
||||
group by lineId
|
||||
ORDER BY lotValue desc, us.lineId, playStartTime ASC
|
||||
""").setParam("year", DateUtil.thisYear());
|
||||
Cnd lineCnd = Cnd.NEW();
|
||||
lineCnd.and("line.isDisabled", "=", false);
|
||||
lineCnd.and("us.enable", "=", true);
|
||||
lineCnd.and("line.regionalNature", "=", RecuperationType.typeMap.get(trrt));
|
||||
lineCnd.andEX("year(us.selectTime)", "=", year != null ? year : DateUtil.thisYear());
|
||||
//本公会
|
||||
if (lineUnionType == 1) {
|
||||
lineCnd.and("us.signUpMode", "=", RecuperationSignUpMode.UNION.getValue());
|
||||
// lineCnd.and("us.isOpen", "=", true);
|
||||
lineCnd.and("us.unionId", "=", unionId);
|
||||
} else if (lineUnionType == 2) {
|
||||
lineCnd.and("us.signUpMode", "=", RecuperationSignUpMode.UNION.getValue());
|
||||
lineCnd.and("us.isOpen", "=", true);
|
||||
lineCnd.and("us.unionId", "=", unionId);
|
||||
} else if (lineUnionType == 3) {
|
||||
//校工会
|
||||
lineCnd.and("us.signUpMode", "=", RecuperationSignUpMode.FREE.getValue());
|
||||
}
|
||||
lineSql.setVar("lineCnd", lineCnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), lineSql);
|
||||
} else if (RecuperationType.provinceInTravelAgency.getValue() == trrt) {
|
||||
cnd.andEX("year", "=", year != null ? year : DateUtil.thisYear());
|
||||
cnd.and("isDisabled", "=", false);
|
||||
Sql taSql = Sqls.create("""
|
||||
select
|
||||
*,
|
||||
file as fileId
|
||||
from
|
||||
recuperation_travel_agency $condition
|
||||
""");
|
||||
taSql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql);
|
||||
} else if (RecuperationType.provinceInHotel.getValue() == trrt) {
|
||||
cnd.andEX("b.year", "=", year != null ? year : DateUtil.thisYear());
|
||||
cnd.and("b.isDisabled", "=", false);
|
||||
Sql taSql = Sqls.create("""
|
||||
select
|
||||
b.*,
|
||||
b.file as fileId,
|
||||
l.lotName,
|
||||
t.travelAgencyName
|
||||
from
|
||||
recuperation_base_management b
|
||||
left join recuperation_lot l on l.id = b.lotId
|
||||
left join recuperation_travel_agency t on t.id = b.travelAgencyId
|
||||
$condition
|
||||
""");
|
||||
cnd.asc("sortNumber");
|
||||
taSql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql);
|
||||
}
|
||||
return new Pagination();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType) {
|
||||
Sql lineSql = Sqls.create("""
|
||||
SELECT
|
||||
us.id as usId,
|
||||
line.id as lineId,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
us.minimumGroupSize,
|
||||
line.`year`,
|
||||
us.enable,
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.changeEndTime,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
us.signUpMode,
|
||||
us.estimatedFamilyNumbers,
|
||||
line.files,
|
||||
line.file AS fileId,
|
||||
usgh.name AS usUnionName,
|
||||
usgh.id AS takePartInUnionId,
|
||||
u.username AS createUserName,
|
||||
ta.travelAgencyName,
|
||||
us.contact,
|
||||
us.contactPhone,
|
||||
lot.lotName,
|
||||
lot.lotValue,
|
||||
lot.activityCost as lotActivityCost,
|
||||
(select count(1) from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year) as signUpUserNum,
|
||||
(select count(1) from recuperation_enroll_companion where trreId in (select id from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year)) as signUpUserFamilyNum,
|
||||
(select ifnull(sum(familyNumber),0) from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year) as familyNumber
|
||||
FROM
|
||||
`recuperation_line_select` us
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
LEFT JOIN recuperation_lot lot on lot.id = line.lotId
|
||||
LEFT JOIN sys_union usgh ON usgh.id = us.unionId
|
||||
LEFT JOIN sys_user u ON u.id = line.opBy
|
||||
LEFT JOIN recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
$lineCnd
|
||||
ORDER BY us.lineId, playStartTime ASC
|
||||
""").setParam("lineId", lineId).setParam("year", DateUtil.thisYear());
|
||||
Cnd lineCnd = Cnd.NEW();
|
||||
lineCnd.and("lineId", "=", lineId);
|
||||
lineCnd.and("us.enable", "=", true);
|
||||
lineCnd.and("year(us.selectTime)", "=", DateUtil.thisYear());
|
||||
lineCnd.and("line.regionalNature", "=", RecuperationType.typeMap.get(trrt));
|
||||
//本公会
|
||||
if (lineUnionType == 1) {
|
||||
lineCnd.and("us.signUpMode", "=", RecuperationSignUpMode.UNION.getValue());
|
||||
// lineCnd.and("us.isOpen", "=", true);
|
||||
lineCnd.and("us.unionId", "=", unionId);
|
||||
} else if (lineUnionType == 2) {
|
||||
lineCnd.and("us.signUpMode", "=", RecuperationSignUpMode.UNION.getValue());
|
||||
lineCnd.and("us.isOpen", "=", true);
|
||||
lineCnd.and("us.unionId", "=", unionId);
|
||||
} else if (lineUnionType == 3) {
|
||||
//校工会
|
||||
lineCnd.and("us.signUpMode", "=", RecuperationSignUpMode.FREE.getValue());
|
||||
}
|
||||
lineSql.setVar("lineCnd", lineCnd);
|
||||
return (List<NutMap>) Daos.query(dao(), lineSql.toString(), Sqls.callback.maps());
|
||||
}
|
||||
|
||||
/**
|
||||
* 线路报名
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void doSignUpForLine(RecuperationEnroll enrollInfo) {
|
||||
RecuperationLineSelect lineUnionSelect = dao().fetch(RecuperationLineSelect.class, enrollInfo.getTakePartInLineId());
|
||||
RecuperationLine lineInfo = dao().fetch(RecuperationLine.class, lineUnionSelect.getLineId());
|
||||
|
||||
Sys_user user = dao().fetch(Sys_user.class, SecurityUtil.getUserId());
|
||||
|
||||
enrollInfo.setLoginName(user.getLoginname());
|
||||
enrollInfo.setUserName(user.getUsername());
|
||||
enrollInfo.setSex(user.getSex());
|
||||
enrollInfo.setUnitName(user.getUnit().getName());
|
||||
enrollInfo.setUnionName(SecurityUtil.getUnionId());
|
||||
enrollInfo.setSelfUnionId(user.getUnion().getId());
|
||||
enrollInfo.setSelfUnitId(SecurityUtil.getUnitId());
|
||||
enrollInfo.setSigningUptime(new Date());
|
||||
enrollInfo.setTakePartIn(false);
|
||||
enrollInfo.setNormal(true);
|
||||
|
||||
if (lineUnionSelect.getSignUpMode() == RecuperationSignUpMode.FREE.getValue()) {
|
||||
enrollInfo.setTakePartInUnionId(null);
|
||||
}
|
||||
|
||||
//2023-06-07 省内外线路是否需要审核配置 根据配置来赋报名表的审核状态值☞
|
||||
RecuperationConfig recuperationConfig = dao().fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
Boolean isSnLine = recuperationConfig.getIsSnLine();
|
||||
Boolean isSwLine = recuperationConfig.getIsSwLine();
|
||||
|
||||
Boolean flag = null;
|
||||
if (lineInfo.getRegionalNature().equals(RecuperationProvinceType.provinceOut.getValue())) {
|
||||
flag = isSwLine;
|
||||
} else if (lineInfo.getRegionalNature().equals(RecuperationProvinceType.provinceIn.getValue())) {
|
||||
flag = isSnLine;
|
||||
}
|
||||
if (Boolean.TRUE.equals(flag)) {
|
||||
if (lineUnionSelect.getSignUpMode() == 1) {
|
||||
if (StrUtil.isNotBlank(enrollInfo.getTakePartInUnionId()) && !enrollInfo.getTakePartInUnionId().equals(enrollInfo.getSelfUnionId())) {
|
||||
enrollInfo.setStateId(RecuperationState.LINEUNIT);
|
||||
} else {
|
||||
enrollInfo.setStateId(RecuperationState.UNIT);
|
||||
}
|
||||
} else {
|
||||
enrollInfo.setStateId(RecuperationState.SCHOOL);
|
||||
}
|
||||
} else {
|
||||
enrollInfo.setStateId(RecuperationState.PASS);
|
||||
}
|
||||
|
||||
if (recuperationConfig.getBedInfo() || recuperationConfig.getFamilyInfo() == 2) {
|
||||
for (RecuperationEnrollCompanion RecuperationEnrollCompanion : enrollInfo.getCompanionList()) {
|
||||
insertLinks(RecuperationEnrollCompanion, "bedInfo");
|
||||
}
|
||||
insertWith(enrollInfo, "companionList|bedInfo");
|
||||
} else {
|
||||
insert(enrollInfo);
|
||||
}
|
||||
|
||||
//String content = "【智慧工会】%s老师您好,您已成功报名%s疗休养线路".formatted(user.getUsername(), lineInfo.getLineName());
|
||||
//msgApi.sendMsg(content, user.getMobile(), MsgApi.DING_DING_TEMPLATE_ID);
|
||||
//发短信
|
||||
// RCSCloudAPI.sendTplSms("81d48e1811144270b838b321575c7199", user.getMobile(), "@1@=" + user.getUsername() + "||@2@=报名||@3@=" + lineInfo.getLineName(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 变更报名
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void updateSignUpLine(RecuperationEnroll enrollInfo) {
|
||||
RecuperationLineSelect lineUnionSelect = dao().fetch(RecuperationLineSelect.class, enrollInfo.getTakePartInLineId());
|
||||
|
||||
RecuperationConfig recuperationConfig = dao().fetch(RecuperationConfig.class, Cnd.NEW());
|
||||
|
||||
if (lineUnionSelect.getSignUpMode() == RecuperationSignUpMode.FREE.getValue()) {
|
||||
enrollInfo.setTakePartInUnionId(null);
|
||||
}
|
||||
|
||||
if (recuperationConfig.getBedInfo() || recuperationConfig.getFamilyInfo() == 2) {
|
||||
dao().clearLinks(enrollInfo, "companionList");
|
||||
dao().delete(RecuperationEnrollBed.class, enrollInfo.getBedInfoId());
|
||||
|
||||
dao().insertLinks(enrollInfo, "companionList|bedInfo");
|
||||
}
|
||||
|
||||
update(enrollInfo);
|
||||
//插入变更记录
|
||||
RecuperationEnrollChangeRecord changeRecord = new RecuperationEnrollChangeRecord();
|
||||
changeRecord.setEnrollId(enrollInfo.getId());
|
||||
changeRecord.setChangeTime(new Date());
|
||||
insert(changeRecord);
|
||||
|
||||
//发短信
|
||||
//String content = "【智慧工会】%s老师您好,您的疗休养线路已成功修改为%s".formatted(user.getUsername(), lineInfo.getLineName());
|
||||
//msgApi.sendMsg(content, user.getMobile(), MsgApi.DING_DING_TEMPLATE_ID);
|
||||
// RCSCloudAPI.sendTplSms("81d48e1811144270b838b321575c7199", user.getMobile(), "@1@=" + user.getUsername() + "||@2@=修改||@3@=" + lineInfo.getLineName(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 报名旅行社
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
@Override
|
||||
public void doSignUpForTravelAgency(RecuperationEnroll enrollInfo) {
|
||||
Sys_user user = dao().fetch(Sys_user.class, SecurityUtil.getUserId());
|
||||
enrollInfo.setLoginName(user.getLoginname());
|
||||
enrollInfo.setUserName(user.getUsername());
|
||||
enrollInfo.setSex(user.getSex());
|
||||
enrollInfo.setUnitName(user.getUnit().getName());
|
||||
enrollInfo.setUnionName(user.getUnion().getName());
|
||||
enrollInfo.setSelfUnionId(user.getUnion().getId());
|
||||
enrollInfo.setSelfUnitId(user.getUnitId());
|
||||
enrollInfo.setSigningUptime(new Date());
|
||||
enrollInfo.setTakePartIn(false);
|
||||
enrollInfo.setNormal(true);
|
||||
insert(enrollInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 报名酒店
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
@Override
|
||||
public void doSignUpForHotel(RecuperationEnroll enrollInfo) {
|
||||
Sys_user user = dao().fetch(Sys_user.class, SecurityUtil.getUserId());
|
||||
enrollInfo.setLoginName(user.getLoginname());
|
||||
enrollInfo.setUserName(user.getUsername());
|
||||
enrollInfo.setSex(user.getSex());
|
||||
enrollInfo.setUnitName(user.getUnit().getName());
|
||||
enrollInfo.setUnionName(user.getUnion().getName());
|
||||
enrollInfo.setSelfUnionId(user.getUnion().getId());
|
||||
enrollInfo.setSelfUnitId(user.getUnitId());
|
||||
enrollInfo.setSigningUptime(new Date());
|
||||
enrollInfo.setTakePartIn(false);
|
||||
enrollInfo.setNormal(true);
|
||||
enrollInfo.setStateId(RecuperationState.PASS);
|
||||
|
||||
for (RecuperationEnrollCompanion RecuperationEnrollCompanion : enrollInfo.getCompanionList()) {
|
||||
insertLinks(RecuperationEnrollCompanion, "bedInfo");
|
||||
}
|
||||
insertWith(enrollInfo, "companionList|bedInfo");
|
||||
}
|
||||
|
||||
/**
|
||||
* 变更报名
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void updateSignUpHotel(RecuperationEnroll enrollInfo) {
|
||||
|
||||
dao().clearLinks(enrollInfo, "companionList");
|
||||
dao().delete(RecuperationEnrollBed.class, enrollInfo.getBedInfoId());
|
||||
|
||||
dao().insertLinks(enrollInfo, "companionList|bedInfo");
|
||||
|
||||
update(enrollInfo);
|
||||
//插入变更记录
|
||||
RecuperationEnrollChangeRecord changeRecord = new RecuperationEnrollChangeRecord();
|
||||
changeRecord.setEnrollId(enrollInfo.getId());
|
||||
changeRecord.setChangeTime(new Date());
|
||||
insert(changeRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 变更报名旅行社
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
*/
|
||||
@Override
|
||||
public void updateSignUpTravelAgency(RecuperationEnroll enrollInfo) {
|
||||
updateIgnoreNull(enrollInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证报名登记信息
|
||||
*
|
||||
* @param enrollInfo 登记信息
|
||||
* @param loginName 用户名
|
||||
* @return {@link Map}<{@link Boolean}, {@link String}>
|
||||
*/
|
||||
@Override
|
||||
public Map<Boolean, String> validSignUpInfo(String loginName, RecuperationEnroll enrollInfo) {
|
||||
|
||||
//配置信息
|
||||
RecuperationConfig config = dao().fetch(RecuperationConfig.class);
|
||||
|
||||
Sys_user user = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", loginName));
|
||||
//判断是否在报名范围内
|
||||
int count = dao().count("activity_user_scope", Cnd.NEW().and("groupId", "=", config.getActivityGroupId())
|
||||
.and("userId", "=", user.getId() ));
|
||||
if (count == 0) {
|
||||
return Map.of(false, "抱歉,您不在报名范围内!");
|
||||
}
|
||||
|
||||
//每年旅行频率
|
||||
Integer travelFrequency = config.getTravelFrequency();
|
||||
//省外几年去一次
|
||||
Integer outsideNumber = config.getOutsideNumber();
|
||||
//可以修改几次
|
||||
Integer modifyNumber = config.getModifyNumber();
|
||||
//省外最多报名人数
|
||||
Integer allLineSignUpNumber = config.getAllLineSignUpNumber();
|
||||
//省内起始年份
|
||||
Integer provinceStartYear = config.getProvinceStartYear();
|
||||
//活动范围
|
||||
Integer activityGroupId = config.getActivityGroupId();
|
||||
|
||||
//线路信息
|
||||
RecuperationLineSelect lineUnionSelect = dao().fetch(RecuperationLineSelect.class, enrollInfo.getTakePartInLineId());
|
||||
RecuperationLine lineInfo = dao().fetch(RecuperationLine.class, lineUnionSelect.getLineId());
|
||||
|
||||
Date signUpStartTime = lineUnionSelect.getSignUpStartTime();
|
||||
Date signUpEndTime = lineUnionSelect.getSignUpEndTime();
|
||||
Date changeEndTime = lineUnionSelect.getChangeEndTime();
|
||||
//线路人数,省外线路最多报名数
|
||||
// Integer estimatedFamilyNumbers = lineUnionSelect.getEstimatedFamilyNumbers();
|
||||
Integer estimatedFamilyNumbers = config.getOutsideQuota();
|
||||
if (DateUtil.compare(new Date(), signUpStartTime) < 0) {
|
||||
return Map.of(false, "报名未开始,请耐心等待");
|
||||
}
|
||||
if (DateUtil.compare(new Date(), changeEndTime) > 0 && enrollInfo.isNormal()) {
|
||||
return Map.of(false, "报名时间已过,抱歉不能报名");
|
||||
}
|
||||
|
||||
RecuperationType trrt = regionTypeLineMap.get(lineInfo.getRegionalNature());
|
||||
if (StrUtil.isBlank(enrollInfo.getId()) && StrUtil.isNotBlank(enrollInfo.getTakePartInLineId())) {
|
||||
|
||||
//2025-05-20 临时增加的代码
|
||||
Record tempRecord = dao().fetch("recuperation_temp", Cnd.where("loginname", "=", loginName));
|
||||
if(tempRecord != null) {
|
||||
if(tempRecord.getInt("flag") != trrt.getValue()) {
|
||||
return Map.of(false, "您只能报名" + tempRecord.getString("type") + "线路");
|
||||
}
|
||||
}
|
||||
|
||||
//获取标段中的最大费用
|
||||
List<RecuperationLot> lotList = dao().query(RecuperationLot.class, Cnd.NEW());
|
||||
//最大费用
|
||||
OptionalInt optionalInt = lotList.stream().mapToInt(RecuperationLot::getActivityCost).max();
|
||||
int maxCost = optionalInt.isPresent() ? optionalInt.getAsInt() : 0;
|
||||
//获取当前报名线路对应的标段的费用
|
||||
Integer currentLineCost = dao().fetch(RecuperationLot.class, lineInfo.getLotId()).getActivityCost();
|
||||
|
||||
//省外线路判断报名人数
|
||||
if (trrt.getValue() == RecuperationType.provinceOutLine.getValue() && estimatedFamilyNumbers != null) {
|
||||
Map<Boolean, String> map = validSignCount(enrollInfo, config, estimatedFamilyNumbers, "add");
|
||||
if(map != null) {
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
//获取起始年份到当前时间,是否报名
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
r.*,
|
||||
l.regionalNature,
|
||||
(select activityCost from recuperation_lot where id = l.lotId) as activityCost
|
||||
FROM
|
||||
recuperation_enroll r
|
||||
LEFT JOIN recuperation_line_select us on us.id = r.takePartInLineId
|
||||
LEFT JOIN recuperation_line l ON l.id = us.lineId
|
||||
$condition
|
||||
""");
|
||||
Sql twoYearInSql = sql;
|
||||
Sql threeYearOutSql = sql;
|
||||
Sql twoYearOutSql = sql;
|
||||
Sql nowYearSql = sql;
|
||||
|
||||
Cnd commonCnd = Cnd.NEW();
|
||||
commonCnd.and("r.takePartInLineId", "is not", null);
|
||||
commonCnd.and("loginName", "=", SecurityUtil.getUserLoginname());
|
||||
commonCnd.and("r.isNormal", "=", true);
|
||||
commonCnd.and("stateId", "not in", Lang.array(RecuperationState.UNITFAIL, RecuperationState.LINEUNITFAIL, RecuperationState.SCHOOLFAIL));
|
||||
commonCnd.and("signingUptime", "<=", DateUtil.now());
|
||||
|
||||
//两年参加省内
|
||||
Cnd twoYearInCnd = commonCnd.clone();
|
||||
twoYearInCnd.and("signingUptime", ">=", provinceStartYear + "-01-01");
|
||||
twoYearInCnd.and("regionalNature", "=", "省内");
|
||||
twoYearInCnd.and("isTakePartIn", "=", true);
|
||||
twoYearInSql.setCondition(twoYearInCnd);
|
||||
List<NutMap> twoYearInMapList = listMap(twoYearInSql);
|
||||
|
||||
//今年是否报名,不管省内省外
|
||||
Cnd nowYearCnd = commonCnd.clone();
|
||||
nowYearCnd.and("signingUptime", ">=", DateUtil.thisYear() + "-01-01");
|
||||
nowYearSql.setCondition(nowYearCnd);
|
||||
List<NutMap> nowYearMapList = listMap(nowYearSql);
|
||||
|
||||
//两年参加省外
|
||||
Cnd twoYearOutCnd = commonCnd.clone();
|
||||
twoYearOutCnd.and("signingUptime", ">=", provinceStartYear + "-01-01");
|
||||
twoYearOutCnd.and("regionalNature", "=", "省外");
|
||||
twoYearOutCnd.and("isTakePartIn", "=", true);
|
||||
twoYearOutSql.setCondition(twoYearOutCnd);
|
||||
List<NutMap> twoYearOutMapList = listMap(twoYearOutSql);
|
||||
|
||||
//三年参加省外
|
||||
Cnd threeYearOutCnd = commonCnd.clone();
|
||||
threeYearOutCnd.and("signingUptime", ">=", (DateUtil.thisYear() - 3) + "-01-01");
|
||||
threeYearOutCnd.and("regionalNature", "=", "省外");
|
||||
threeYearOutCnd.and("isTakePartIn", "=", true);
|
||||
threeYearOutSql.setCondition(threeYearOutCnd);
|
||||
List<NutMap> threeYearOutMapList = listMap(threeYearOutSql);
|
||||
|
||||
//今年是否报名,不管报省内还是省外
|
||||
if (nowYearMapList.size() > 0) {
|
||||
NutMap nowYearMap = nowYearMapList.get(0);
|
||||
//判断当前报名的线路是否和今年第一次报名的线路重复
|
||||
if (nowYearMap.getString("takePartInLineId").equals(lineUnionSelect.getId())) {
|
||||
return Map.of(false, "您已报名过当前线路,请选择其他线路");
|
||||
}
|
||||
//获取第一次报名线路对应的标段的费用
|
||||
int lastLineCost = nowYearMap.getInt("activityCost");
|
||||
if ((lastLineCost + currentLineCost) > maxCost) {
|
||||
return Map.of(false, "您已报名过省内或省外线路");
|
||||
}
|
||||
}
|
||||
//省内线路判断
|
||||
if (trrt.getValue() == RecuperationType.provinceInLine.getValue()) {
|
||||
if (twoYearInMapList.size() == 0 && threeYearOutMapList.size() == 0) {
|
||||
return Map.of(true, "验证成功");
|
||||
}
|
||||
//查询两年内有没有参加过省外
|
||||
if (twoYearOutMapList.size() > 0) {
|
||||
return Map.of(false, "您近两年已参加过省外线路,不能报名省内线路");
|
||||
}
|
||||
if (twoYearInMapList.size() > 0) {
|
||||
int hasCost = twoYearInMapList.get(0).getInt("activityCost");
|
||||
if ((hasCost + currentLineCost) > maxCost) {
|
||||
return Map.of(false, "您已参加过省内线路");
|
||||
}
|
||||
}
|
||||
}
|
||||
//省外线路判断
|
||||
if (trrt.getValue() == RecuperationType.provinceOutLine.getValue()) {
|
||||
//两年内参加过省内
|
||||
if (twoYearInMapList.size() > 0) {
|
||||
return Map.of(false, "您近两年已参加过省内线路,不能报名省外线路");
|
||||
}
|
||||
//三年内有没有参加过省外
|
||||
if (threeYearOutMapList.size() > 0) {
|
||||
return Map.of(false, "近三年内您已参加过省外线路,不能再次报名");
|
||||
}
|
||||
//获取今年的所有线路
|
||||
List<RecuperationLine> lineList = dao().query(RecuperationLine.class, Cnd.where("year", "=", DateUtil.thisYear())
|
||||
.and("isDisabled", "=", false));
|
||||
List<String> lineIds = lineList.stream().map(RecuperationLine::getId).collect(Collectors.toList());
|
||||
//获取这些线路在选择表中的选择id,因为报名表存的是选择id
|
||||
List<RecuperationLineSelect> selectList = dao().query(RecuperationLineSelect.class, Cnd.where("lineId", "in", lineIds));
|
||||
List<String> selectIds = selectList.stream().map(RecuperationLineSelect::getId).collect(Collectors.toList());
|
||||
//获取这些省外线路的总报名人数
|
||||
List<RecuperationEnroll> enrollList = dao().query(RecuperationEnroll.class, Cnd.where("takePartInLineId", "in", selectIds)
|
||||
.and("isNormal", "=", true).and("signingUptime", "=", DateUtil.thisYear())
|
||||
.and("stateId", "not in", Lang.array(RecuperationState.UNITFAIL, RecuperationState.LINEUNITFAIL, RecuperationState.SCHOOLFAIL)));
|
||||
//活动范围总人数
|
||||
List<ActivityUserScope> userScopes = dao().query(ActivityUserScope.class, Cnd.where("groupId", "=", activityGroupId));
|
||||
int result = (int) Math.floor((double) userScopes.size() / 3);
|
||||
if (enrollList.size() >= result) {
|
||||
return Map.of(false, "已报人数超过三分之一,不能报名");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//变更操作
|
||||
if (StrUtil.isNotBlank(enrollInfo.getId())) {
|
||||
|
||||
if (trrt.getValue() == RecuperationType.provinceOutLine.getValue() && estimatedFamilyNumbers != null) {
|
||||
Map<Boolean, String> map = validSignCount(enrollInfo, config, estimatedFamilyNumbers, "edit");
|
||||
if(map != null) {
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
int changeCount = dao().count(RecuperationEnrollChangeRecord.class, Cnd.where("enrollId", "=", enrollInfo.getId()));
|
||||
|
||||
if (changeCount >= modifyNumber) {
|
||||
return Map.of(false, "只能变更" + changeCount + "次!");
|
||||
}
|
||||
|
||||
if (DateUtil.compare(new Date(), changeEndTime) > 0) {
|
||||
return Map.of(false, "超过变更截至时间,无法变更!");
|
||||
} else {
|
||||
return Map.of(true, "验证成功");
|
||||
}
|
||||
}
|
||||
|
||||
return Map.of(true, "验证成功");
|
||||
}
|
||||
|
||||
public Map<Boolean, String> validSignCount(RecuperationEnroll enrollInfo, RecuperationConfig config, int estimatedFamilyNumbers, String type) {
|
||||
int hasSignNumber = 0;//已经报名的人数
|
||||
int currentSignNumber = 1;//当前报名人数,1表示自己,下面的if是加家属人数
|
||||
Cnd cnd = Cnd.where("takePartInLineId", "=", enrollInfo.getTakePartInLineId())
|
||||
.and("stateId", "in", Lang.array(RecuperationState.UNIT, RecuperationState.LINEUNIT, RecuperationState.SCHOOL, RecuperationState.PASS))
|
||||
.and("isNormal", "=", true);
|
||||
//如果是修改,排除自己的报名记录
|
||||
if("edit".equals(type)) {
|
||||
cnd.and("loginName", "!=", SecurityUtil.getUserLoginname());
|
||||
}
|
||||
List<RecuperationEnroll> enrolls = dao().query(RecuperationEnroll.class, cnd);
|
||||
|
||||
//1表示在配置页面的家属配置的是数量,2是家属的List
|
||||
/*if (config.getFamilyInfo() == 1) {
|
||||
currentSignNumber += enrollInfo.getFamilyNumber() != null ? enrollInfo.getFamilyNumber() : 0;
|
||||
int sum = enrolls.stream().mapToInt(RecuperationEnroll::getFamilyNumber).sum();
|
||||
hasSignNumber = enrolls.size() + sum;
|
||||
} else {
|
||||
currentSignNumber += enrollInfo.getCompanionList() != null ? enrollInfo.getCompanionList().size() : 0;
|
||||
List<String> list = enrolls.stream().map(RecuperationEnroll::getId).collect(Collectors.toList());
|
||||
List<RecuperationEnrollCompanion> companions = dao().query(RecuperationEnrollCompanion.class, Cnd.where("trreId", "=", list));
|
||||
hasSignNumber = enrolls.size() + companions.size();
|
||||
}*/
|
||||
//省外报名限制,不包含家属
|
||||
// hasSignNumber += currentSignNumber + enrolls.size();
|
||||
if (( currentSignNumber + enrolls.size()) > estimatedFamilyNumbers) {
|
||||
return Map.of(false, "报名人数已满");
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//判断一年报几次
|
||||
public Map<Boolean, String> validCountOneYear(String loginName, int travelFrequency) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("loginName", "=", loginName);
|
||||
cnd.and("YEAR(signingUptime)", "=", DateUtil.thisYear());
|
||||
int joinCount = dao().count(RecuperationEnroll.class, cnd);
|
||||
|
||||
if (joinCount >= travelFrequency) {
|
||||
List<RecuperationLine> inList = dao().query(RecuperationLine.class, Cnd.where("regionalNature", "=", "省内"));
|
||||
List<RecuperationLine> outList = dao().query(RecuperationLine.class, Cnd.where("regionalNature", "=", "省外"));
|
||||
//是否选择省外
|
||||
int inCount = dao().count("recuperation_enroll", Cnd.where("loginName", "=", SecurityUtil.getUserLoginname())
|
||||
.and("takePartInLineId", "in", inList.stream().map(RecuperationLine::getId).collect(Collectors.toList()))
|
||||
.and("isNormal", "=", true)
|
||||
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
|
||||
//是否报省外
|
||||
int outCount = dao().count("recuperation_enroll", Cnd.where("loginName", "=", SecurityUtil.getUserLoginname())
|
||||
.and("takePartInLineId", "in", outList.stream().map(RecuperationLine::getId).collect(Collectors.toList()))
|
||||
.and("isNormal", "=", true)
|
||||
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
|
||||
//是否报旅行社
|
||||
int travelCount = dao().count("recuperation_enroll", Cnd.where("loginName", "=", SecurityUtil.getUserLoginname())
|
||||
.and("takePartInLineId", "is", null).and("isNormal", "=", true)
|
||||
.and("takePartInTravelAgencyId", "is not", null)
|
||||
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
|
||||
//是否报酒店
|
||||
int hotelCount = dao().count("recuperation_enroll", Cnd.where("loginName", "=", SecurityUtil.getUserLoginname())
|
||||
.and("takePartInLineId", "is", null).and("isNormal", "=", true)
|
||||
.and("takePartInBaseManagementId", "is not", null)
|
||||
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
|
||||
String str = "";
|
||||
if (inCount > 0) {
|
||||
str = "省内线路";
|
||||
} else if (outCount > 0) {
|
||||
str = "省外线路";
|
||||
} else if (travelCount > 0) {
|
||||
str = "旅行社";
|
||||
} else if (hotelCount > 0) {
|
||||
str = "酒店";
|
||||
}
|
||||
return Map.of(false, "一年只能报" + travelFrequency + "次,您已报" + str + ",请先在我的疗休养中删除,方可报名!");
|
||||
}
|
||||
return Map.of(true, "成功");
|
||||
}
|
||||
|
||||
public int getCountByOutLine(RecuperationType trrt, String loginName, int outsideNumber) {
|
||||
//省外 outsideNumber 年内是否去过
|
||||
if (trrt.getValue() == RecuperationType.provinceOutLine.getValue()) {
|
||||
Sql lineJoinSql = Sqls.create("""
|
||||
SELECT
|
||||
count(*)
|
||||
FROM
|
||||
recuperation_enroll ren
|
||||
LEFT JOIN recuperation_line rl on ren.takePartInLineId = rl.id
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd lineCnd = Cnd.NEW();
|
||||
lineCnd.and("loginName", "=", loginName);
|
||||
lineCnd.and("isNormal", "=", true);
|
||||
lineCnd.and("takePartInLineId", "IS NOT", null);
|
||||
lineCnd.and("YEAR ( signingUptime )", ">=", DateUtil.thisYear() - outsideNumber);
|
||||
lineCnd.and("YEAR ( signingUptime )", "<=", DateUtil.thisYear() - 1);
|
||||
lineCnd.and("regionalNature", "=", RecuperationType.provinceOutLine.getValue());
|
||||
|
||||
lineJoinSql.setCondition(lineCnd);
|
||||
|
||||
//lineCnd.and(new SqlExpressionGroup().andBetween("YEAR(signingUptime)", io.v.nutz.base.utils.DateUtil.getYear() - 1, io.v.nutz.base.utils.DateUtil.getYear() - outsideNumber));
|
||||
return lineService.count(lineJoinSql);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 我报名的页面数据
|
||||
*
|
||||
* @param pageForm 分页参数
|
||||
* @param cnd cnd
|
||||
* @return {@link Pagination}
|
||||
*/
|
||||
@Override
|
||||
public Pagination mySignUpPageData(PageForm pageForm, Cnd cnd, int trrt, Integer year) {
|
||||
if (List.of(
|
||||
RecuperationType.provinceInLine.getValue(),
|
||||
RecuperationType.provinceOutLine.getValue()
|
||||
).contains(trrt)) {
|
||||
return this.getDataByInLineAndOutLine(pageForm, cnd, trrt, year);
|
||||
} else if (trrt == RecuperationType.provinceInTravelAgency.getValue()) {
|
||||
return this.getDataByInTravelAgency(pageForm, cnd, trrt, year);
|
||||
} else if (trrt == RecuperationType.provinceInHotel.getValue()) {
|
||||
return this.getDataByInHotel(pageForm, cnd, trrt, year);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Pagination getDataByInLineAndOutLine(PageForm pageForm, Cnd cnd, int trrt, Integer year) {
|
||||
Sql lineSql = Sqls.create("""
|
||||
SELECT
|
||||
e.*,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
line.YEAR,
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.changeEndTime,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
us.signUpMode,
|
||||
line.file AS fileId,
|
||||
gh.name AS signUpUnionName,
|
||||
ta.travelAgencyName,
|
||||
ta.contact,
|
||||
ta.contactMobileNumber,
|
||||
ta.officialWebsite,
|
||||
GROUP_CONCAT(ec.userName) as companionUserNames,
|
||||
l.lotName
|
||||
FROM
|
||||
recuperation_enroll e
|
||||
LEFT JOIN sys_union gh ON gh.id = e.takePartInUnionId
|
||||
LEFT JOIN recuperation_line_select us on us.id = e.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
LEFT JOIN recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
left join recuperation_enroll_companion ec on ec.trreId = e.id
|
||||
left join recuperation_lot l on l.id = line.lotId
|
||||
$condition
|
||||
GROUP BY e.id
|
||||
""");
|
||||
cnd.and("line.regionalNature", "=", RecuperationType.typeMap.get(trrt));
|
||||
cnd.and("e.isNormal", "=", true);
|
||||
cnd.andEX("year(e.signingUptime)", "=", year);
|
||||
|
||||
lineSql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), lineSql);
|
||||
}
|
||||
|
||||
public Pagination getDataByInTravelAgency(PageForm pageForm, Cnd cnd, int trrt, Integer year) {
|
||||
Sql taSql = Sqls.create("""
|
||||
SELECT
|
||||
e.*,
|
||||
ta.travelAgencyName,
|
||||
ta.contact,
|
||||
ta.contactMobileNumber,
|
||||
ta.officialWebsite,
|
||||
ta.file AS fileId
|
||||
FROM
|
||||
recuperation_enroll e
|
||||
LEFT JOIN recuperation_travel_agency ta ON ta.id = e.takePartInTravelAgencyId
|
||||
$condition
|
||||
""");
|
||||
cnd.and("e.takePartInTravelAgencyId", "is not", null);
|
||||
cnd.and("e.isNormal", "=", true);
|
||||
cnd.andEX("ta.year", "=", year);
|
||||
taSql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql);
|
||||
}
|
||||
|
||||
public Pagination getDataByInHotel(PageForm pageForm, Cnd cnd, int trrt, Integer year) {
|
||||
Sql taSql = Sqls.create("""
|
||||
SELECT
|
||||
e.*,
|
||||
ta.baseName,
|
||||
ta.baseContactPerson,
|
||||
ta.baseContactNumber,
|
||||
ta.file AS fileId,
|
||||
l.lotName,
|
||||
ta.regionalNature,
|
||||
t.travelAgencyName,
|
||||
ta.changeEndTime
|
||||
FROM
|
||||
recuperation_enroll e
|
||||
LEFT JOIN recuperation_base_management ta ON ta.id = e.takePartInBaseManagementId
|
||||
LEFT JOIN recuperation_lot l on l.id = ta.lotId
|
||||
LEFT JOIN recuperation_travel_agency t on t.id = ta.travelAgencyId
|
||||
$condition
|
||||
""");
|
||||
cnd.and("e.takePartInBaseManagementId", "is not", null);
|
||||
cnd.and("e.isNormal", "=", true);
|
||||
cnd.andEX("ta.year", "=", year);
|
||||
taSql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 找到报名信息通过id
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link RecuperationEnroll}
|
||||
*/
|
||||
@Override
|
||||
public RecuperationEnroll findSignUpInfoById(String id) {
|
||||
RecuperationEnroll enroll = fetch(id);
|
||||
return fetchLinks(enroll, "companionList|bedInfo");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除我的报名信息
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void deleteMyEnrollInfoById(String id) {
|
||||
RecuperationEnroll enrollInfo = fetch(id);
|
||||
RecuperationLineSelect lineUnionSelect = dao().fetch(RecuperationLineSelect.class, enrollInfo.getTakePartInLineId());
|
||||
dao().clearLinks(enrollInfo, "companionList|bedInfo");
|
||||
delete(id);
|
||||
dao().clear(RecuperationEnrollChangeRecord.class, Cnd.where("enrollId", "=", id));
|
||||
|
||||
//发短信
|
||||
//String content = "【智慧工会】%s老师您好,您报名的%s疗休养线路已取消成功".formatted(user.getUsername(), lineInfo.getLineName());
|
||||
//msgApi.sendMsg(content, user.getMobile(), MsgApi.DING_DING_TEMPLATE_ID);
|
||||
// RCSCloudAPI.sendTplSms("81d48e1811144270b838b321575c7199", user.getMobile(), "@1@=" + user.getUsername() + "||@2@=取消||@3@=" + lineInfo.getLineName(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机端线路介绍所有信息
|
||||
*
|
||||
* @param usId usId
|
||||
* @param usUnionId usUnionId
|
||||
* @return {@link NutMap}
|
||||
*/
|
||||
@Override
|
||||
public NutMap selectLineAllInfo(String usId, String usUnionId) {
|
||||
Sql usLineSql = Sqls.create("""
|
||||
SELECT
|
||||
us.id as usId,
|
||||
line.id as lineId,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.changeEndTime,
|
||||
us.minimumGroupSize,
|
||||
us.estimatedFamilyNumbers,
|
||||
line.content,
|
||||
l.lotName,
|
||||
(select COUNT(1) FROM recuperation_enroll en WHERE isNormal=true AND en.loginName=@loginname and YEAR(en.signingUptime)=@year) isNormal,
|
||||
(select COUNT(1) FROM recuperation_enroll en WHERE isNormal=false AND en.loginName=@loginname and YEAR(en.signingUptime)=@year) isNormalFalse,
|
||||
(select count(1) from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and YEAR(signingUptime)=@year) as signUpUserNum,
|
||||
(select count(1) from recuperation_enroll_companion where trreId in (select id from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and YEAR(signingUptime)=@year)) as signUpUserFamilyNum,
|
||||
(select ifnull(sum(familyNumber),0) from recuperation_enroll where takePartInLineId = us.id and if(us.signUpMode = 1, takePartInUnionId = us.unionId, 1=1) and isNormal = true and stateId not in (2715,2725,2735) and YEAR(signingUptime)=@year) as familyNumber,
|
||||
ta.travelAgencyName,
|
||||
ta.contactMobileNumber
|
||||
FROM
|
||||
`recuperation_line_select` us
|
||||
LEFT JOIN recuperation_line line ON line.id = us.lineId
|
||||
LEFT JOIN recuperation_travel_agency ta on ta.id = line.travelAgencyId
|
||||
LEFT JOIN recuperation_lot l on l.id = line.lotId
|
||||
WHERE if(us.signUpMode = 1, us.unionId = @usUnionId, 1=1) AND us.id = @id
|
||||
""");
|
||||
usLineSql.setParam("loginname", SecurityUtil.getUserLoginname());
|
||||
usLineSql.setParam("year", DateUtil.thisYear());
|
||||
usLineSql.setParam("usUnionId", usUnionId);
|
||||
usLineSql.setParam("id", usId);
|
||||
|
||||
usLineSql.setCallback(Sqls.callback.map());
|
||||
this.dao().execute(usLineSql);
|
||||
return usLineSql.getObject(NutMap.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Sys_union> getUnions(Integer year) {
|
||||
//查询某个年份公开线路了的工会
|
||||
List<RecuperationLineSelect> openList = dao().query(RecuperationLineSelect.class, Cnd.where("isOpen", "=", true)
|
||||
.and("signUpMode", "=", 1).and("year(selectTime)", "=", DateUtil.thisYear()).and("unionId", "!=", SecurityUtil.getUnionId()));
|
||||
|
||||
// List<RecuperationLineSelect> openList = dao().query(RecuperationLineSelect.class,
|
||||
// Cnd.where("signUpMode", "=", 1).and("year(selectTime)", "=", DateUtil.thisYear()));
|
||||
|
||||
if (Lang.isNotEmpty(openList)) {
|
||||
List<String> unionIds = openList.stream().map(RecuperationLineSelect::getUnionId).distinct().collect(Collectors.toList());
|
||||
return dao().query(Sys_union.class, Cnd.where("id", "in", unionIds));
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
+271
@@ -0,0 +1,271 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.recuperation.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnroll;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLineSelect;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationLineSelectService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName RecuperationLineSelectServiceImpl
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/8/18 15:55
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class RecuperationLineSelectServiceImpl extends BaseServiceImpl<RecuperationLineSelect> implements RecuperationLineSelectService {
|
||||
|
||||
public RecuperationLineSelectServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面数据
|
||||
*
|
||||
* @param pageForm 分页参数
|
||||
* @param cnd cnd
|
||||
* @return {@link Pagination}
|
||||
*/
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Cnd cnd, Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
select
|
||||
line.id,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
line.minimumGroupSize,
|
||||
line.year,
|
||||
line.isDisabled,
|
||||
line.createUnionId,
|
||||
GROUP_CONCAT(us.playStartTime,'至',us.playEndTime) as playTimes,
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
us.changeEndTime,
|
||||
us.isOpen,
|
||||
us.signUpMode,
|
||||
line.createMode,
|
||||
gh.name AS createUnionName,
|
||||
u.username AS createUserName,
|
||||
ta.travelAgencyName,
|
||||
ta.contact,
|
||||
ta.contactMobileNumber,
|
||||
ta.officialWebsite,
|
||||
lot.lotName,
|
||||
us.unionId as usUnionId,
|
||||
us.id as usId,
|
||||
usUnion.name as belongUnionName,
|
||||
(SELECT COUNT(*) FROM recuperation_enroll WHERE takePartInLineId=line.id AND takePartInUnionId=@unionId) applyCount
|
||||
from
|
||||
recuperation_line line
|
||||
LEFT JOIN recuperation_travel_agency ta on ta.id = line.travelAgencyId
|
||||
LEFT JOIN sys_union gh ON gh.id = line.createUnionid
|
||||
LEFT JOIN sys_user u ON u.id = line.createdBy
|
||||
LEFT JOIN recuperation_line_select us on us.lineId = line.id and year(selectTime) = @year $us
|
||||
LEFT JOIN sys_union usUnion on usUnion.id = us.unionId
|
||||
LEFT JOIN recuperation_lot lot on lot.id = line.lotId
|
||||
$condition
|
||||
""");
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
sql.setVar("us", "AND us.unionId = '%s' AND us.selectUserId = '%s'".formatted(SecurityUtil.getUnionId(), SecurityUtil.getUserId()));
|
||||
}
|
||||
|
||||
//sql.setParam("unionId", Vi.getUnionId());
|
||||
//sql.setParam("userId", ShiroUtil.getPrincipalProperty("id"));
|
||||
sql.setParam("year", year == null ? DateUtil.thisYear() : year);
|
||||
|
||||
/*SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("line.createUnionId", "=", Vi.getUnionId());
|
||||
seg.or("line.createMode", "=", RecuperationLineCreateMode.SCHOOL.getValue());
|
||||
cnd.and(seg);*/
|
||||
|
||||
cnd.groupBy("line.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
|
||||
List<String> hasSelectLineIds = getHasSelectLineIds();
|
||||
for (NutMap m : list) {
|
||||
m.setv("isSelect", hasSelectLineIds.contains(m.getString("id")));
|
||||
}
|
||||
return pagination;
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择线路
|
||||
*
|
||||
* @param us 分工会选择线路信息
|
||||
*/
|
||||
@Override
|
||||
public void selectLine(RecuperationLineSelect us) {
|
||||
us.setUnionId(SecurityUtil.getUnionId());
|
||||
us.setSelectTime(new Date());
|
||||
us.setSelectUserId(SecurityUtil.getUserId());
|
||||
if (StrUtil.isBlank(us.getId())) {
|
||||
insert(us);
|
||||
} else {
|
||||
updateIgnoreNull(us);
|
||||
}
|
||||
insertOrUpdate(us);
|
||||
}
|
||||
|
||||
/**
|
||||
* 已经选择的线路ids
|
||||
*
|
||||
* @return {@link List}<{@link String}>
|
||||
*/
|
||||
@Override
|
||||
public List<String> getHasSelectLineIds() {
|
||||
Sql sql = Sqls.create("""
|
||||
select lineId from recuperation_line_select
|
||||
where selectUserId = @userId
|
||||
""");
|
||||
sql.setParam("userId", SecurityUtil.getUserId());
|
||||
List<NutMap> lineIdsMap = (List<NutMap>) Daos.query(dao(), sql.toString(), Sqls.callback.maps());
|
||||
return lineIdsMap.stream().map(v -> v.getString("lineId")).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置的活动时间信息
|
||||
*
|
||||
* @param lineId 行id
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@Override
|
||||
public Object selectLineInfo(String lineId, String unionId, Integer mode, Integer year) {
|
||||
Sql sql;
|
||||
sql = Sqls.create("""
|
||||
select
|
||||
id,
|
||||
lineId,
|
||||
signUpStartTime,
|
||||
signUpEndTime,
|
||||
changeEndTime,
|
||||
playStartTime,
|
||||
playEndTime,
|
||||
contact,
|
||||
contactPhone,
|
||||
minimumGroupSize,
|
||||
trafficTools,
|
||||
estimatedCost,
|
||||
estimatedFamilyNumbers,
|
||||
signUpMode,
|
||||
enable
|
||||
from
|
||||
recuperation_line_select
|
||||
where unionId = @unionId
|
||||
and lineId = @lineId
|
||||
and signUpMode = @mode
|
||||
and year(selectTime) = @year
|
||||
ORDER BY signUpStartTime ASC
|
||||
""");
|
||||
sql.setParam("unionId", unionId);
|
||||
sql.setParam("lineId", lineId);
|
||||
sql.setParam("mode", mode);
|
||||
sql.setParam("year", year == null ? DateUtil.thisYear() : year);
|
||||
return listMap(sql);
|
||||
|
||||
// RecuperationLine line = dao().fetch(RecuperationLine.class, lineId);
|
||||
// if (line.getSignUpMode() == RecuperationSignUpMode.UNION.getValue()) {
|
||||
// sql = Sqls.create("""
|
||||
// select
|
||||
// id,
|
||||
// lineId,
|
||||
// signUpStartTime,
|
||||
// signUpEndTime,
|
||||
// changeEndTime,
|
||||
// playStartTime,
|
||||
// playEndTime,
|
||||
// contact,
|
||||
// contactPhone
|
||||
// from
|
||||
// recuperation_line_select
|
||||
// where unionId = @unionId
|
||||
// and lineId = @lineId
|
||||
// ORDER BY signUpStartTime ASC
|
||||
// """);
|
||||
// sql.setParam("unionId", unionId);
|
||||
// sql.setParam("lineId", lineId);
|
||||
// return listMap(sql);
|
||||
// } else {
|
||||
// sql = Sqls.create("""
|
||||
// select
|
||||
// id,
|
||||
// signUpStartTime,
|
||||
// signUpEndTime,
|
||||
// changeEndTime,
|
||||
// playStartTime,
|
||||
// playEndTime
|
||||
// from
|
||||
// recuperation_line
|
||||
// where id = @lineId
|
||||
// """);
|
||||
// sql.setParam("lineId", lineId);
|
||||
// return listMap(sql);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置线路时间信息
|
||||
*
|
||||
* @param unionSelect 联盟选择
|
||||
*/
|
||||
@Override
|
||||
public void setLineInfo(RecuperationLineSelect unionSelect) {
|
||||
dao().updateIgnoreNull(unionSelect);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询某个分工会设置的线路时间信息
|
||||
*
|
||||
* @param lineId 行id
|
||||
* @param usUnionId 我们工会id
|
||||
* @return {@link NutMap}
|
||||
*/
|
||||
@Override
|
||||
public RecuperationLineSelect findUsLineInfo(String lineId, String usUnionId) {
|
||||
return dao().fetch(RecuperationLineSelect.class,
|
||||
Cnd.where("lineId", "=", lineId)
|
||||
.and("unionId", "=", usUnionId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分工会取消选择线路
|
||||
*
|
||||
* @param usId union_select 主键id
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void deSelect(String usId) {
|
||||
RecuperationLineSelect lineUnionSelect = fetch(usId);
|
||||
Cnd enrollCnd = Cnd.where("takePartInUnionId", "=", lineUnionSelect.getUnionId());
|
||||
enrollCnd.and("takePartInLineId", "=", lineUnionSelect.getLineId());
|
||||
dao().clear(RecuperationEnroll.class, enrollCnd);
|
||||
delete(usId);
|
||||
}
|
||||
}
|
||||
+62
-64
@@ -8,12 +8,11 @@ import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.RecuperationLineCreateMode;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.RecuperationSignUpMode;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.constant.RecuperationState;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnroll;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationEnrollCompanion;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLine;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLineUnionSelect;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationLineSelect;
|
||||
import com.budwk.app.zhgh.staffbenefit.recuperation.service.RecuperationLineService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Chain;
|
||||
@@ -26,7 +25,6 @@ import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.plugins.wkcache.annotation.CacheRemove;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -47,18 +45,18 @@ public class RecuperationLineServiceImpl extends BaseServiceImpl<RecuperationLin
|
||||
|
||||
@Override
|
||||
public void deleteLine(String lineId) {
|
||||
List<RecuperationLineUnionSelect> unionSelectList = dao().query(RecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
List<RecuperationLineSelect> unionSelectList = dao().query(RecuperationLineSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
if (Lang.isNotEmpty(unionSelectList)) {
|
||||
List<String> selectIds = unionSelectList.stream().map(RecuperationLineUnionSelect::getId).collect(Collectors.toList());
|
||||
List<String> selectIds = unionSelectList.stream().map(RecuperationLineSelect::getId).collect(Collectors.toList());
|
||||
List<RecuperationEnroll> enrollList = dao().query(RecuperationEnroll.class, Cnd.where("takePartInLineId", "in", selectIds));
|
||||
if (Lang.isNotEmpty(enrollList)){
|
||||
if (Lang.isNotEmpty(enrollList)) {
|
||||
List<String> enrollIds = enrollList.stream().map(RecuperationEnroll::getId).collect(Collectors.toList());
|
||||
dao().clear(RecuperationEnrollCompanion.class, Cnd.where("trreId", "in", enrollIds));
|
||||
}
|
||||
dao().clear(RecuperationEnroll.class, Cnd.where("takePartInLineId", "in", selectIds));
|
||||
}
|
||||
delete(lineId);
|
||||
dao().clear(RecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
dao().clear(RecuperationLineSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
deleteLineInfoCache(lineId);
|
||||
}
|
||||
|
||||
@@ -91,33 +89,33 @@ public class RecuperationLineServiceImpl extends BaseServiceImpl<RecuperationLin
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Cnd cnd) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.id,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
line.minimumGroupSize,
|
||||
line.year,
|
||||
line.isDisabled,
|
||||
line.createUnionId,
|
||||
line.signUpMode,
|
||||
line.createMode,
|
||||
line.file AS fileId,
|
||||
gh.name AS createUnionName,
|
||||
u.username AS createUserName,
|
||||
ta.travelAgencyName,
|
||||
ta.contact,
|
||||
ta.contactMobileNumber,
|
||||
ta.officialWebsite,
|
||||
lot.lotName
|
||||
FROM
|
||||
recuperation_line line
|
||||
LEFT JOIN recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
LEFT JOIN sys_union gh ON gh.id = line.createUnionid
|
||||
LEFT JOIN sys_user u ON u.id = line.createdBy
|
||||
LEFT JOIN recuperation_lot lot on lot.id = line.lotId
|
||||
$condition
|
||||
""");
|
||||
SELECT
|
||||
line.id,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
line.minimumGroupSize,
|
||||
line.year,
|
||||
line.isDisabled,
|
||||
line.createUnionId,
|
||||
line.signUpMode,
|
||||
line.createMode,
|
||||
line.file AS fileId,
|
||||
gh.name AS createUnionName,
|
||||
u.username AS createUserName,
|
||||
ta.travelAgencyName,
|
||||
ta.contact,
|
||||
ta.contactMobileNumber,
|
||||
ta.officialWebsite,
|
||||
lot.lotName
|
||||
FROM
|
||||
recuperation_line line
|
||||
LEFT JOIN recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
LEFT JOIN sys_union gh ON gh.id = line.createUnionid
|
||||
LEFT JOIN sys_user u ON u.id = line.createdBy
|
||||
LEFT JOIN recuperation_lot lot on lot.id = line.lotId
|
||||
$condition
|
||||
""");
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
@@ -130,24 +128,24 @@ public class RecuperationLineServiceImpl extends BaseServiceImpl<RecuperationLin
|
||||
@Override
|
||||
public Pagination selectLineUser(PageForm pageForm, String lineId, String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.lineName,
|
||||
enroll.id,
|
||||
enroll.loginName,
|
||||
enroll.userName,
|
||||
enroll.unionName,
|
||||
enroll.unitName,
|
||||
enroll.familyNumber,
|
||||
( SELECT COUNT( 1 ) FROM recuperation_enroll_companion WHERE trreId = enroll.id) isFamily
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
WHERE
|
||||
lineu.id = @takePartInLineId
|
||||
and enroll.stateId=@stateId
|
||||
$unionCnd
|
||||
""").setParam("takePartInLineId", lineId).setParam("stateId", RecuperationState.PASS);
|
||||
SELECT
|
||||
line.lineName,
|
||||
enroll.id,
|
||||
enroll.loginName,
|
||||
enroll.userName,
|
||||
enroll.unionName,
|
||||
enroll.unitName,
|
||||
enroll.familyNumber,
|
||||
( SELECT COUNT( 1 ) FROM recuperation_enroll_companion WHERE trreId = enroll.id) isFamily
|
||||
FROM
|
||||
`recuperation_enroll` enroll
|
||||
LEFT JOIN recuperation_line_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN recuperation_line line ON line.id = lineu.lineId
|
||||
WHERE
|
||||
lineu.id = @takePartInLineId
|
||||
and enroll.stateId=@stateId
|
||||
$unionCnd
|
||||
""").setParam("takePartInLineId", lineId).setParam("stateId", RecuperationState.PASS);
|
||||
if (StrUtil.isNotBlank(unionId) && !AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
sql.setVar("unionCnd", "and enroll.selfUnionId='%s'".formatted(unionId));
|
||||
}
|
||||
@@ -172,18 +170,18 @@ public class RecuperationLineServiceImpl extends BaseServiceImpl<RecuperationLin
|
||||
@Override
|
||||
public List<NutMap> viewUnionSelectTimeInfo(String lineId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.changeEndTime,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
gh.name AS selectUnionName
|
||||
FROM
|
||||
`recuperation_line_union_select` us
|
||||
LEFT JOIN sys_union gh ON gh.id = us.unionId
|
||||
WHERE us.lineId = @lineId
|
||||
""");
|
||||
SELECT
|
||||
us.signUpStartTime,
|
||||
us.signUpEndTime,
|
||||
us.changeEndTime,
|
||||
us.playStartTime,
|
||||
us.playEndTime,
|
||||
gh.name AS selectUnionName
|
||||
FROM
|
||||
`recuperation_line_select` us
|
||||
LEFT JOIN sys_union gh ON gh.id = us.unionId
|
||||
WHERE us.lineId = @lineId
|
||||
""");
|
||||
return listMap(sql);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ layout("/layouts/platform.html"){
|
||||
activityType: "2"
|
||||
},
|
||||
tableColumns: [
|
||||
{ label: "活动名称", prop: "activityName", width: 800},
|
||||
{ label: "活动名称", prop: "activityName", width: 600},
|
||||
{ label: "活动性质", prop: "trainType"},
|
||||
{ label: "报名时间", prop: "activitySignUpStartTime"},
|
||||
{ label: "活动时间", prop: "activityStartTime"},
|
||||
|
||||
@@ -3,7 +3,7 @@ const signForm = {
|
||||
<div>
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="signDialog" title="信息填写" width="50%"
|
||||
append-to-body>
|
||||
<el-form :model="formData" ref="form" label-width="80px">
|
||||
<el-form :model="formData" ref="form" label-width="120px">
|
||||
<div class="left-span-label">个人信息</div>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
|
||||
@@ -64,9 +64,9 @@ layout("/layouts/platform.html"){
|
||||
{{ $moment(createdAt).format('YYYY-MM-DD HH:mm:ss') }}
|
||||
</template>
|
||||
<template v-slot="{ row }" v-else-if="column.prop === 'activityTime'">
|
||||
<span>{{ $moment(row.activityStartTime).format('MM/DD') }}</span>
|
||||
<span>{{ $moment(row.activityStartTime).format('YYYY/MM/DD') }}</span>
|
||||
<span> 至 </span>
|
||||
<span>{{ $moment(row.activityEndTime).format('MM/DD') }}</span>
|
||||
<span>{{ $moment(row.activityEndTime).format('YYYY/MM/DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150px">
|
||||
@@ -135,7 +135,7 @@ layout("/layouts/platform.html"){
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
tableColumns: [
|
||||
{ label: "活动名称", prop: "activityName", width: 800 },
|
||||
{ label: "活动名称", prop: "activityName", width: 600 },
|
||||
{ label: "活动时间", prop: "activityTime" },
|
||||
{ label: "是否开启", prop: "isDisabled", width: 100 },
|
||||
{ label: "创建时间", prop: "createdAt" }
|
||||
|
||||
@@ -16,9 +16,10 @@ layout("/layouts/platform.html"){
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
@change="yearChange"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
|
||||
@@ -12,11 +12,12 @@ layout("/layouts/platform.html"){
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
@change="yearChange"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="活动名称:">
|
||||
@@ -69,7 +70,7 @@ layout("/layouts/platform.html"){
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<user-info ref="userInfoRef"></user-info>
|
||||
<user-info ref="userInfoRef" @refresh="doSearch"></user-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
|
||||
@@ -152,16 +152,16 @@ const userInfo = {
|
||||
background: "rgba(0, 0, 0, 0.7)"
|
||||
})
|
||||
const resp = await this.$axios.post(loc() + "/adjust", {
|
||||
activityId: this.pageForm.activityId,
|
||||
activityId: this.activity.id,
|
||||
oldCourseId: this.registerCourse.id,
|
||||
newCourseId: this.afterAdjustCourse,
|
||||
userId: this.userInfo.userId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.adjustDialogVisible = false
|
||||
this.doSearch()
|
||||
await this.registerSearch()
|
||||
this.$emit("refresh", null)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
@@ -184,7 +184,7 @@ const userInfo = {
|
||||
})
|
||||
.then(async () => {
|
||||
const resp = await this.$axios.post(loc() + "/deleteSignUser", {
|
||||
activityId: this.pageForm.activityId,
|
||||
activityId: this.activity.id,
|
||||
courseId: this.registerCourse.id,
|
||||
userId: o.userId
|
||||
})
|
||||
|
||||
@@ -79,8 +79,8 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column prop="username" label="姓名"></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号"></el-table-column>
|
||||
<el-table-column prop="mobile" label="联系方式"></el-table-column>
|
||||
<el-table-column prop="unitname" label="单位"></el-table-column>
|
||||
<el-table-column prop="unionname" label="工会"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="unionName" label="工会"></el-table-column>
|
||||
<el-table-column prop="signUpTime" label="报名时间"></el-table-column>
|
||||
</el-table>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const basicForm = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="110px" label-position="left">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="120px" label-position="left">
|
||||
<el-form-item prop="planType" label="计划类型">
|
||||
<el-select v-model="formData.planType" placeholder="请选择计划类型" filterable clearable
|
||||
style="width: 100%">
|
||||
@@ -68,6 +68,12 @@ const basicForm = {
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<text-editor v-model="formData.content"></text-editor>
|
||||
</el-form-item>
|
||||
<el-form-item prop="content" label="附件上传">
|
||||
<file-upload :upload_number="5" :value.sync="formData.files"
|
||||
upload_result_type="url"
|
||||
complete_result upload_mode="drag"
|
||||
upload_result_category="array"></file-upload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row class="mt10" justify="end" type="flex">
|
||||
<el-button @click="$emit('refresh')">取消</el-button>
|
||||
@@ -120,6 +126,7 @@ const basicForm = {
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(async () => {
|
||||
this.formData.files = JSON.stringify(this.formData.files)
|
||||
const resp = await this.$axios.post("/platform/yearPlan/manage/onSubmit", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
|
||||
@@ -57,6 +57,10 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="年度计划">
|
||||
<el-button type="primary" size="small" @click="onDownLoad">
|
||||
<i class="el-icon-download"></i>
|
||||
下载全部附件
|
||||
</el-button>
|
||||
<el-button type="primary" size="small" @click="onAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新增计划
|
||||
@@ -133,6 +137,9 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onDownLoad() {
|
||||
this.$downLoad(loc() + '/downloadFiles', this.pageForm)
|
||||
},
|
||||
refresh() {
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
const basicForm = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="110px" label-position="left">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="120px" label-position="left">
|
||||
<el-form-item label="上传人" prop="userName">
|
||||
<el-input maxlength="50" placeholder="请填写上传人" :value="$store.state.user.username"
|
||||
type="text"></el-input>
|
||||
|
||||
@@ -54,6 +54,10 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="年度总结">
|
||||
<el-button type="primary" size="small" @click="onDownLoad">
|
||||
<i class="el-icon-download"></i>
|
||||
下载全部附件
|
||||
</el-button>
|
||||
<el-button type="primary" size="small" @click="onAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新增计划
|
||||
@@ -129,6 +133,9 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onDownLoad() {
|
||||
this.$downLoad(loc() + '/downloadFiles', this.pageForm)
|
||||
},
|
||||
refresh() {
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
|
||||
@@ -88,7 +88,7 @@ layout("/layouts/platform.html"){
|
||||
activityType: "2"
|
||||
},
|
||||
tableColumns: [
|
||||
{ label: "活动名称", prop: "activityName", width: 800},
|
||||
{ label: "活动名称", prop: "activityName", width: 600},
|
||||
{ label: "活动性质", prop: "trainType"},
|
||||
{ label: "报名时间", prop: "activitySignUpStartTime"},
|
||||
{ label: "活动时间", prop: "activityStartTime"},
|
||||
|
||||
@@ -2,7 +2,7 @@ const signForm = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="signDialog" title="信息填写" width="50%" append-to-body>
|
||||
<el-form :model="formData" ref="form" label-width="80px">
|
||||
<el-form :model="formData" ref="form" label-width="120px">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="姓名" prop="username">
|
||||
@@ -155,7 +155,7 @@ const signForm = {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
if (this.courseRow.courseIsLimitApply) {
|
||||
const resp = await $.post('/platform/mobile/trainSignUpActivity/validateSourceSignUp', {activityCourseId: this.formData.activityCourseId})
|
||||
const resp = await this.$axios.post('/platform/mobile/trainSignUpActivity/validateSourceSignUp', {activityCourseId: this.formData.activityCourseId})
|
||||
if (resp.code !== 0) {
|
||||
this.$message.warning(res.msg)
|
||||
return
|
||||
|
||||
@@ -64,9 +64,9 @@ layout("/layouts/platform.html"){
|
||||
{{ $moment(createdAt).format('YYYY-MM-DD HH:mm:ss') }}
|
||||
</template>
|
||||
<template v-slot="{ row }" v-else-if="column.prop === 'activityTime'">
|
||||
<span>{{ $moment(row.activityStartTime).format('MM/DD') }}</span>
|
||||
<span>{{ $moment(row.activityStartTime).format('YYYY/MM/DD') }}</span>
|
||||
<span> 至 </span>
|
||||
<span>{{ $moment(row.activityEndTime).format('MM/DD') }}</span>
|
||||
<span>{{ $moment(row.activityEndTime).format('YYYY/MM/DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150px">
|
||||
@@ -135,7 +135,7 @@ layout("/layouts/platform.html"){
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
tableColumns: [
|
||||
{ label: "活动名称", prop: "activityName", width: 800 },
|
||||
{ label: "活动名称", prop: "activityName", width: 600 },
|
||||
{ label: "活动时间", prop: "activityTime" },
|
||||
{ label: "是否开启", prop: "isDisabled", width: 100 },
|
||||
{ label: "创建时间", prop: "createdAt" }
|
||||
|
||||
@@ -16,9 +16,10 @@ layout("/layouts/platform.html"){
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
@change="yearChange"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
|
||||
@@ -12,9 +12,10 @@ layout("/layouts/platform.html"){
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
@change="yearChange"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
@@ -69,7 +70,7 @@ layout("/layouts/platform.html"){
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<user-info ref="userInfoRef"></user-info>
|
||||
<user-info ref="userInfoRef" @refresh="doSearch"></user-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
|
||||
@@ -152,20 +152,20 @@ const userInfo = {
|
||||
background: "rgba(0, 0, 0, 0.7)"
|
||||
})
|
||||
const resp = await this.$axios.post(loc() + "/adjust", {
|
||||
activityId: this.pageForm.activityId,
|
||||
activityId: this.activity.id,
|
||||
oldCourseId: this.registerCourse.id,
|
||||
newCourseId: this.afterAdjustCourse,
|
||||
userId: this.userInfo.userId
|
||||
})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.adjustDialogVisible = false
|
||||
this.doSearch()
|
||||
await this.registerSearch()
|
||||
this.$emit("refresh", null)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
loading.close()
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
@@ -184,14 +184,14 @@ const userInfo = {
|
||||
})
|
||||
.then(async () => {
|
||||
const resp = await this.$axios.post(loc() + "/deleteSignUser", {
|
||||
activityId: this.pageForm.activityId,
|
||||
activityId: this.activity.id,
|
||||
courseId: this.registerCourse.id,
|
||||
userId: o.userId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
await this.registerSearch()
|
||||
this.doSearch()
|
||||
this.$emit("refresh", null)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
|
||||
@@ -79,8 +79,8 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column prop="username" label="姓名"></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号"></el-table-column>
|
||||
<el-table-column prop="mobile" label="联系方式"></el-table-column>
|
||||
<el-table-column prop="unitname" label="单位"></el-table-column>
|
||||
<el-table-column prop="unionname" label="工会"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="unionName" label="工会"></el-table-column>
|
||||
<el-table-column prop="signUpTime" label="报名时间"></el-table-column>
|
||||
</el-table>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
|
||||
@@ -119,6 +119,9 @@ const addForm = {
|
||||
})
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.queryDoctorUser(null)
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
|
||||
`
|
||||
|
||||
@@ -8,6 +8,7 @@ const basicForm = {
|
||||
v-model="formData.userId"
|
||||
filterable
|
||||
remote
|
||||
:disabled="formData.id !== '' && formData.id !== null && formData.id !== undefined"
|
||||
reserve-keyword
|
||||
placeholder="请输入关键词"
|
||||
:remote-method="selectQueryUser"
|
||||
|
||||
@@ -101,7 +101,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'unitName', label: '单位'},
|
||||
{prop: 'jobTitle', label: '职称'},
|
||||
{prop: 'technicalTitle', label: '职称'},
|
||||
{prop: 'mobile', label: '联系电话'},
|
||||
{prop: 'avatar', label: '头像'}
|
||||
],
|
||||
|
||||
@@ -42,6 +42,10 @@ const info = {
|
||||
},
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
|
||||
.el-descriptions-item__label {
|
||||
width: 200px;
|
||||
min-width: 200px;
|
||||
max-width: 200px;
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
+3
@@ -119,6 +119,9 @@ const addForm = {
|
||||
})
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.queryDoctorUser(null)
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
|
||||
`
|
||||
|
||||
+1
@@ -8,6 +8,7 @@ const basicForm = {
|
||||
v-model="formData.userId"
|
||||
filterable
|
||||
remote
|
||||
:disabled="formData.id !== '' && formData.id !== null && formData.id !== undefined"
|
||||
reserve-keyword
|
||||
placeholder="请输入关键词"
|
||||
:remote-method="selectQueryUser"
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'unitName', label: '单位'},
|
||||
{prop: 'jobTitle', label: '职称'},
|
||||
{prop: 'technicalTitle', label: '职称'},
|
||||
{prop: 'mobile', label: '联系电话'},
|
||||
{prop: 'avatar', label: '头像'}
|
||||
],
|
||||
|
||||
@@ -42,6 +42,10 @@ const info = {
|
||||
},
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
|
||||
.el-descriptions-item__label {
|
||||
width: 200px;
|
||||
min-width: 200px;
|
||||
max-width: 200px;
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
+353
@@ -0,0 +1,353 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.top_block {
|
||||
width: 100%;
|
||||
padding: 20px 80px;
|
||||
border-bottom: 10px solid rgb(240, 240, 240);
|
||||
}
|
||||
.top_title {
|
||||
font-size: 18px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.top_num {
|
||||
font-size: 26px;
|
||||
color: #808492;
|
||||
}
|
||||
.two_num {
|
||||
margin-top: 8px;
|
||||
font-size: 18px;
|
||||
color: #808492;
|
||||
}
|
||||
.cut-off-line {
|
||||
width: 1px;
|
||||
height: 70%;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
background-color: rgb(230, 230, 230);
|
||||
}
|
||||
.chartTitle {
|
||||
font-size: 14px;
|
||||
color: #808492;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
@change="doSearch"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="线路类型:">
|
||||
<el-select v-model="pageForm.lineType" placeholder="请选择线路类型" clearable style="width: 100%" @change="doSearch">
|
||||
<el-option v-for="item in regionalNatureList" :key="item.value" :label="item.label" :value="item.value">{{item.label}}</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<div class="top_block">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4" style="position: relative">
|
||||
<div class="top_title">总人数</div>
|
||||
<div class="top_num">{{numData.allNum || '0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4" style="position: relative">
|
||||
<div class="top_title">省内人数</div>
|
||||
<div class="top_num">{{numData.provinceNum || '0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4" style="position: relative">
|
||||
<div class="top_title">省外人数</div>
|
||||
<div class="top_num">{{numData.outProvinceNum || '0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4" style="position: relative">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<div class="top_title">总线路数</div>
|
||||
<div style="margin-top: 2px;font-size: 18px;color: #1867b0">共{{numData.lineNum || '0'}}条</div>
|
||||
</div>
|
||||
<div class="two_num">省内{{numData.inLineNum || '0'}} | 省外{{numData.outLineNum || '0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4" style="position: relative">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<div class="top_title">校工会组织</div>
|
||||
<div style="margin-top: 2px;font-size: 18px;color: #1867b0">共{{numData.schoolUnionLineNum || '0'}}条</div>
|
||||
</div>
|
||||
<div class="two_num">省内{{numData.schoolInLineNum || '0'}} | 省外{{numData.schoolOutLineNum || '0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<div class="top_title">分工会组织</div>
|
||||
<div style="margin-top: 2px;font-size: 18px;color: #1867b0">共{{numData.unionLineNum || '0'}}条</div>
|
||||
</div>
|
||||
<div class="two_num">省内{{numData.unionInLineNum || '0'}} | 省外{{numData.unionOutLineNum || '0'}}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<el-row :gutter="20" style="padding: 30px 0;border-bottom: 10px solid rgb(240, 240, 240)">
|
||||
<el-col :span="12" v-loading="lotLoading">
|
||||
<div class="chartTitle">时间标段统计</div>
|
||||
<div id="lotChart" style="width: 100%;height: 300px"></div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-loading="ageLoading">
|
||||
<div class="chartTitle">年龄分布统计</div>
|
||||
<div id="ageChart" style="width: 100%;height: 300px"></div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row style="padding: 30px 0;border-bottom: 10px solid rgb(240, 240, 240)">
|
||||
<el-col :span="24" style="padding: 0 20px" v-loading="lineTravelOrAgeLoading">
|
||||
<div class="chartTitle">线路人数及年龄统计</div>
|
||||
<div id="lineTravelChart"></div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: new Date().getFullYear().toString(),
|
||||
},
|
||||
numData: {
|
||||
allNum: '',
|
||||
provinceNum: '',
|
||||
outProvinceNum: '',
|
||||
allLineNum: '',
|
||||
schoolLineNum: '',
|
||||
branchLineNum: ''
|
||||
},
|
||||
regionalNatureList: [{label:'全部线路',name:'provinceAll',ordinal:0,provinceIn:'provinceIn',provinceOut:'provinceOut',value:'全部'}],
|
||||
|
||||
lotLoading: false,
|
||||
ageLoading: false,
|
||||
|
||||
lineTravelOrAgeLoading: false,
|
||||
isLineTravel: false,
|
||||
lineTravelOrAgeTip: '出行线路年龄统计',
|
||||
dualAxisChartInstance: null,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getNumData(){
|
||||
const resp = await this.$axios.post('/platform/recuperation/annualAnalysis/getNumData', this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.numData = resp.data
|
||||
}
|
||||
},
|
||||
async getLotNumData(){
|
||||
this.lotLoading = true
|
||||
const resp = await this.$axios.post('/platform/recuperation/annualAnalysis/getLotNum', this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
let {data} = resp
|
||||
document.getElementById("lotChart").innerHTML = ''
|
||||
const config = {
|
||||
isStack: true,
|
||||
"legend": {
|
||||
"position": "top-right",
|
||||
"flipPage": false
|
||||
},
|
||||
autoFit: true,
|
||||
title: {
|
||||
visible: true,
|
||||
text: '出行时间标段统计详情',
|
||||
},
|
||||
description: {
|
||||
visible: true,
|
||||
text: '人',
|
||||
},
|
||||
xField: 'label',
|
||||
yField: 'value',
|
||||
stackField: 'type',
|
||||
color: ["#5B8FF9", "#5AD8A6"],
|
||||
"xAxis": {
|
||||
label: {
|
||||
formatter: (v) => {
|
||||
if (data.length > 30 && v.length > 3) {
|
||||
return v.substr(0, 2) + '...'
|
||||
} else if (data.length > 20 && v.length > 4) {
|
||||
return v.substr(0, 3) + '...'
|
||||
} else if (data.length > 10 && v.length > 6) {
|
||||
return v.substr(0, 5) + '...'
|
||||
}
|
||||
return v
|
||||
}
|
||||
}
|
||||
},
|
||||
"yAxis": {},
|
||||
meta: {
|
||||
label: {
|
||||
alias: '标段时长',
|
||||
},
|
||||
value: {
|
||||
alias: '人数',
|
||||
}
|
||||
},
|
||||
connectedArea: {
|
||||
visible: true,
|
||||
triggerOn: false,
|
||||
},
|
||||
}
|
||||
const plot = new G2Plot.Column(document.getElementById("lotChart"), {
|
||||
data,
|
||||
...config,
|
||||
});
|
||||
plot.render();
|
||||
this.lotLoading = false
|
||||
}
|
||||
},
|
||||
async getAgeData(){
|
||||
this.ageLoading = true
|
||||
const resp = await this.$axios.post('/platform/recuperation/annualAnalysis/getAgeNum', this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
let {data} = resp
|
||||
document.getElementById("ageChart").innerHTML = ''
|
||||
const config = {
|
||||
"legend": {
|
||||
"flipPage": false
|
||||
},
|
||||
"label": {
|
||||
"type": "spider",
|
||||
"offset": 50
|
||||
},
|
||||
"width": $('#ageChart').width(),
|
||||
"height": $('#ageChart').height(),
|
||||
"forceFit": false,
|
||||
"radius": 1,
|
||||
"colorField": "label",
|
||||
"angleField": "value",
|
||||
meta: {
|
||||
label: {
|
||||
alias: '年龄结构',
|
||||
},
|
||||
value: {
|
||||
alias: '人数',
|
||||
}
|
||||
},
|
||||
}
|
||||
const plot = new G2Plot.Pie(document.getElementById("ageChart"), {
|
||||
data,
|
||||
...config,
|
||||
});
|
||||
plot.render();
|
||||
this.ageLoading = false
|
||||
}
|
||||
},
|
||||
async getLineTravelData(){
|
||||
if (this.dualAxisChartInstance) {
|
||||
this.dualAxisChartInstance.destroy(); // 如果已有实例,先销毁
|
||||
}
|
||||
const resp = await this.$axios.post('/platform/recuperation/annualAnalysis/getLineTravelAndAgeData', this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
let {data} = resp
|
||||
document.getElementById("lineTravelChart").innerHTML = ''
|
||||
const dualAxes = new G2Plot.DualAxes('lineTravelChart', {
|
||||
data: [data.uvData, data.transformData],
|
||||
xField: 'lineName',
|
||||
yField: ['value', 'count'],
|
||||
meta: {
|
||||
value: {
|
||||
alias: '出行人数',
|
||||
},
|
||||
count: {
|
||||
alias: '年龄段人数',
|
||||
}
|
||||
},
|
||||
yAxis: [
|
||||
{
|
||||
min: 0, // 设置Y轴最小值为0
|
||||
max: null, // 自动计算最大值
|
||||
title: {
|
||||
text: '出行人数',
|
||||
},
|
||||
},
|
||||
{
|
||||
position: 'right',
|
||||
min: 0,
|
||||
max: null,
|
||||
title: {
|
||||
text: '年龄段人数',
|
||||
},
|
||||
},
|
||||
],
|
||||
geometryOptions: [
|
||||
{
|
||||
geometry: 'column',
|
||||
columnWidthRatio: 0.4,
|
||||
color: '#5B8FF9', // 设置柱状图颜色
|
||||
},
|
||||
{
|
||||
geometry: 'line',
|
||||
seriesField: 'name',
|
||||
color: ['#5AD8A6', '#E8684A', '#FF9D4D'], // 设置线的颜色
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
shared: true, // 共享提示框
|
||||
},
|
||||
});
|
||||
dualAxes.render();
|
||||
}
|
||||
},
|
||||
doLineTravelOrAgeSwitch(){
|
||||
this.isLineTravel = !this.isLineTravel
|
||||
this.lineTravelOrAgeTip = this.isLineTravel ? '出行线路年龄统计' : '出行线路人数统计'
|
||||
},
|
||||
async initData(){
|
||||
await this.getNumData()
|
||||
await this.getLotNumData()
|
||||
await this.getAgeData()
|
||||
await this.getLineTravelData()
|
||||
},
|
||||
async getEnumOptions(enumName) {
|
||||
const resp = await this.$axios.post("/open/common/dictEnumOptions", { name: enumName })
|
||||
return resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.regionalNatureList.push(...await this.getEnumOptions('RecuperationProvinceType'))
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+2
-2
@@ -90,8 +90,8 @@ layout("/layouts/platform.html"){
|
||||
>
|
||||
<template v-slot="{ row }" v-if="column.prop === 'isDisabled'">
|
||||
<el-switch
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
:active-value="false"
|
||||
:inactive-value="true"
|
||||
@change="(val)=>{baseStatusChange(row.id)}"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
|
||||
+193
@@ -0,0 +1,193 @@
|
||||
const editForm = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-dialog title="编辑" :visible.sync="visible" top="50px">
|
||||
<el-form :model="formData" label-width="120px" :formRules="formRules" ref="formRef"
|
||||
style="margin-right: 40px">
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="loginName" label="工号">
|
||||
<el-input v-model="formData.loginName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="userName" label="姓名">
|
||||
<el-input v-model="formData.userName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="userName" label="手机号">
|
||||
<el-input v-model="formData.mobile" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="userName" label="身份证号">
|
||||
<el-input v-model="formData.idCard" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="unionName" label="工会">
|
||||
<el-input v-model="formData.unionName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="unitName" label="单位">
|
||||
<el-input v-model="formData.unitName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="prop" :label="labelName">
|
||||
<template v-if="config.familyInfo == 2">
|
||||
<el-collapse v-model="activeNames">
|
||||
<el-collapse-item title="点击可展开详细信息" name="1">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="formData.companionList">
|
||||
<el-table-column label="姓名" prop="userName"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column label="身份证号" prop="idCard"></el-table-column>
|
||||
<el-table-column label="年龄" prop="age"></el-table-column>
|
||||
<el-table-column label="床型" prop="bedType">
|
||||
<template v-slot="{row}">
|
||||
{{ row.bedInfo.bedType }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="床位" prop="bedNum">
|
||||
<template v-slot="{row}">
|
||||
{{ row.bedInfo.bedNum }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="意向拼床人" prop="otherSleepUser">
|
||||
<template v-slot="{row}">
|
||||
{{ row.bedInfo.otherSleepUser ?
|
||||
row.bedInfo.otherSleepUser : '暂无' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关系" prop="relation"></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input v-model="formData.bedType" readonly></el-input>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<el-form-item prop="travelLine" :label="lineLabelName">
|
||||
<el-select v-model="formData.takePartInLineId" filterable clearable
|
||||
placeholder="请选择线路"
|
||||
@change="validateLine"
|
||||
style="width: 100%">
|
||||
<el-option v-for="item in unionSelectLines"
|
||||
:key="item.id"
|
||||
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '(' + item.playStartTime + '至' + item.playEndTime + ')' + '(' + item.signUpMode + ')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item prop="specificTime" label="出行时间" v-if="pageForm.state==='3'">-->
|
||||
<!-- <el-select v-model="formData.specificTime" filterable clearable-->
|
||||
<!-- placeholder="请选择出行时间"-->
|
||||
<!-- style="width: 100%">-->
|
||||
<!-- <el-option v-for="item in editSpecificTimes"-->
|
||||
<!-- :key="item"-->
|
||||
<!-- :label="item"-->
|
||||
<!-- :value="item">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="visible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmit">确 定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
year: null,
|
||||
config: {},
|
||||
formData: {},
|
||||
formRules: {},
|
||||
labelName: null,
|
||||
lineLabelName: '线路',
|
||||
unionSelectLines: [],
|
||||
activeNames: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id, year) {
|
||||
this.year = year
|
||||
this.visible = true
|
||||
await this.getUnionSelectLine()
|
||||
await this.getModifyConfig()
|
||||
const {code, msg, data} = await this.$axios.get("/platform/recuperation/branchUnionUserQuery/findOne", {id})
|
||||
if (code === 0) {
|
||||
this.formData = data
|
||||
if (this.config.familyInfo === 2) {
|
||||
this.labelName = "家属信息"
|
||||
} else {
|
||||
this.editFormData.bedType = data.familyNumber
|
||||
this.labelName = "家属数量"
|
||||
}
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
},
|
||||
async getModifyConfig() {
|
||||
const {code, data, msg} = await this.$axios.post('/platform/recuperation/config/findOne')
|
||||
if (code === 0) {
|
||||
this.config = data
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
},
|
||||
async getUnionSelectLine() {
|
||||
const resp = await this.$axios.post('/platform/recuperation/user/query/getUnionSelectLine', {
|
||||
year: this.year,
|
||||
signUpMode: 1,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.unionSelectLines = resp.data
|
||||
}
|
||||
},
|
||||
async validateLine() {
|
||||
const resp = await $.post('/platform/recuperation/line/enroll/validSignUpInfo'
|
||||
, {enroll: JSON.stringify(this.editFormData)})
|
||||
if (resp.code !== 0) {
|
||||
this.$message.warning(resp.msg)
|
||||
this.formData.takePartInLineId = ''
|
||||
}
|
||||
},
|
||||
onSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm('您确定要修改报名信息吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
if (!this.formData.takePartInLineId && !this.formData.takePartInBaseManagementId) {
|
||||
this.$message.warning('请选择线路')
|
||||
return
|
||||
}
|
||||
const {code,msg} = await $.post('/platform/recuperation/user/query/doEdit', this.formData)
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.visible = false
|
||||
this.$emit('refresh')
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
}).catch()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
+377
@@ -0,0 +1,377 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.filter-container {
|
||||
margin-bottom: 10px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.filter-container .el-form {
|
||||
padding: 10px 15px;
|
||||
}
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
margin-bottom: 22px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.form-row .el-form-item {
|
||||
flex: 1;
|
||||
min-width: 240px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.flex-grow-1 {
|
||||
flex: 1;
|
||||
}
|
||||
.route-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.route-line-title {
|
||||
width: 90px;
|
||||
text-align: right;
|
||||
padding-right: 12px;
|
||||
color: #606266;
|
||||
font-size: 14px;
|
||||
line-height: 40px;
|
||||
}
|
||||
.route-line-content {
|
||||
flex: 1;
|
||||
}
|
||||
.route-radio-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
.route-radio-group .el-radio {
|
||||
margin-right: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.button-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding-top: 15px;
|
||||
border-top: 1px dashed #ebeef5;
|
||||
}
|
||||
.button-container .el-button {
|
||||
padding-left: 25px;
|
||||
padding-right: 25px;
|
||||
margin: 0 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never" class="filter-container">
|
||||
<el-form :model="pageForm" ref="pageFormRef" label-width="90px" size="medium">
|
||||
<div class="form-row">
|
||||
<el-form-item label="年度">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
placeholder="选择年度"
|
||||
value-format="yyyy"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="姓名">
|
||||
<el-input v-model="pageForm.userName" placeholder="请输入姓名" clearable
|
||||
prefix-icon="el-icon-user"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="工号">
|
||||
<el-input v-model="pageForm.loginName" placeholder="请输入工号" clearable
|
||||
prefix-icon="el-icon-postcard"></el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="route-line">
|
||||
<div class="route-line-title">报名线路</div>
|
||||
<div class="route-line-content">
|
||||
<el-radio-group v-model="pageForm.signUpMode" class="route-radio-group" size="small"
|
||||
@change="signUpModeChange">
|
||||
<el-radio :label="1" border>校工会线路</el-radio>
|
||||
<el-radio :label="2" border>本分工会线路本工会人员</el-radio>
|
||||
<el-radio :label="3" border>其他工会线路本工会人员</el-radio>
|
||||
<el-radio :label="4" border>个人组织线路</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="route-line">
|
||||
<div class="route-line-title">区域</div>
|
||||
<div class="route-line-content">
|
||||
<el-radio-group @change="doSearch"
|
||||
size="small"
|
||||
v-model="pageForm.regionalNature">
|
||||
<el-radio label="" border>全部</el-radio>
|
||||
<el-radio label="省内" border>省内</el-radio>
|
||||
<el-radio label="省外" border>省外</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="线路选择">
|
||||
<el-select v-model="pageForm.takePartInLineId" placeholder="请选择线路" clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in takePartInLines"
|
||||
:key="item.takePartInLineId"
|
||||
:label="item.lineName+'('+item.unionName+')'"
|
||||
:value="item.takePartInLineId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="标段">
|
||||
<el-select v-model="pageForm.lotId" placeholder="请选择标段" clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in config.lots"
|
||||
:key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item class="flex-grow-1">
|
||||
<!-- 占位,保持布局平衡 -->
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="button-container">
|
||||
<el-button type="primary" icon="el-icon-search" round @click="doSearch">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" round @click="resetQuery">重置</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
<table-tool label="人员列表" ref="table_tool">
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary" @click="doExport">
|
||||
导出
|
||||
</el-button>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary"
|
||||
@click="openSetUpPart"
|
||||
>设置参加人员
|
||||
</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" row-key="id" style="width: 100%" ref="tableRef">
|
||||
<el-table-column reserve-selection type="selection" width="55"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" type="index" label="序号" :index="indexMethod"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:key="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-slot="{row}" v-if="column.prop=='isFamily'">
|
||||
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
|
||||
{{row.isFamily?'携带':'未携带'}}({{row.isFamily}})
|
||||
</el-link>
|
||||
<el-link v-else type="primary">
|
||||
{{row.familyNumber?'携带':'未携带'}}({{row.familyNumber}})
|
||||
</el-link>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='times'">
|
||||
<div v-if="row.playStartTime">{{row.playStartTime}}</div>
|
||||
<div v-else>{{row.playStartTime1}}</div>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='isTakePartIn'">
|
||||
{{row.isTakePartIn?'已参加':'未参加'}}
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='stateId'">
|
||||
<span v-if="row.stateId">
|
||||
|
||||
</span>
|
||||
<sapn v-else style="color: #67C23A">暂无</sapn>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='lineOrMaName'">
|
||||
{{row.lineName?row.lineName:row.baseName?row.baseName:row.travelAgencyName}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="pageForm.state=='1'||pageForm.state=='3'" align="center"
|
||||
prop="lotName"
|
||||
show-overflow-tooltip
|
||||
header-align="center"
|
||||
label="标段"
|
||||
sortable>
|
||||
<template v-slot="{row}">
|
||||
{{row.lotName}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="250px">
|
||||
<template v-slot="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="onDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="查看报名信息" :visible.sync="viewVisible" top="50px">
|
||||
<enroll-info ref="viewEnrollInfoRef"></enroll-info>
|
||||
</el-dialog>
|
||||
|
||||
<set-up-part ref="setUpRef"></set-up-part>
|
||||
|
||||
<edit-form ref="editRef" @refresh="doSearch"></edit-form>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include('setUpPart.js'){}#-->
|
||||
<!--#include('editForm.js'){}#-->
|
||||
<!--#include('../line/info.js'){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'line-info': info,
|
||||
'set-up-part': setUpPart,
|
||||
'edit-form': editForm
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: new Date().getFullYear().toString(),
|
||||
loginName: '',
|
||||
userName: '',
|
||||
takePartInLineId: '',
|
||||
unionId: '',
|
||||
signUpMode: 1,
|
||||
lotId: '',
|
||||
regionalNature: ''
|
||||
},
|
||||
takePartInLines: [],
|
||||
tableColumns: [
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
{prop: 'unionName', label: '所属工会', sortable: true},
|
||||
{prop: 'lineOrMaName', label: '线路'},
|
||||
{prop: 'times', label: '出行时间'},
|
||||
{prop: 'isFamily', label: '是否携带家属'},
|
||||
{prop: 'isTakePartIn', label: '是否参加'}
|
||||
],
|
||||
viewVisible: false,
|
||||
unionOptions: [],
|
||||
config: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
signUpModeChange(val) {
|
||||
this.pageForm.takePartInLineId = ''
|
||||
this.getLines()
|
||||
this.doSearch()
|
||||
},
|
||||
resetQuery() {
|
||||
this.pageForm = {
|
||||
year: new Date().getFullYear().toString(),
|
||||
loginName: '',
|
||||
userName: '',
|
||||
takePartInLineId: '',
|
||||
unionId: '',
|
||||
signUpMode: 1,
|
||||
lotId: '',
|
||||
regionalNature: '',
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.viewVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.viewEnrollInfoRef.openView(row.id)
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
this.$refs.editRef.onOpen(row.id)
|
||||
},
|
||||
onDelete(row) {
|
||||
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的信息吗?", '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
dangerouslyUseHTMLString: true,
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const {code, msg} = await this.$axios.post('/platform/recuperation/branchUnionUserQuery/deleteMyEnrollInfoById', {
|
||||
id: row.id
|
||||
})
|
||||
if (code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(msg)
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
doExport() {
|
||||
const {year, userName, loginName, unionId, signUpMode, regionalNature, takePartInLineId, lotId} = this.pageForm
|
||||
window.open('/platform/recuperation/schoolUnionUserQuery/exportXlsx?year=' +
|
||||
year
|
||||
+ '&userName=' + userName
|
||||
+ '&loginName=' + loginName
|
||||
+ '&unionId=' + unionId
|
||||
+ '&signUpMode=' + signUpMode
|
||||
+ '®ionalNature=' + regionalNature
|
||||
+ '&takePartInLineId=' + takePartInLineId
|
||||
+ '&lotId=' + lotId)
|
||||
},
|
||||
openSetUpPart() {
|
||||
const selection = this.$refs.tableRef.selection
|
||||
if (selection.length === 0) {
|
||||
this.$message.error('请选择要设置的人员')
|
||||
return
|
||||
}
|
||||
this.$refs.setUpRef.onOpen(selection)
|
||||
},
|
||||
getConfig() {
|
||||
this.$axios.post('/platform/recuperation/config/fetchOne').then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.config = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getLines() {
|
||||
this.$axios.post('/platform/recuperation/branchUnionUserQuery/listLine', {
|
||||
year: this.pageForm.year,
|
||||
signUpMode: this.pageForm.signUpMode,
|
||||
regionalNature: this.pageForm.regionalNature
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.takePartInLines = res.data
|
||||
} else {
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch(){
|
||||
this.getLines()
|
||||
this.tableKey = new Date().getTime()
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.doSearch()
|
||||
this.getConfig()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
const setUpPart = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-dialog :visible.sync="visible" title="设置参加人员" top="50px">
|
||||
<el-row class="text-primary p20">
|
||||
选择标段/参加时间(设置前请先勾选需要设置的用户)
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" style="column-gap: 10px">
|
||||
<el-select v-model="lotId" filterable clearable
|
||||
placeholder="请选择标段"
|
||||
style="width: 100%"
|
||||
@change="lotChange">
|
||||
<el-option v-for="item in config.lots"
|
||||
:key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-model="takePartInTime"
|
||||
type="date"
|
||||
style="width: 100%"
|
||||
@change="takePartInTimeChange"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择参加时间">
|
||||
</el-date-picker>
|
||||
</el-row>
|
||||
|
||||
<el-row class="mt10">
|
||||
<el-table :data="tableData" border ref="tableRef" row-key="id">
|
||||
<el-table-column type="selection" width="55"></el-table-column>
|
||||
<el-table-column type="index" label="序号" width="80"></el-table-column>
|
||||
<el-table-column prop="loginName" label="一卡通号"></el-table-column>
|
||||
<el-table-column prop="userName" label="姓名"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="unionName" label="工会"></el-table-column>
|
||||
<el-table-column prop="signingUptime" label="报名时间"></el-table-column>
|
||||
<el-table-column prop="takePartInTime" label="参加时间"></el-table-column>
|
||||
<el-table-column prop="lotName" label="标段"></el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="onSubmit">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
config: {},
|
||||
tableData: [],
|
||||
lotId: null,
|
||||
takePartInTime: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onOpen(selection) {
|
||||
this.visible = true
|
||||
this.tableData = JSON.parse(JSON.stringify(selection))
|
||||
this.getModifyConfig()
|
||||
},
|
||||
async getModifyConfig() {
|
||||
const res = await $.post('/platform/recuperation/config/findOne')
|
||||
if (res.code === 0) {
|
||||
this.config = res.data
|
||||
}
|
||||
},
|
||||
lotChange(val) {
|
||||
const selection = this.$refs.tableRef.selection
|
||||
if (selection.length === 0) {
|
||||
this.$message.error('请选择要设置的人员')
|
||||
this.lotId = null
|
||||
return
|
||||
}
|
||||
if (!val) {
|
||||
this.$refs.tableRef.clearSelection()
|
||||
return
|
||||
}
|
||||
const lot = this.config.lots.find(v => v.id === val)
|
||||
this.tableData.map((v, index) => {
|
||||
this.$set(this.tableData[index], "lotId", val)
|
||||
this.$set(this.tableData[index], "lotName", lot.lotName)
|
||||
})
|
||||
},
|
||||
takePartInTimeChange(val) {
|
||||
const selection = this.$refs.tableRef.selection
|
||||
if (selection.length === 0) {
|
||||
this.$message.error('请选择要设置的人员')
|
||||
this.takePartInTime = null
|
||||
return
|
||||
}
|
||||
if (!val) {
|
||||
this.$refs.tableRef.clearSelection()
|
||||
return
|
||||
}
|
||||
this.tableData.map((v, index) => {
|
||||
this.$set(this.tableData[index], "takePartInTime", val)
|
||||
})
|
||||
},
|
||||
onSubmit() {
|
||||
// 检查哪几条数据填写不完整
|
||||
this.tableData.forEach((v, index) => {
|
||||
if (!v.lotId || !v.takePartInTime) {
|
||||
this.$message.error('第' + (index + 1) + '行数据填写不完整')
|
||||
return
|
||||
}
|
||||
})
|
||||
const data = this.tableData.map((v, index) => {
|
||||
return{
|
||||
lotId: v.lotId,
|
||||
takePartInTime: v.takePartInTime,
|
||||
id: v.id
|
||||
}
|
||||
})
|
||||
this.$confirm('确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async res => {
|
||||
const {
|
||||
code,
|
||||
msg
|
||||
} = await $.post("/platform/recuperation/branchUnionUserQuery/setUpParticipants", {data: JSON.stringify(data)})
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.$refs.tableRef.clearSelection()
|
||||
this.visible = false
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -109,8 +109,8 @@ layout("/layouts/platform.html"){
|
||||
>
|
||||
<template v-slot="{ row }" v-if="column.prop === 'isDisabled'">
|
||||
<el-switch
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
:active-value="false"
|
||||
:inactive-value="true"
|
||||
@change="(val)=>{lineStatusChange(row.id)}"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
@@ -189,6 +189,14 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async lineStatusChange(id) {
|
||||
const resp = await this.$axios.post(loc() + '/openClosedLine/' + id)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
async getEnumOptions(enumName) {
|
||||
const resp = await this.$axios.post("/open/common/dictEnumOptions", { name: enumName })
|
||||
return resp.data
|
||||
|
||||
+237
@@ -0,0 +1,237 @@
|
||||
const batchSelect = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="setLineTimeDialog" title="统赋出行时间段信息" width="80%">
|
||||
<el-form :model="formData" :rules="rules" label-width="0" ref="form" size="small">
|
||||
<div v-for="(row,$index) in formData.times" :key="row.id" class="panel panel-default mt20"
|
||||
style="border: none">
|
||||
<div class="panel-heading"
|
||||
style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none;display: flex;align-items: center;justify-content: space-between">
|
||||
<h3 class="panel-title">
|
||||
出行时间段
|
||||
</h3>
|
||||
</div>
|
||||
<el-row class="playPeriod">
|
||||
<el-descriptions border :column="3" class="playPeriodTable">
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
报名开始时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.signUpStartTime'"
|
||||
:rules="{required:true,message:'请选择报名开始时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择报名开始时间"
|
||||
v-model="row.signUpStartTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
报名结束时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.signUpEndTime'"
|
||||
:rules="{required:true,message:'请选择报名结束时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择报名结束时间"
|
||||
@change="doSetChangeTime($index,row.signUpEndTime)"
|
||||
v-model="row.signUpEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
变更截至时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.changeEndTime'"
|
||||
:rules="{required:true,message:'请选择变更截至时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择变更截至时间"
|
||||
v-model="row.changeEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
出行开始时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.playStartTime'"
|
||||
:rules="{required:true,message:'请选择出行开始时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择出行开始时间"
|
||||
v-model="row.playStartTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
出行结束时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.playEndTime'"
|
||||
:rules="{required:true,message:'请选择出行结束时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择出行结束时间"
|
||||
v-model="row.playEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-alert closable show-icon style="margin:10px 0"
|
||||
title="温馨提醒:变更时间应该大于报名截至时间,小于出行时间。"
|
||||
type="warning"></el-alert>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex">
|
||||
<el-button @click="setLineTimeDialog = false">取 消</el-button>
|
||||
<el-button @click="onSelect" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
|
||||
},
|
||||
data() {
|
||||
const validateGiveSignUpEndTime = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请选择报名截至时间'))
|
||||
}
|
||||
if (this.formData.signUpStartTime) {
|
||||
if (Date.parse(value) <= Date.parse(this.formData.signUpStartTime)) {
|
||||
callback(new Error('报名截至时间必须大于报名开始时间'))
|
||||
}
|
||||
}
|
||||
callback()
|
||||
}
|
||||
const validateGiveChangeEndTime = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请选择变更截至时间'))
|
||||
}
|
||||
if (this.formData.signUpEndTime) {
|
||||
if (Date.parse(value) <= Date.parse(this.formData.signUpEndTime)) {
|
||||
callback(new Error('变更截至时间必须大于报名截至时间'))
|
||||
}
|
||||
}
|
||||
callback()
|
||||
}
|
||||
const validateGivePlayEndTime = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请选择出行结束时间'))
|
||||
}
|
||||
if (this.formData.playStartTime) {
|
||||
if (Date.parse(value) <= Date.parse(this.formData.playStartTime)) {
|
||||
callback(new Error('出行结束时间必须大于出行开始时间'))
|
||||
}
|
||||
}
|
||||
callback()
|
||||
}
|
||||
return {
|
||||
setLineTimeDialog: false,
|
||||
rules: {
|
||||
signUpStartTime: [{required: false, message: '请选择报名开始时间', trigger: ['change', 'blur']}],
|
||||
signUpEndTime: [{required: false, validator: validateGiveSignUpEndTime, trigger: ['change', 'blur']}],
|
||||
changeEndTime: [{required: false, validator: validateGiveChangeEndTime, trigger: ['change', 'blur']}],
|
||||
playStartTime: [{required: false, message: '请选择出行开始时间', trigger: ['change', 'blur']}],
|
||||
playEndTime: [{required: false, validator: validateGivePlayEndTime, trigger: ['change', 'blur']}],
|
||||
},
|
||||
formData: {
|
||||
times: []
|
||||
},
|
||||
multipleSelection: [],
|
||||
year: null,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSetChangeTime(index, value){
|
||||
this.$set(this.formData.times[index], "changeEndTime", value)
|
||||
},
|
||||
async onOpen(multipleSelection, year) {
|
||||
if (!multipleSelection || multipleSelection.length === 0) {
|
||||
this.$message.warning('请在线路列表中勾选您想要统赋时间的线路');
|
||||
return
|
||||
}
|
||||
this.multipleSelection = multipleSelection
|
||||
this.year = year
|
||||
this.formData = {
|
||||
times: [{
|
||||
signUpStartTime: '',
|
||||
signUpEndTime: '',
|
||||
changeEndTime: '',
|
||||
playStartTime: '',
|
||||
playEndTime: '',
|
||||
}]
|
||||
}
|
||||
this.setLineTimeDialog = true
|
||||
},
|
||||
async onSelect() {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (!valid) return
|
||||
const confirm = await this.$confirm('请再次确认,是否为选择线路统赋时间?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const lineIds = this.multipleSelection.map(v => v.id)
|
||||
const fmtData = this.formData.times.map(v => {
|
||||
return {
|
||||
...v,
|
||||
signUpMode: this.formData.signUpMode,
|
||||
mode: GetQueryString('mode')
|
||||
}
|
||||
})
|
||||
const resp = await this.$axios.post(loc() + '/setGiveLineTimes', {
|
||||
lineIds: JSON.stringify(lineIds),
|
||||
lineUnionSelects: JSON.stringify(fmtData),
|
||||
year: this.year
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.setLineTimeDialog = false
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
.panel-heading {
|
||||
border-color: #eeeff8;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
.panel-title {
|
||||
font-weight: bold;
|
||||
color: #777;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
.text-right {
|
||||
text-align: right;
|
||||
margin-top: 20px;
|
||||
}
|
||||
`
|
||||
}
|
||||
+312
@@ -0,0 +1,312 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.playPeriod .el-form-item {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
.el-button--text {
|
||||
padding: 0 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
@change="doSearch"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="线路:">
|
||||
<el-select @change="doSearch"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
placeholder="请选择线路"
|
||||
v-model="pageForm.travelAgencyId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.travelAgencyName"
|
||||
:value="item.id"
|
||||
v-for="item in travelAgencyOptions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="线路类型:">
|
||||
<el-select v-model="pageForm.regionalNature" placeholder="请选择线路类型" filterable clearable
|
||||
@change="doSearch" :disabled="pageForm.mode == 1">
|
||||
<el-option v-for="item in regionalNatureList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="线路名称:">
|
||||
<el-input @keyup.enter.native="doSearch" clearable clearable
|
||||
placeholder="请输入线路名称"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.keywords">
|
||||
</el-input>
|
||||
</search-item>
|
||||
<search-item v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])" label="所属工会:">
|
||||
<el-select @change="doSearch" v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable>
|
||||
<el-option v-for="item in unionList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="时间标段:">
|
||||
<el-select @change="doSearch" clearable filterable
|
||||
style="width: 100%" placeholder="请选择时间标段"
|
||||
v-model="pageForm.lotId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id"
|
||||
v-for="item in lotList"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="线路列表(温馨提示:如查询条件的年度为空时,已选择默认查询当年选择的线路)">
|
||||
<el-button @click="showGiveTimes" type="primary"
|
||||
size="small" style="margin-right: 10px">
|
||||
一键统赋时间
|
||||
</el-button>
|
||||
<el-radio-group @change="doSearch" size="small" v-model="pageForm.selectStatus">
|
||||
<el-radio-button :label="1">已选择</el-radio-button>
|
||||
<el-radio-button :label="-1">可选择</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" :size="tableSize" ref="table"
|
||||
@selection-change="handleSelectionChange" row-key="id">
|
||||
<el-table-column type="selection" reserve-selection width="55"
|
||||
:selectable="(row)=>{return row.isDisabled==true || !(row.usId==null || row.usId == '')}"></el-table-column>
|
||||
<el-table-column label="序号" type="index" :index="indexMethod" width="60"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:key="column.prop"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="column.prop!=='playTime'"
|
||||
v-if="pageForm.mode != 2 || (pageForm.mode == 2 && column.prop !== 'isOpen')"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template v-slot="{row:{signUpMode}}" v-if="column.prop==='signUpMode'">
|
||||
{{ signUpModeList.find(v => v.value === signUpMode)?.label || '' }}
|
||||
</template>
|
||||
<template v-slot="{row:{createMode}}" v-else-if="column.prop==='createMode'">
|
||||
{{ createModeList.find(v => v.value === createMode)?.label || '' }}
|
||||
</template>
|
||||
<template v-slot="{ row }" v-else-if="column.prop==='belongUnionName'">
|
||||
{{ pageForm.mode == 2 && pageForm.selectStatus == 1 ? '校工会' : row.belongUnionName }}
|
||||
</template>
|
||||
<template v-slot="{ row }" v-else-if="column.prop==='playTime'">
|
||||
<template v-if="row.playTimes">
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">
|
||||
<div v-for="(t,ti) in row.playTimes.split(',')" :key="t"
|
||||
:class="[ti==row.playTimes.split(',').length-1?'':'mb10']">
|
||||
{{t}}
|
||||
</div>
|
||||
</div>
|
||||
<div style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis">
|
||||
{{row.playTimes}}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-button v-else @click="openSetLineTime(row)" type="text">
|
||||
选择并设置出行时间段
|
||||
</el-button>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop==='createUnionName'">
|
||||
<span v-if="!row.isSelect">
|
||||
{{row.createUnionName}}
|
||||
</span>
|
||||
<span v-else>{{row.belongUnionName}}</span>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop==='isOpen'">
|
||||
<template v-if="row.usId">
|
||||
<el-switch
|
||||
@change="doEditOpen(row)"
|
||||
v-model="row.isOpen"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949">
|
||||
</el-switch>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span>暂未选择</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{action:openViewLineInfo,value:row}">
|
||||
查看线路基本信息
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{action:openViewTimeSlot,value:row}" v-if="row.isSelect">
|
||||
查看出行时间段
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{action:openSetLineTime,value:row}" v-if="!row.isSelect">
|
||||
选择设置出行时间段
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{action:openSetLineTime,value:row}" v-if="row.isSelect">
|
||||
修改出行时间段
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{action:cancelSelect,value:row}" v-if="row.isSelect">
|
||||
取消选择
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<select-line ref="selectRef" @refresh="refresh"></select-line>
|
||||
<batch-select ref="batchSelectRef" @refresh="batchRefresh"></batch-select>
|
||||
<time-info ref="timeInfoRef" :sign-mode-list="signUpModeList"></time-info>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
<!--#include('../line/info.js'){}#-->
|
||||
<!--#include('select.js'){}#-->
|
||||
<!--#include('batchSelect.js'){}#-->
|
||||
<!--#include('timeInfo.js'){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
"info": info,
|
||||
"select-line": select,
|
||||
"batch-select": batchSelect,
|
||||
"time-info": timeInfo,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
unionList: [],
|
||||
tableColumns: [
|
||||
{label: '线路名称', prop: 'lineName', sortable: true},
|
||||
{label: '线路类型', prop: 'regionalNature', sortable: true},
|
||||
{label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'},
|
||||
{label: '出行时间', prop: 'playTime', sortable: 'custom', sortProp: 'playStartTime', width: 230},
|
||||
{label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
|
||||
{label: '组织形式', prop: 'signUpMode', sortable: true},
|
||||
{label: '选择工会', prop: 'belongUnionName', sortable: true},
|
||||
{label: '是否开放对外报名', prop: 'isOpen', sortable: true},
|
||||
],
|
||||
pageForm: {
|
||||
keywords: null,
|
||||
selectStatus: -1,
|
||||
unionId: null,
|
||||
regionalNature: '省内'
|
||||
},
|
||||
travelAgencyOptions: [],
|
||||
regionalNatureList: [{label:'全部线路',name:'provinceAll',ordinal:0,provinceIn:'provinceIn',provinceOut:'provinceOut',value:'全部'}],
|
||||
lotList: [],
|
||||
multipleSelection: [],
|
||||
createModeList: [],
|
||||
signUpModeList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async cancelSelect({applyCount, id: lineId, usUnionId: unionId}) {
|
||||
const msg = applyCount > 0 ? '已经有教工选择本线路,请确认是否取消选择本线路,一旦取消将清空报名人员!!!' : '您确定要取消吗?'
|
||||
const confirm = await this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const resp = await this.$axios.post(loc() + '/deSelect', {lineId, unionId})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
refresh() {
|
||||
this.doSearch()
|
||||
},
|
||||
batchRefresh() {
|
||||
this.$refs.table.clearSelection()
|
||||
this.doSearch()
|
||||
},
|
||||
openViewTimeSlot({id, usUnionId}) {
|
||||
this.$refs.timeInfoRef.onOpen(id, usUnionId, this.pageForm.year)
|
||||
},
|
||||
openViewLineInfo(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
openSetLineTime({id, lineName, usUnionId, signUpMode}) {
|
||||
this.$refs.selectRef.onOpen(id, lineName, usUnionId, signUpMode, this.pageForm.year)
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val
|
||||
},
|
||||
showGiveTimes() {
|
||||
this.$refs.batchSelectRef.onOpen(this.multipleSelection, this.pageForm.year)
|
||||
},
|
||||
pageData() {
|
||||
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
async getTravelAgencyOptions() {
|
||||
const {data} = await this.$axios.post(loc() + '/getTravelAgencyOptions')
|
||||
this.travelAgencyOptions = data
|
||||
},
|
||||
async getEnumOptions(enumName) {
|
||||
const resp = await this.$axios.post("/open/common/dictEnumOptions", { name: enumName })
|
||||
return resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.$set(this.pageForm, 'mode', Number(GetQueryString('mode')))
|
||||
if(this.pageForm.mode === 2) {
|
||||
this.$set(this.pageForm, 'regionalNature', '全部')
|
||||
}
|
||||
this.unionList = await this.$businessTool.listUnion()
|
||||
this.createModeList = await this.getEnumOptions('RecuperationLineCreateMode')
|
||||
this.signUpModeList = await this.getEnumOptions('RecuperationSignUpMode')
|
||||
this.regionalNatureList.push(...await this.getEnumOptions('RecuperationProvinceType'))
|
||||
this.travelAgencyOptions = this.getTravelAgencyOptions()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+337
@@ -0,0 +1,337 @@
|
||||
const select = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="setLineTimeDialog" title="设置出行时间段信息" width="80%">
|
||||
<el-form :model="formData" :rules="rules" label-width="0" ref="form" size="small">
|
||||
<h4>{{formData.lineName}}</h4>
|
||||
|
||||
<div v-for="(row,$index) in formData.times" :key="row.id" class="panel panel-default mt20"
|
||||
style="border: none">
|
||||
<div class="panel-heading"
|
||||
style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none;display: flex;align-items: center;justify-content: space-between">
|
||||
<h3 class="panel-title">
|
||||
时间段{{$index+1}}
|
||||
</h3>
|
||||
<el-button icon="el-icon-circle-close" circle size="mini" type="danger"
|
||||
@click="formData.times.splice($index,1)"></el-button>
|
||||
</div>
|
||||
<el-row class="playPeriod">
|
||||
<el-descriptions border :column="3" class="playPeriodTable">
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
报名开始时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.signUpStartTime'"
|
||||
:rules="{required:true,message:'请选择报名开始时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择报名开始时间"
|
||||
v-model="row.signUpStartTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
报名结束时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.signUpEndTime'"
|
||||
:rules="{required:true,message:'请选择报名结束时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择报名结束时间"
|
||||
@change="doSetChangeTime($index,row.signUpEndTime)"
|
||||
v-model="row.signUpEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
变更截至时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.changeEndTime'"
|
||||
:rules="{required:true,message:'请选择变更截至时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择变更截至时间"
|
||||
v-model="row.changeEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
出行开始时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.playStartTime'"
|
||||
:rules="{required:true,message:'请选择出行开始时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择出行开始时间"
|
||||
v-model="row.playStartTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
出行结束时间
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.playEndTime'"
|
||||
:rules="{required:true,message:'请选择出行结束时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
type="datetime"
|
||||
placeholder="请选择出行结束时间"
|
||||
v-model="row.playEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
联系人
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.contact'"
|
||||
:rules="{required:true,message:'请输入联系人',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-input placeholder="请输入联系人" clearable maxlength="10" v-model="row.contact"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">
|
||||
<span class="text-danger">*</span>
|
||||
联系方式
|
||||
</template>
|
||||
<el-form-item :prop="'times.' + $index + '.contactPhone'"
|
||||
:rules="[
|
||||
{ required: true, message: '手机号码不能为空', trigger: 'blur' },
|
||||
{ pattern: /^1[34578]\\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
|
||||
]"
|
||||
label-width="0">
|
||||
<el-input placeholder="请输入联系方式" clearable maxlength="11" v-model="row.contactPhone"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最少参与教工">
|
||||
<el-form-item :prop="'times.' + $index + '.minimumGroupSize'"
|
||||
:rules="[
|
||||
{ required: true, message: '最少参与教工不能为空', trigger: 'blur' },
|
||||
{ pattern: /^[0-9]*$/, message: '最少参与教工格式不正确', trigger: 'blur' }
|
||||
]"
|
||||
label-width="0">
|
||||
<el-input placeholder="请输入最少参与教工" clearable v-model="row.minimumGroupSize"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="交通工具">
|
||||
<el-form-item :prop="'times.' + $index + '.trafficTools'"
|
||||
:rules="{required:false,message:'请输入交通工具',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-input placeholder="请输入交通工具" clearable v-model="row.trafficTools"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="预计费用(元/人次)">
|
||||
<el-form-item :prop="'times.' + $index + '.estimatedCost'"
|
||||
:rules="{required:true,message:'请输入预计费用',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-input placeholder="请输入预计费用" clearable v-model="row.estimatedCost"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="成团人数包括家属">
|
||||
<el-form-item :prop="'times.' + $index + '.estimatedFamilyNumbers'"
|
||||
:rules="[
|
||||
{ required: false, message: '成团人数包括家属不能为空', trigger: 'blur' },
|
||||
{ pattern: /^[0-9]*$/, message: '成团人数包括家属格式不正确', trigger: 'blur' }
|
||||
]"
|
||||
label-width="0">
|
||||
<el-input clearable v-model="row.estimatedFamilyNumbers"
|
||||
placeholder="省外线路人数上限,不限制请忽略"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="是否开启">
|
||||
<el-form-item :prop="'times.' + $index + '.enable'"
|
||||
label-width="0">
|
||||
<el-switch
|
||||
v-model="row.enable"
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<el-button
|
||||
@click="formData.times.push({enable:true,minimumGroupSize:lineConfig.groupNumber,estimatedCost:lineConfig.cost})"
|
||||
size="mini" type="primary">新增出行时间
|
||||
</el-button>
|
||||
</div>
|
||||
<el-alert closable show-icon style="margin:10px 0"
|
||||
title="温馨提醒:变更时间应该大于报名截至时间,小于出行时间。"
|
||||
type="warning"></el-alert>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex">
|
||||
<el-button @click="setLineTimeDialog = false">取 消</el-button>
|
||||
<el-button @click="onSelect" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
|
||||
},
|
||||
data() {
|
||||
const validateSignUpEndTime = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请选择报名截至时间'))
|
||||
}
|
||||
if (this.formData.signUpStartTime) {
|
||||
if (Date.parse(value) <= Date.parse(this.formData.signUpStartTime)) {
|
||||
callback(new Error('报名截至时间必须大于报名开始时间'))
|
||||
}
|
||||
}
|
||||
callback()
|
||||
}
|
||||
const validateChangeEndTime = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请选择变更截至时间'))
|
||||
}
|
||||
if (this.formData.signUpEndTime) {
|
||||
if (Date.parse(value) <= Date.parse(this.formData.signUpEndTime)) {
|
||||
callback(new Error('变更截至时间必须大于报名截至时间'))
|
||||
}
|
||||
}
|
||||
callback()
|
||||
}
|
||||
const validatePlayEndTime = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请选择出行结束时间'))
|
||||
}
|
||||
if (this.formData.playStartTime) {
|
||||
if (Date.parse(value) <= Date.parse(this.formData.playStartTime)) {
|
||||
callback(new Error('出行结束时间必须大于出行开始时间'))
|
||||
}
|
||||
}
|
||||
callback()
|
||||
}
|
||||
return {
|
||||
setLineTimeDialog: false,
|
||||
rules: {
|
||||
signUpStartTime: [{required: true, message: '请选择报名开始时间', trigger: ['change', 'blur']}],
|
||||
signUpEndTime: [{required: true, validator: validateSignUpEndTime, trigger: ['change', 'blur']}],
|
||||
changeEndTime: [{required: true, validator: validateChangeEndTime, trigger: ['change', 'blur']}],
|
||||
playStartTime: [{required: true, message: '请选择出行开始时间', trigger: ['change', 'blur']}],
|
||||
playEndTime: [{required: true, validator: validatePlayEndTime, trigger: ['change', 'blur']}],
|
||||
},
|
||||
formData: {
|
||||
signUpStartTime: null,
|
||||
signUpEndTime: null,
|
||||
changeEndTime: null,
|
||||
playStartTime: null,
|
||||
playEndTime: null,
|
||||
id: null,
|
||||
lineId: null,
|
||||
times: []
|
||||
},
|
||||
lineConfig: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSetChangeTime(index, value){
|
||||
this.$set(this.formData.times[index], "changeEndTime", value)
|
||||
},
|
||||
async getLineConfig(lineId) {
|
||||
const {data} = await this.$axios.post(loc() + '/getLineConfig/' + lineId)
|
||||
this.lineConfig = data
|
||||
},
|
||||
async onOpen(id, lineName, usUnionId, signUpMode, year) {
|
||||
await this.getLineConfig(id)
|
||||
const resp = await this.$axios.post(loc() + '/selectLineInfo', {
|
||||
lineId: id,
|
||||
unionId: usUnionId,
|
||||
mode: GetQueryString('mode'),
|
||||
year: year
|
||||
})
|
||||
if (resp.code === 0 && resp.data) {
|
||||
this.formData = {
|
||||
times: []
|
||||
}
|
||||
if (resp.data && resp.data.length > 0) {
|
||||
this.$set(this.formData, 'times', resp.data)
|
||||
} else {
|
||||
this.formData.times.push({
|
||||
enable: true,
|
||||
minimumGroupSize: this.lineConfig.groupNumber,
|
||||
estimatedCost: this.lineConfig.cost
|
||||
})
|
||||
}
|
||||
this.formData.lineId = id
|
||||
this.formData.signUpMode = signUpMode
|
||||
this.$set(this.formData, 'lineName', lineName)
|
||||
this.setLineTimeDialog = true
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
async onSelect() {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (!valid) return
|
||||
const confirm = await this.$confirm('请再次确认,是否选择此线路为疗休养线路?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const fmtData = this.formData.times.map(v => {
|
||||
return {
|
||||
...v,
|
||||
lineId: this.formData.lineId,
|
||||
signUpMode: this.formData.signUpMode,
|
||||
mode: GetQueryString('mode')
|
||||
}
|
||||
})
|
||||
const resp = await this.$axios.post(loc() + '/selectLineTimes', {lineSelects: JSON.stringify(fmtData)})
|
||||
if (resp.code === 0) {
|
||||
this.setLineTimeDialog = false
|
||||
this.$emit('refresh')
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
.panel-heading {
|
||||
border-color: #eeeff8;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
.panel-title {
|
||||
font-weight: bold;
|
||||
color: #777;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
.text-right {
|
||||
text-align: right;
|
||||
margin-top: 20px;
|
||||
}
|
||||
`
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
const timeInfo = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="timeLotsDialogVisible" title="查看出行时间段信息" width="80%">
|
||||
<div v-for="(row,$index) in timeLots" :key="row.id" class="panel panel-default mt20" style="border: none">
|
||||
<div class="panel-heading"
|
||||
style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none;display: flex;align-items: center;justify-content: space-between">
|
||||
<h3 class="panel-title">
|
||||
时间段{{$index+1}}
|
||||
</h3>
|
||||
</div>
|
||||
<el-row class="playPeriod">
|
||||
<el-descriptions border :column="3" class="playPeriodTable">
|
||||
<el-descriptions-item label="报名开始时间">
|
||||
{{row.signUpStartTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="报名结束时间">
|
||||
{{row.signUpEndTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="变更截至时间">
|
||||
{{row.changeEndTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出行开始时间">
|
||||
{{row.playStartTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出行结束时间">
|
||||
{{row.playEndTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人">
|
||||
{{row.contact}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">
|
||||
{{row.contactPhone}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最少参与教工">
|
||||
{{row.minimumGroupSize}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="交通工具">
|
||||
{{row.trafficTools}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="预计费用(元/人次)">
|
||||
{{row.estimatedCost}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="成团人数包括家属">
|
||||
{{row.estimatedFamilyNumbers}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="是否开启">
|
||||
<el-switch
|
||||
disabled
|
||||
v-model="row.enable"
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949">
|
||||
</el-switch>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="组织形式">
|
||||
{{ signModeList.find(v => v.value === row.signUpMode)?.label || '' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
signModeList: {
|
||||
type: Array,
|
||||
required: false
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
timeLotsDialogVisible: false,
|
||||
timeLots: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id, usUnionId, year) {
|
||||
const resp = await this.$axios.post(loc() + '/selectLineInfo', {
|
||||
lineId: id,
|
||||
unionId: usUnionId,
|
||||
mode: GetQueryString('mode'),
|
||||
year: year
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.timeLots = resp.data
|
||||
this.timeLotsDialogVisible = true
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
.panel-heading {
|
||||
border-color: #eeeff8;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
.panel-title {
|
||||
font-weight: bold;
|
||||
color: #777;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
.text-right {
|
||||
text-align: right;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.el-dialog__body {
|
||||
padding-top: 0;
|
||||
}
|
||||
`
|
||||
}
|
||||
+193
@@ -0,0 +1,193 @@
|
||||
const editForm = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-dialog title="编辑" :visible.sync="visible" top="50px">
|
||||
<el-form :model="formData" label-width="120px" :formRules="formRules" ref="formRef"
|
||||
style="margin-right: 40px">
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="loginName" label="工号">
|
||||
<el-input v-model="formData.loginName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="userName" label="姓名">
|
||||
<el-input v-model="formData.userName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="userName" label="手机号">
|
||||
<el-input v-model="formData.mobile" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="userName" label="身份证号">
|
||||
<el-input v-model="formData.idCard" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="unionName" label="工会">
|
||||
<el-input v-model="formData.unionName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12">
|
||||
<el-form-item prop="unitName" label="单位">
|
||||
<el-input v-model="formData.unitName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="prop" :label="labelName">
|
||||
<template v-if="config.familyInfo == 2">
|
||||
<el-collapse v-model="activeNames">
|
||||
<el-collapse-item title="点击可展开详细信息" name="1">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="formData.companionList">
|
||||
<el-table-column label="姓名" prop="userName"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column label="身份证号" prop="idCard"></el-table-column>
|
||||
<el-table-column label="年龄" prop="age"></el-table-column>
|
||||
<el-table-column label="床型" prop="bedType">
|
||||
<template v-slot="{row}">
|
||||
{{ row.bedInfo.bedType }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="床位" prop="bedNum">
|
||||
<template v-slot="{row}">
|
||||
{{ row.bedInfo.bedNum }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="意向拼床人" prop="otherSleepUser">
|
||||
<template v-slot="{row}">
|
||||
{{ row.bedInfo.otherSleepUser ?
|
||||
row.bedInfo.otherSleepUser : '暂无' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关系" prop="relation"></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input v-model="formData.bedType" readonly></el-input>
|
||||
</template>
|
||||
</el-form-item>
|
||||
<el-form-item prop="travelLine" :label="lineLabelName">
|
||||
<el-select v-model="formData.takePartInLineId" filterable clearable
|
||||
placeholder="请选择线路"
|
||||
@change="validateLine"
|
||||
style="width: 100%">
|
||||
<el-option v-for="item in unionSelectLines"
|
||||
:key="item.id"
|
||||
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '(' + item.playStartTime + '至' + item.playEndTime + ')' + '(' + item.signUpMode + ')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item prop="specificTime" label="出行时间" v-if="pageForm.state==='3'">-->
|
||||
<!-- <el-select v-model="formData.specificTime" filterable clearable-->
|
||||
<!-- placeholder="请选择出行时间"-->
|
||||
<!-- style="width: 100%">-->
|
||||
<!-- <el-option v-for="item in editSpecificTimes"-->
|
||||
<!-- :key="item"-->
|
||||
<!-- :label="item"-->
|
||||
<!-- :value="item">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="visible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="onSubmit">确 定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
year: null,
|
||||
config: {},
|
||||
formData: {},
|
||||
formRules: {},
|
||||
labelName: null,
|
||||
lineLabelName: '线路',
|
||||
unionSelectLines: [],
|
||||
activeNames: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id, year) {
|
||||
this.year = year
|
||||
this.visible = true
|
||||
await this.getUnionSelectLine()
|
||||
await this.getModifyConfig()
|
||||
const {code, msg, data} = await this.$axios.get("/platform/recuperation/schoolUnionUserQuery/findOne", {id})
|
||||
if (code === 0) {
|
||||
this.formData = data
|
||||
if (this.config.familyInfo === 2) {
|
||||
this.labelName = "家属信息"
|
||||
} else {
|
||||
this.editFormData.bedType = data.familyNumber
|
||||
this.labelName = "家属数量"
|
||||
}
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
},
|
||||
async getModifyConfig() {
|
||||
const {code, data, msg} = await this.$axios.post('/platform/recuperation/config/fetchOne')
|
||||
if (code === 0) {
|
||||
this.config = data
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
},
|
||||
async getUnionSelectLine() {
|
||||
const resp = await this.$axios.post('/platform/recuperation/user/query/getUnionSelectLine', {
|
||||
year: this.year,
|
||||
signUpMode: 1,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.unionSelectLines = resp.data
|
||||
}
|
||||
},
|
||||
async validateLine() {
|
||||
const resp = await this.$axios.post('/platform/recuperation/line/enroll/validSignUpInfo'
|
||||
, {enroll: JSON.stringify(this.editFormData)})
|
||||
if (resp.code !== 0) {
|
||||
this.$message.warning(resp.msg)
|
||||
this.formData.takePartInLineId = ''
|
||||
}
|
||||
},
|
||||
onSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm('您确定要修改报名信息吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
if (!this.formData.takePartInLineId && !this.formData.takePartInBaseManagementId) {
|
||||
this.$message.warning('请选择线路')
|
||||
return
|
||||
}
|
||||
const {code,msg} = await this.$axios.post('/platform/recuperation/user/query/doEdit', this.formData)
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.visible = false
|
||||
this.$emit('refresh')
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
}).catch()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
+375
@@ -0,0 +1,375 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.filter-container {
|
||||
margin-bottom: 10px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.filter-container .el-form {
|
||||
padding: 10px 15px;
|
||||
}
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
margin-bottom: 22px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.form-row .el-form-item {
|
||||
flex: 1;
|
||||
min-width: 240px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.flex-grow-1 {
|
||||
flex: 1;
|
||||
}
|
||||
.route-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.route-line-title {
|
||||
width: 90px;
|
||||
text-align: right;
|
||||
padding-right: 12px;
|
||||
color: #606266;
|
||||
font-size: 14px;
|
||||
line-height: 40px;
|
||||
}
|
||||
.route-line-content {
|
||||
flex: 1;
|
||||
}
|
||||
.route-radio-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
.route-radio-group .el-radio {
|
||||
margin-right: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.button-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding-top: 15px;
|
||||
border-top: 1px dashed #ebeef5;
|
||||
}
|
||||
.button-container .el-button {
|
||||
padding-left: 25px;
|
||||
padding-right: 25px;
|
||||
margin: 0 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never" class="filter-container">
|
||||
<el-form :model="pageForm" ref="pageFormRef" label-width="90px" size="medium">
|
||||
<div class="form-row">
|
||||
<el-form-item label="年度">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
placeholder="选择年度"
|
||||
value-format="yyyy"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名">
|
||||
<el-input v-model="pageForm.userName" placeholder="请输入姓名" clearable
|
||||
prefix-icon="el-icon-user"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="工号">
|
||||
<el-input v-model="pageForm.loginName" placeholder="请输入工号" clearable
|
||||
prefix-icon="el-icon-postcard"></el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<el-form-item label="分工会">
|
||||
<el-select v-model="pageForm.unionId"
|
||||
@change="doSearch"
|
||||
placeholder="请选择所属工会"
|
||||
filterable
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionOptions"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="route-line">
|
||||
<div class="route-line-title">区域</div>
|
||||
<div class="route-line-content">
|
||||
<el-radio-group @change="doSearch"
|
||||
size="small"
|
||||
v-model="pageForm.regionalNature">
|
||||
<el-radio label="" border>全部</el-radio>
|
||||
<el-radio label="省内" border>省内</el-radio>
|
||||
<el-radio label="省外" border>省外</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<el-form-item label="线路选择">
|
||||
<el-select v-model="pageForm.takePartInLineId" placeholder="请选择线路" clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in takePartInLines"
|
||||
:key="item.takePartInLineId"
|
||||
:label="item.lineName+'('+item.unionName+')'"
|
||||
:value="item.takePartInLineId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="标段">
|
||||
<el-select v-model="pageForm.lotId" placeholder="请选择标段" clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in config.lots"
|
||||
:key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item class="flex-grow-1"></el-form-item>
|
||||
</div>
|
||||
<div class="button-container">
|
||||
<el-button type="primary" icon="el-icon-search" round @click="doSearch">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" round @click="resetQuery">重置</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="人员列表" ref="table_tool">
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary" @click="noSignExport">
|
||||
导出未报名人员
|
||||
</el-button>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary" @click="doExport">
|
||||
导出
|
||||
</el-button>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary"
|
||||
@click="openSetUpPart"
|
||||
>设置参加人员
|
||||
</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" row-key="id" style="width: 100%" ref="tableRef">
|
||||
<el-table-column reserve-selection type="selection" width="55"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" type="index" label="序号" :index="indexMethod"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:key="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-slot="{row}" v-if="column.prop=='isFamily'">
|
||||
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
|
||||
{{row.isFamily?'携带':'未携带'}}({{row.isFamily}})
|
||||
</el-link>
|
||||
<el-link v-else type="primary">
|
||||
{{row.familyNumber?'携带':'未携带'}}({{row.familyNumber}})
|
||||
</el-link>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='times'">
|
||||
<div v-if="row.playStartTime">{{row.playStartTime}}</div>
|
||||
<div v-else>{{row.playStartTime1}}</div>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='isTakePartIn'">
|
||||
{{row.isTakePartIn?'已参加':'未参加'}}
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='stateId'">
|
||||
<span v-if="row.stateId">
|
||||
|
||||
</span>
|
||||
<sapn v-else style="color: #67C23A">暂无</sapn>
|
||||
</template>
|
||||
<template v-slot="{row}" v-else-if="column.prop=='lineOrMaName'">
|
||||
{{row.lineName?row.lineName:row.baseName?row.baseName:row.travelAgencyName}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="pageForm.state=='1'||pageForm.state=='3'" align="center"
|
||||
prop="lotName"
|
||||
show-overflow-tooltip
|
||||
header-align="center"
|
||||
label="标段"
|
||||
sortable>
|
||||
<template v-slot="{row}">
|
||||
{{row.lotName}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="250px">
|
||||
<template v-slot="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="onDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="查看报名信息" :visible.sync="viewVisible" top="50px">
|
||||
<enroll-info ref="viewEnrollInfoRef"></enroll-info>
|
||||
</el-dialog>
|
||||
|
||||
<set-up-part ref="setUpRef"></set-up-part>
|
||||
|
||||
<edit-form ref="editRef" @refresh="doSearch"></edit-form>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include('setUpPart.js'){}#-->
|
||||
<!--#include('editForm.js'){}#-->
|
||||
<!--#include('../line/info.js'){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'line-info': info,
|
||||
'set-up-part': setUpPart,
|
||||
'edit-form': editForm
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: new Date().getFullYear().toString(),
|
||||
loginName: '',
|
||||
userName: '',
|
||||
takePartInLineId: '',
|
||||
unionId: '',
|
||||
signUpMode: 1,
|
||||
lotId: '',
|
||||
regionalNature: ''
|
||||
},
|
||||
takePartInLines: [],
|
||||
tableColumns: [
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
{prop: 'unionName', label: '所属工会', sortable: true},
|
||||
{prop: 'lineOrMaName', label: '线路'},
|
||||
{prop: 'times', label: '出行时间'},
|
||||
{prop: 'isFamily', label: '是否携带家属'},
|
||||
{prop: 'isTakePartIn', label: '是否参加'}
|
||||
],
|
||||
viewVisible: false,
|
||||
unionOptions: [],
|
||||
config: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
resetQuery() {
|
||||
this.pageForm = {
|
||||
year: new Date().getFullYear().toString(),
|
||||
loginName: '',
|
||||
userName: '',
|
||||
takePartInLineId: '',
|
||||
unionId: '',
|
||||
signUpMode: 1,
|
||||
lotId: '',
|
||||
regionalNature: '',
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.viewVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.viewEnrollInfoRef.openView(row.id)
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
this.$refs.editRef.onOpen(row.id)
|
||||
},
|
||||
onDelete(row) {
|
||||
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的信息吗?", '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
dangerouslyUseHTMLString: true,
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const {code, msg} = await this.$axios.post('/platform/recuperation/schoolUnionUserQuery/deleteMyEnrollInfoById', {
|
||||
id: row.id
|
||||
})
|
||||
if (code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(msg)
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
noSignExport() {
|
||||
window.open('/platform/recuperation/schoolUnionUserQuery/noSignExport')
|
||||
},
|
||||
doExport() {
|
||||
const {year, userName, loginName, unionId, signUpMode, regionalNature, takePartInLineId, lotId} = this.pageForm
|
||||
window.open('/platform/recuperation/schoolUnionUserQuery/exportXlsx?year=' +
|
||||
year
|
||||
+ '&userName=' + userName
|
||||
+ '&loginName=' + loginName
|
||||
+ '&unionId=' + unionId
|
||||
+ '&signUpMode=' + signUpMode
|
||||
+ '®ionalNature=' + regionalNature
|
||||
+ '&takePartInLineId=' + takePartInLineId
|
||||
+ '&lotId=' + lotId)
|
||||
},
|
||||
openSetUpPart() {
|
||||
const selection = this.$refs.tableRef.selection
|
||||
console.log(selection)
|
||||
if (selection.length === 0) {
|
||||
this.$message.error('请选择要设置的人员')
|
||||
return
|
||||
}
|
||||
this.$refs.setUpRef.onOpen(selection)
|
||||
},
|
||||
getConfig() {
|
||||
this.$axios.post('/platform/recuperation/config/fetchOne').then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.config = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getLines() {
|
||||
this.$axios.post('/platform/recuperation/schoolUnionUserQuery/listLine', {
|
||||
year: this.pageForm.year,
|
||||
unionId: this.pageForm.unionId,
|
||||
signUpMode: this.pageForm.signUpMode,
|
||||
regionalNature: this.pageForm.regionalNature
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.takePartInLines = res.data
|
||||
} else {
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch(){
|
||||
this.getLines()
|
||||
this.tableKey = new Date().getTime()
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.doSearch()
|
||||
this.getConfig()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
const setUpPart = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-dialog :visible.sync="visible" title="设置参加人员" top="50px">
|
||||
<el-row class="text-primary p20">
|
||||
选择标段/参加时间(设置前请先勾选需要设置的用户)
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" style="column-gap: 10px">
|
||||
<el-select v-model="lotId" filterable clearable
|
||||
placeholder="请选择标段"
|
||||
style="width: 100%"
|
||||
@change="lotChange">
|
||||
<el-option v-for="item in config.lots"
|
||||
:key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-model="takePartInTime"
|
||||
type="date"
|
||||
style="width: 100%"
|
||||
@change="takePartInTimeChange"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择参加时间">
|
||||
</el-date-picker>
|
||||
</el-row>
|
||||
|
||||
<el-row class="mt10">
|
||||
<el-table :data="tableData" border ref="tableRef" row-key="id">
|
||||
<el-table-column type="selection" width="55"></el-table-column>
|
||||
<el-table-column type="index" label="序号" width="80"></el-table-column>
|
||||
<el-table-column prop="loginName" label="一卡通号"></el-table-column>
|
||||
<el-table-column prop="userName" label="姓名"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="unionName" label="工会"></el-table-column>
|
||||
<el-table-column prop="signingUptime" label="报名时间"></el-table-column>
|
||||
<el-table-column prop="takePartInTime" label="参加时间"></el-table-column>
|
||||
<el-table-column prop="lotName" label="标段"></el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="onSubmit">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
config: {},
|
||||
tableData: [],
|
||||
lotId: null,
|
||||
takePartInTime: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onOpen(selection) {
|
||||
this.visible = true
|
||||
this.tableData = JSON.parse(JSON.stringify(selection))
|
||||
this.getModifyConfig()
|
||||
},
|
||||
async getModifyConfig() {
|
||||
const res = await this.$axios.post('/platform/recuperation/config/fetchOne')
|
||||
if (res.code === 0) {
|
||||
this.config = res.data
|
||||
}
|
||||
},
|
||||
// 标段改变
|
||||
lotChange(val) {
|
||||
const selection = this.$refs.tableRef.selection
|
||||
if (selection.length === 0) {
|
||||
this.$message.error('请选择要设置的人员')
|
||||
this.lotId = null
|
||||
return
|
||||
}
|
||||
if (!val) {
|
||||
this.$refs.tableRef.clearSelection()
|
||||
return
|
||||
}
|
||||
const lot = this.config.lots.find(v => v.id === val)
|
||||
this.tableData.map((v, index) => {
|
||||
this.$set(this.tableData[index], "lotId", val)
|
||||
this.$set(this.tableData[index], "lotName", lot.lotName)
|
||||
})
|
||||
},
|
||||
// 参加时间改变
|
||||
takePartInTimeChange(val) {
|
||||
const selection = this.$refs.tableRef.selection
|
||||
if (selection.length === 0) {
|
||||
this.$message.error('请选择要设置的人员')
|
||||
this.takePartInTime = null
|
||||
return
|
||||
}
|
||||
if (!val) {
|
||||
this.$refs.tableRef.clearSelection()
|
||||
return
|
||||
}
|
||||
this.tableData.map((v, index) => {
|
||||
this.$set(this.tableData[index], "takePartInTime", val)
|
||||
})
|
||||
},
|
||||
// 确定提交
|
||||
onSubmit() {
|
||||
// 检查哪几条数据填写不完整
|
||||
this.tableData.forEach((v, index) => {
|
||||
if (!v.lotId || !v.takePartInTime) {
|
||||
this.$message.error('第' + (index + 1) + '行数据填写不完整')
|
||||
return
|
||||
}
|
||||
})
|
||||
const data = this.tableData.map((v, index) => {
|
||||
return{
|
||||
lotId: v.lotId,
|
||||
takePartInTime: v.takePartInTime,
|
||||
id: v.id
|
||||
}
|
||||
})
|
||||
this.$confirm('确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async res => {
|
||||
const {
|
||||
code,
|
||||
msg
|
||||
} = await this.$axios.post("/platform/recuperation/schoolUnionUserQuery/setUpParticipants", {data: JSON.stringify(data)})
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.$refs.tableRef.clearSelection()
|
||||
this.visible = false
|
||||
} else {
|
||||
this.$message.error(msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
+187
@@ -0,0 +1,187 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度:">
|
||||
<el-date-picker
|
||||
placeholder="请选择年度"
|
||||
type="year"
|
||||
@change="yearChange"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="线路:">
|
||||
<el-select @change="doSearch" filterable
|
||||
placeholder="请选择线路"
|
||||
style="width: 100%;" clearable
|
||||
v-model="pageForm.lineId">
|
||||
<el-option :label="item.lineName + '(' + item.unionName + ')'" :value="item.id"
|
||||
:key="value.id"
|
||||
v-for="item in lineList"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="关键字:">
|
||||
<el-input placeholder="请输入姓名或工号查询" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会:">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable @change="doSearch">
|
||||
<el-option v-for="item in unionList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位:">
|
||||
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位" filterable clearable @change="doSearch">
|
||||
<el-option v-for="item in unitList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="评分:">
|
||||
<el-select clearable filterable placeholder="请选择评分"
|
||||
style="width: 100%" @change="doSearch"
|
||||
v-model="pageForm.evaluateScore">
|
||||
<el-option
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code"
|
||||
v-for="item in evaluateScores">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="评价名单">
|
||||
<el-button type="primary" size="small" @click="exportEvaluate">
|
||||
<i class="el-icon-download"></i>
|
||||
导出名单
|
||||
</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" :size="tableSize">
|
||||
<el-table-column label="序号" type="index" :index="indexMethod" width="60"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:key="column.prop"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="evaluateDialogVisible"
|
||||
title="评分内容"
|
||||
width="30%">
|
||||
<el-form :model="formData" label-width="60px" ref="form">
|
||||
<el-form-item :rules="[{ required: true, message: ''}]" label="评分">
|
||||
<span>{{viewData.evaluateScore}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="评价">
|
||||
<span>{{viewData.evaluateText}}</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="evaluateDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
unionList: [],
|
||||
unitList: [],
|
||||
lineList: [],
|
||||
evaluateDialogVisible: false,
|
||||
tableColumns: [
|
||||
{prop: 'lineName', label: '线路'},
|
||||
{prop: 'playStartTime', label: '出行时间'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'},
|
||||
{prop: 'evaluateScore', label: '评分', sortable: true},
|
||||
{prop: 'evaluateText', label: '评价'},
|
||||
],
|
||||
viewData: {},
|
||||
evaluateScores: [
|
||||
{name: "满意", code: "满意"},
|
||||
{name: "一般", code: "一般"},
|
||||
{name: "不满意", code: "不满意"},
|
||||
],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear().toString(),
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
exportEvaluate() {
|
||||
this.$downLoad(loc() + '/exportEvaluate', this.pageForm)
|
||||
},
|
||||
onView(row) {
|
||||
this.viewData = {
|
||||
lineId: row.id,
|
||||
evaluateText: row.evaluateText,
|
||||
evaluateScore: row.evaluateScore,
|
||||
}
|
||||
this.evaluateDialogVisible = true
|
||||
},
|
||||
async getLineList() {
|
||||
const resp = await this.$axios.post(loc() + '/lineList', {year: this.pageForm.year})
|
||||
this.lineList = resp.data
|
||||
},
|
||||
async yearChange() {
|
||||
this.$set(this.pageForm, "lineId", null)
|
||||
await this.getLineList()
|
||||
this.doSearch()
|
||||
},
|
||||
pageData() {
|
||||
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unionList = await this.$businessTool.listUnion()
|
||||
this.unitList = await this.$businessTool.listUnit()
|
||||
await this.getLineList()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user