This commit is contained in:
@jyuhsin
2025-05-28 14:27:32 +08:00
parent 0b5e7a173c
commit afc1508d55
84 changed files with 8154 additions and 2791 deletions
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.constant; package io.v.nutz.zhgh.therapyRecuperation.constant;
import io.v.nutz.base.annontation.SelectEnum; import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.constant; package io.v.nutz.zhgh.therapyRecuperation.constant;
import io.v.nutz.base.annontation.SelectEnum; import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.constant; package io.v.nutz.zhgh.therapyRecuperation.constant;
import io.v.nutz.base.annontation.SelectEnum; import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -14,18 +13,20 @@ import lombok.Getter;
**/ **/
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
@SelectEnum @io.v.nutz.base.annontation.SelectEnum
public enum TheRapyRecuperationSignUpMode { public enum TheRapyRecuperationSignUpMode {
/**
* 分工会模式
*/
UNION(1, "分工会组织", new String[]{"H04", "A06", "sysadmin"}),
/** /**
* 自由模式 * 自由模式
*/ */
FREE(2, "校工会组织", new String[]{"A06", "sysadmin"}); FREE(2, "校工会组织", new String[]{"SchoolUnionAdmin", "sysadmin"}),
/**
* 分工会模式
*/
UNION(1, "分工会组织", new String[]{"H04", "SchoolUnionAdmin", "sysadmin"}),
PERSONAL(3, "个人组织", new String[]{"H01", "H04", "SchoolUnionAdmin", "sysadmin"});
private final int value; private final int value;
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.constant; package io.v.nutz.zhgh.therapyRecuperation.constant;
import io.v.nutz.base.annontation.SelectEnum; import io.v.nutz.base.annontation.SelectEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -32,7 +31,7 @@ public enum TheRapyRecuperationType {
/** /**
* 省内旅行社 * 省内旅行社
*/ */
provinceInTravelAgency("自由组团", 2, TheRapyRecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/therapyRecuperation/lxs.png"), provinceInTravelAgency("旅行社", 2, TheRapyRecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/therapyRecuperation/lxs.png"),
/** /**
* 酒店 * 酒店
@@ -0,0 +1,413 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.analysis;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.result.Result;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.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;
/**
* @version 1.0
* @Author zzr
* @nameTheRapyRecuperationAnnualAnalysisController`
* @Date 2025/2/10 9:16
* @注释
*/
@IocBean
@At("/platform/theRapyRecuperation/annualAnalysis")
@Ok("json:full")
public class TheRapyRecuperationAnnualAnalysisController {
@Inject
private Dao dao;
@Inject
private TheRapyRecuperationLineService lineService;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/analysis/annualAnalysis.html")
@RequiresPermissions("theRapyRecuperation.annualAnalysis")
public void index() {
}
/**
* 获取年度出行人数、线路数、省内、省外、校工会组织线路数、校省内、校省外线路数
* @param year
* @param lineType
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.annualAnalysis")
public Object getNumData(@Param(value = "year", required = false) Integer year,
@Param(value = "lineType", required = false) String lineType){
// 对于嘉兴来说,这一坨吊用没有,直接去报名记录里边找线路
// Cnd cnd = Cnd.NEW();
// cnd.and("delFlag", "=", false);
// cnd.and("YEAR(selectTime)", "=", year);
// // 本年选择的所有线路
// List<TheRapyRecuperationLineUnionSelect> selectLineList = dao.query(TheRapyRecuperationLineUnionSelect.class, cnd);
// 获取选择线路表的id,后面发现了,报名表里有线路id不在线路表的情况,这类人员要排除掉
Sql selectIdSql = Sqls.create("select id from the_rapy_recuperation_line_union_select");
selectIdSql.setCallback(Sqls.callback.strList());
dao.execute(selectIdSql);
List<String> selectIdList = selectIdSql.getList(String.class);
// 获取今年报名的所有人数,还要确保报名线路是属于上面选择线路的id
Sql sql = Sqls.create("""
SELECT
takePartInLineId
FROM
`the_rapy_recuperation_enroll`
WHERE
YEAR(signingUptime) = @thisYear
AND isNormal = 1
AND stateId = @stateId
AND takePartInLineId in (@selectIdList)
""");
sql.setParam("thisYear", year);
sql.setParam("stateId", TheRapyRecuperationState.PASS);
sql.setParam("selectIdList", 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<TheRapyRecuperationLineUnionSelect> selectLineList = dao.query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("id", "in", takePartInLineIdList));
// 找出选择的线路详情,用于区分省内还是省外
List<String> lineIdList = selectLineList.stream().map(TheRapyRecuperationLineUnionSelect::getLineId).distinct().collect(Collectors.toList());
List<TheRapyRecuperationLine> lineList = dao.query(TheRapyRecuperationLine.class, Cnd.where("id", "in", lineIdList));
// 如果不是全部,按搜索条件查询省内还是省外
if (StrUtil.isNotBlank(lineType) && !"全部".equals(lineType)) {
lineList = lineList.stream().filter(line -> line.getRegionalNature().equals(lineType)).collect(Collectors.toList());
List<String> lineTypeIdList = lineList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toList());
selectLineList = selectLineList.stream().filter(v-> lineTypeIdList.contains(v.getLineId())).collect(Collectors.toList());
}
// 省内线路
List<TheRapyRecuperationLine> inLineList = lineList.stream().filter(line -> "省内".equals(line.getRegionalNature())).collect(Collectors.toList());
Set<String> inLineIds = inLineList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toSet());
// 选择省内的线路
List<String> selectInLineIds = selectLineList.stream().filter(v -> inLineIds.contains(v.getLineId()))
.map(TheRapyRecuperationLineUnionSelect::getId).collect(Collectors.toList());
// 省外线路
List<TheRapyRecuperationLine> outLineList = lineList.stream().filter(line -> "省外".equals(line.getRegionalNature())).collect(Collectors.toList());
Set<String> outLineIds = outLineList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toSet());
// 选择省外的线路
List<String> selectOutLineIds = selectLineList.stream().filter(v -> outLineIds.contains(v.getLineId()))
.map(TheRapyRecuperationLineUnionSelect::getId).collect(Collectors.toList());
// List<TheRapyRecuperationEnroll> enrollList = dao.query(TheRapyRecuperationEnroll.class, Cnd.where("YEAR(signingUptime)", "=", year).and("isNormal", "=", true));
// List<String> enrollTakePartLineIdList = enrollList.stream().map(TheRapyRecuperationEnroll::getTakePartInLineId).collect(Collectors.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<TheRapyRecuperationLineUnionSelect> schoolSelectLineList = selectLineList.stream().filter(v -> v.getSignUpMode() == 2).collect(Collectors.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<TheRapyRecuperationLineUnionSelect> unionSelectLineList = selectLineList.stream().filter(v -> v.getSignUpMode() == 1).collect(Collectors.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().addData(nutMap);
}
/**
* 出行时间标段统计
* @param year
* @param lineType
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.annualAnalysis")
public Object getLotNum(@Param(value = "year", required = false) Integer year,
@Param(value = "lineType", required = false) String lineType){
if (year == null) {
year = DateUtil.thisYear();
}
List<TheRapyRecuperationLot> lotList = dao.query(TheRapyRecuperationLot.class, Cnd.NEW().asc("lotValue"));
Sql sql = Sqls.create("""
SELECT
enroll.*,
line.lotId AS lineLotId
FROM
the_rapy_recuperation_enroll enroll
LEFT JOIN the_rapy_recuperation_line_union_select us ON us.id = enroll.takePartInLineId
LEFT JOIN the_rapy_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", "=", TheRapyRecuperationState.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"))).collect(Collectors.toList()).size();
map.put("label", item.getLotName());
map.put("value", value);
resultMap.add(map);
});
return Result.success().addData(resultMap);
}
/**
* 出行年龄分布统计
* @param year
* @param lineType
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.annualAnalysis")
public Object getAgeNum(@Param(value = "year", required = false) Integer year,
@Param(value = "lineType", required = false) 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
the_rapy_recuperation_enroll enroll
LEFT JOIN the_rapy_recuperation_line_union_select us ON us.id = enroll.takePartInLineId
LEFT JOIN the_rapy_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", "=", TheRapyRecuperationState.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().addData(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);
}
/**
* 获取线路出行人数和年龄统计数据
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.annualAnalysis")
public Object getLineTravelAndAgeData(@Param(value = "year", required = false) Integer year,
@Param(value = "lineType", required = false) 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.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
the_rapy_recuperation_line_union_select us
LEFT JOIN the_rapy_recuperation_line line ON us.lineId = line.id
LEFT JOIN the_rapy_recuperation_enroll enroll ON enroll.takePartInLineId = us.id
LEFT JOIN the_rapy_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.toList());
// 折线图
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.toList());
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.toList());
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.toList());
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().addData(result);
}
/**
* 获取分工会出行人数和年龄统计数据
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.annualAnalysis")
public Object getLineTravelAgeData(@Param(value = "year", required = false) Integer year,
@Param(value = "lineType", required = false) String lineType){
return Result.success().addData(null);
}
}
@@ -2,17 +2,15 @@ package io.v.nutz.zhgh.therapyRecuperation.controller.audit;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit; import io.v.nutz.base.model.Audit;
import io.v.nutz.base.model.AuditState; import io.v.nutz.base.model.AuditState;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
@@ -67,18 +65,19 @@ public class TheRapyRecuperationAuditController {
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getXlByUnion(Integer state, String unionId, String regionalNature, String year, String endYear, Integer signUpMode) { public Object getXlByUnion(Integer state, String unionId, String regionalNature, String year,String endYear, Integer signUpMode) {
List<NutMap> xlByUnion = auditService.getXlByUnion(state, unionId, regionalNature, year, endYear, signUpMode); List<NutMap> xlByUnion = auditService.getXlByUnion(state, unionId, regionalNature, year,endYear, signUpMode);
return xlByUnion; return xlByUnion;
} }
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getXlByUnionAudit(String unionId, String regionalNature, String year, Integer signUpMode) { public Object getXlByUnionAudit(String unionId,String regionalNature, String year, Integer signUpMode) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
line.id, line.id,
@@ -93,20 +92,21 @@ public class TheRapyRecuperationAuditController {
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")){
cnd.andEX("ts.unionId", "=", unionId); cnd.andEX("ts.unionId", "=", unionId);
} else { } else {
cnd.and("ts.unionId", "=", vi.getUnionId()); cnd.and("ts.unionId", "=", vi.getUnionId());
} }
cnd.andEX("YEAR(ts.selectTime)", "=", year); cnd.andEX("YEAR(ts.selectTime)","=",year);
cnd.andEX("line.regionalNature", "=", regionalNature); cnd.andEX("line.regionalNature","=",regionalNature);
cnd.andEX("line.signUpMode", "=", signUpMode); cnd.andEX("line.signUpMode","=",signUpMode);
cnd.groupBy("line.id"); cnd.groupBy("line.id");
sql.setCondition(cnd); sql.setCondition(cnd);
return auditService.listMap(sql); return auditService.listMap(sql);
} }
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@@ -143,7 +143,7 @@ public class TheRapyRecuperationAuditController {
cnd.andEX("enroll.selfUnionId", "=", unionId); cnd.andEX("enroll.selfUnionId", "=", unionId);
cnd.and("enroll.takePartInLineId", "is not", null); cnd.and("enroll.takePartInLineId", "is not", null);
cnd.andEX("enroll.selfUnitId", "=", unitId); cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("lineu.lineId", "=", takePartInLineId); cnd.andEX("enroll.takePartInLineId", "=", takePartInLineId);
cnd.andEX("enroll.isNormal", "=", true); cnd.andEX("enroll.isNormal", "=", true);
cnd.andEX("lineu.signUpMode", "=", 1); cnd.andEX("lineu.signUpMode", "=", 1);
cnd.andEX("lineu.id", "=", selectId); cnd.andEX("lineu.id", "=", selectId);
@@ -157,7 +157,7 @@ public class TheRapyRecuperationAuditController {
} else if (state.equals("2")) { } else if (state.equals("2")) {
cnd.andEX("enroll.takePartInUnionId", "!=", Vi.getUnionId()); cnd.andEX("enroll.takePartInUnionId", "!=", Vi.getUnionId());
cnd.andEX("enroll.selfUnionId", "=", Vi.getUnionId()); cnd.andEX("enroll.selfUnionId", "=", Vi.getUnionId());
} else if (state.equals("3")) { } else if (state.equals("3")){
cnd.andEX("enroll.selfUnionId", "!=", Vi.getUnionId()); cnd.andEX("enroll.selfUnionId", "!=", Vi.getUnionId());
cnd.andEX("enroll.takePartInUnionId", "=", Vi.getUnionId()); cnd.andEX("enroll.takePartInUnionId", "=", Vi.getUnionId());
} }
@@ -173,14 +173,11 @@ public class TheRapyRecuperationAuditController {
((enroll.stateId = %s OR enroll.stateId=%s )AND enroll.takePartInUnionId='%s') ((enroll.stateId = %s OR enroll.stateId=%s )AND enroll.takePartInUnionId='%s')
""".formatted(TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.PASS, vi.getUnionId()))); """.formatted(TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.PASS, vi.getUnionId())));
} else { } else {
/*cnd.and(new Static(""" cnd.and(new Static("""
((( enroll.stateId = %s OR enroll.stateId = %s OR enroll.stateId = %s ) AND enroll.selfUnionId = '%s' ) ((( enroll.stateId = %s OR enroll.stateId = %s OR enroll.stateId = %s ) AND enroll.selfUnionId = '%s' )
OR OR
((enroll.stateId = %s OR enroll.stateId=%s )AND enroll.takePartInUnionId='%s')) ((enroll.stateId = %s OR enroll.stateId=%s )AND enroll.takePartInUnionId='%s'))
""".formatted(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNIT, TheRapyRecuperationState.PASS, vi.getUnionId(), TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.PASS, vi.getUnionId())));*/ """.formatted(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNIT, TheRapyRecuperationState.PASS, vi.getUnionId(), TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.PASS, vi.getUnionId())));
cnd.and(new Static("""
((enroll.stateId = %s OR enroll.stateId=%s )AND enroll.takePartInUnionId='%s')
""".formatted(TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.PASS, vi.getUnionId())));
} }
} else { } else {
cnd.and(new Static(""" cnd.and(new Static("""
@@ -226,7 +223,7 @@ public class TheRapyRecuperationAuditController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@RequiresPermissions("theRapyRecuperation.TheRapyAudit") @RequiresPermissions("theRapyRecuperation.TheRapyAudit")
public Object doAudit(String id, boolean flag, Boolean adjustment, boolean isTransferIn, String auditOpinion) { public Object doAudit(String id, boolean flag,Boolean adjustment, boolean isTransferIn, String auditOpinion) {
Trans.exec(() -> { Trans.exec(() -> {
TheRapyRecuperationEnroll enroll = auditService.dao().fetch(TheRapyRecuperationEnroll.class, id); TheRapyRecuperationEnroll enroll = auditService.dao().fetch(TheRapyRecuperationEnroll.class, id);
Audit audit = new Audit(); Audit audit = new Audit();
@@ -264,10 +261,10 @@ public class TheRapyRecuperationAuditController {
} }
auditService.updateIgnoreNull(enroll); auditService.updateIgnoreNull(enroll);
auditMsg(enroll.getStateId(), enroll.getLoginName(), adjustment, enroll.getTakePartInLineId()); auditMsg(enroll.getStateId(), enroll.getLoginName(),adjustment, enroll.getTakePartInLineId());
if (adjustment) { if (adjustment){
// enroll.setNormal(false); // enroll.setNormal(false);
auditService.dao().clear(TheRapyRecuperationEnroll.class, Cnd.where("id", "=", enroll.getId())); auditService.dao().clear(TheRapyRecuperationEnroll.class,Cnd.where("id","=",enroll.getId()));
} }
}); });
return null; return null;
@@ -322,7 +319,7 @@ public class TheRapyRecuperationAuditController {
@RequiresAuthentication @RequiresAuthentication
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.TheRapyAudit") @RequiresPermissions("theRapyRecuperation.TheRapyAudit")
public Object doOnekeyAudit(String[] ids, String auditOpinion, boolean flag, Boolean adjustment) { public Object doOnekeyAudit(String[] ids, String auditOpinion, boolean flag,Boolean adjustment) {
Audit audit = new Audit(); Audit audit = new Audit();
audit.setAuditOpinion(auditOpinion); audit.setAuditOpinion(auditOpinion);
audit.setAuditor(ShiroUtil.getUserId()); audit.setAuditor(ShiroUtil.getUserId());
@@ -346,14 +343,14 @@ public class TheRapyRecuperationAuditController {
enroll.setStateId(flag ? TheRapyRecuperationState.PASS : TheRapyRecuperationState.LINEUNITFAIL); enroll.setStateId(flag ? TheRapyRecuperationState.PASS : TheRapyRecuperationState.LINEUNITFAIL);
enroll.setJoinLineUnionAuditId(insert.getId()); enroll.setJoinLineUnionAuditId(insert.getId());
} }
if (adjustment) { if (adjustment){
// enroll.setNormal(false); // enroll.setNormal(false);
enrollIdList.add(id); enrollIdList.add(id);
} }
auditService.updateIgnoreNull(enroll); auditService.updateIgnoreNull(enroll);
auditMsg(enroll.getStateId(), enroll.getLoginName(), adjustment, enroll.getTakePartInLineId()); auditMsg(enroll.getStateId(), enroll.getLoginName(),adjustment, enroll.getTakePartInLineId());
} }
auditService.dao().clear(TheRapyRecuperationEnroll.class, Cnd.where("id", "in", enrollIdList)); auditService.dao().clear(TheRapyRecuperationEnroll.class,Cnd.where("id","in",enrollIdList));
return null; return null;
} }
@@ -364,22 +361,20 @@ public class TheRapyRecuperationAuditController {
* @param loginName * @param loginName
* @param takePartInLineId * @param takePartInLineId
*/ */
private void auditMsg(Integer stateId, String loginName, Boolean adjustment, String takePartInLineId) { private void auditMsg(Integer stateId, String loginName,Boolean adjustment, String takePartInLineId) {
Sys_user user = auditService.dao().fetch(Sys_user.class, Cnd.where("loginname", "=", loginName)); Sys_user user = auditService.dao().fetch(Sys_user.class, Cnd.where("loginname", "=", loginName));
TheRapyRecuperationLineUnionSelect unionSelect = auditService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, Cnd.where("id", "=", takePartInLineId)); TheRapyRecuperationLineUnionSelect unionSelect = auditService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, Cnd.where("id", "=", takePartInLineId));
TheRapyRecuperationLine theRapyRecuperationLine = auditService.dao().fetch(TheRapyRecuperationLine.class, Cnd.where("id", "=", unionSelect.getLineId())); TheRapyRecuperationLine theRapyRecuperationLine = auditService.dao().fetch(TheRapyRecuperationLine.class, Cnd.where("id", "=", unionSelect.getLineId()));
AuditState auditState = auditService.dao().fetch(AuditState.class, Cnd.where("stateId", "=", stateId)); AuditState auditState = auditService.dao().fetch(AuditState.class, Cnd.where("stateId", "=", stateId));
String content = "【智慧工会】%s老师您好,您报名的%s线路因报名人数不足已取消,请尽快进入智慧工会重新选择线路。" String content = "【智慧工会】%s老师您好,您报名的%s线路因报名人数不足已取消,请尽快进入智慧工会重新选择线路。"
.formatted(user.getUsername(), theRapyRecuperationLine.getLineName()); .formatted(user.getUsername(),theRapyRecuperationLine.getLineName());
List list = List.of(Map.of("type", "User", "userId", user.getLoginname(), "name", user.getUsername()));
if (stateId.equals(TheRapyRecuperationState.PASS)) { if (stateId.equals(TheRapyRecuperationState.PASS)) {
content = "【智慧工会】%s老师您好,您报名的%s线路已组团成功,请按约定出行。" content = "【智慧工会】%s老师您好,您报名的%s线路已组团成功,请按约定出行。"
.formatted(user.getUsername(), theRapyRecuperationLine.getLineName()); .formatted(user.getUsername(), theRapyRecuperationLine.getLineName());
} }
//msgApi.sendMsg(content, list, "疗休养", " IntelligenceMode", MsgApi.sendMode.normal.name()); msgApi.sendTextMsg(content,user.getLoginname());
} }
@@ -403,9 +398,8 @@ public class TheRapyRecuperationAuditController {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin,H06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,H06")) {
cnd.and("takePartInLineId", "IS NOT", null); cnd.and("takePartInLineId", "IS NOT", null);
cnd.and("takePartInLineId", "!=", ""); // cnd.and(Cnd.exps("takePartInUnionId", "=", vi.getUnionId()).or("selfUnionId", "=", vi.getUnionId()));
cnd.and(Cnd.exps("takePartInUnionId", "=", vi.getUnionId()).or("selfUnionId", "=", vi.getUnionId())); cnd.and("selfUnionId", "=", vi.getUnionId());
//cnd.and("selfUnionId", "=", vi.getUnionId());
} }
cnd.groupBy("selfUnionId"); cnd.groupBy("selfUnionId");
sql.setCondition(cnd); sql.setCondition(cnd);
@@ -423,25 +417,17 @@ public class TheRapyRecuperationAuditController {
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getApplyNumAudit(String takePartInLineId, String mode, String isAudit, Integer year, String selectId) { public Object getApplyNumAudit(String takePartInLineId,String mode, String isAudit, Integer year,String selectId) {
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
String unionId = Vi.getUnionId(); String unionId = Vi.getUnionId();
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
COUNT(1) as signUpNum, COUNT(1) as signUpNum,
$val as familyNumber IFNULL(sum(familyNumber),0) as familyNumber
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
$condition $condition
"""); """);
String val = "";
if (config.getFamilyInfo() == 1) {
val = "IFNULL(sum(familyNumber),0)";
} else {
val = "IFNULL((select count(1) from the_rapy_recuperation_enroll_companion where trreId = enroll.id),0)";
}
sql.setVar("val", val);
Sql sql2 = sql; Sql sql2 = sql;
Sql sql3 = sql; Sql sql3 = sql;
Sql sql4 = sql; Sql sql4 = sql;
@@ -453,16 +439,16 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "=", unionId) .and("selfUnionId", "=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId", "=", takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.andEX("signUpMode", "=", 1) .andEX("signUpMode", "=", 1);
.andEX("lineu.id", "=", selectId);
if (StrUtil.isNotBlank(mode)) { if (StrUtil.isNotBlank(mode)) {
cnd1.and("stateId", "=", TheRapyRecuperationState.PASS); cnd1.and("stateId", "=", TheRapyRecuperationState.PASS);
} }
if (StrUtil.isNotBlank(selectId)) cnd1.and("lineu.id","=",selectId);
sql.setCondition(cnd1); sql.setCondition(cnd1);
NutMap map = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map()); NutMap map = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map());
int count1 = Integer.parseInt(String.valueOf(map.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map.getOrDefault("familyNumber", 0))); int count1 = Integer.parseInt(String.valueOf(map.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map.getOrDefault("familyNumber",0)));
//本工会人员(其他路线) //本工会人员(其他路线)
Cnd cnd2 = Cnd.NEW(); Cnd cnd2 = Cnd.NEW();
@@ -470,16 +456,16 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "=", unionId) .and("selfUnionId", "=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId", "=", takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.andEX("signUpMode", "=", 1) .andEX("signUpMode", "=", 1);
.andEX("lineu.id", "=", selectId);
if (StrUtil.isNotBlank(mode)) { if (StrUtil.isNotBlank(mode)) {
cnd2.and("stateId", "=", TheRapyRecuperationState.PASS); cnd2.and("stateId", "=", TheRapyRecuperationState.PASS);
} }
if (StrUtil.isNotBlank(selectId)) cnd2.and("lineu.id","=",selectId);
sql2.setCondition(cnd2); sql2.setCondition(cnd2);
NutMap map2 = (NutMap) Daos.query(dao, sql2.toString(), Sqls.callback.map()); NutMap map2 = (NutMap) Daos.query(dao, sql2.toString(), Sqls.callback.map());
int count2 = Integer.parseInt(String.valueOf(map2.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map2.getOrDefault("familyNumber", 0))); int count2 = Integer.parseInt(String.valueOf(map2.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map2.getOrDefault("familyNumber",0)));
//其他工会人员(选我线路) //其他工会人员(选我线路)
Cnd cnd3 = Cnd.NEW(); Cnd cnd3 = Cnd.NEW();
@@ -487,32 +473,32 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "!=", unionId) .and("selfUnionId", "!=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId","=",takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.andEX("signUpMode", "=", 1) .andEX("signUpMode", "=", 1);
.andEX("lineu.id", "=", selectId);
if (StrUtil.isNotBlank(mode)) { if (StrUtil.isNotBlank(mode)) {
cnd3.and("stateId", "=", TheRapyRecuperationState.PASS); cnd3.and("stateId", "=", TheRapyRecuperationState.PASS);
} }
if (StrUtil.isNotBlank(selectId)) cnd3.and("lineu.id","=",selectId);
sql3.setCondition(cnd3); sql3.setCondition(cnd3);
NutMap map3 = (NutMap) Daos.query(dao, sql3.toString(), Sqls.callback.map()); NutMap map3 = (NutMap) Daos.query(dao, sql3.toString(), Sqls.callback.map());
int count3 = Integer.parseInt(String.valueOf(map3.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map3.getOrDefault("familyNumber", 0))); int count3 = Integer.parseInt(String.valueOf(map3.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map3.getOrDefault("familyNumber",0)));
//选择校工会线路人员 //选择校工会线路人员
Cnd cnd4 = Cnd.NEW(); Cnd cnd4 = Cnd.NEW();
cnd4.and("selfUnionId", "=", unionId) cnd4.and("selfUnionId", "=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId","=",takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.andEX("signUpMode", "=", 2) .andEX("signUpMode", "=", 2);
.andEX("lineu.id", "=", selectId);
if (StrUtil.isNotBlank(mode)) { if (StrUtil.isNotBlank(mode)) {
cnd4.and("stateId", "=", TheRapyRecuperationState.PASS); cnd4.and("stateId", "=", TheRapyRecuperationState.PASS);
} }
if (StrUtil.isNotBlank(selectId)) cnd4.and("lineu.id","=",selectId);
sql4.setCondition(cnd4); sql4.setCondition(cnd4);
NutMap map4 = (NutMap) Daos.query(dao, sql4.toString(), Sqls.callback.map()); NutMap map4 = (NutMap) Daos.query(dao, sql4.toString(), Sqls.callback.map());
int count4 = Integer.parseInt(String.valueOf(map4.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map4.getOrDefault("familyNumber", 0))); int count4 = Integer.parseInt(String.valueOf(map4.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map4.getOrDefault("familyNumber",0)));
return Map.of("count1", count1, "count2", count2, "count3", count3, "count4", count4); return Map.of("count1", count1, "count2", count2, "count3", count3, "count4", count4);
} }
@@ -524,13 +510,14 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "=", unionId) .and("selfUnionId", "=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId","=",takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.and("stateId", ">", TheRapyRecuperationState.UNIT) .and("stateId", ">", TheRapyRecuperationState.UNIT)
.andEX("signUpMode", "=", 1); .andEX("signUpMode", "=", 1);
if (StrUtil.isNotBlank(selectId)) cnd1.and("lineu.id","=",selectId);
sql.setCondition(cnd1); sql.setCondition(cnd1);
NutMap map = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map()); NutMap map = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map());
int count1 = Integer.parseInt(String.valueOf(map.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map.getOrDefault("familyNumber", 0))); int count1 = Integer.parseInt(String.valueOf(map.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map.getOrDefault("familyNumber",0)));
//本工会人员(其他路线) //本工会人员(其他路线)
@@ -551,13 +538,14 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "!=", unionId) .and("selfUnionId", "!=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId","=",takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.and("stateId", ">", TheRapyRecuperationState.LINEUNIT) .and("stateId", ">", TheRapyRecuperationState.LINEUNIT)
.andEX("signUpMode", "=", 1); .andEX("signUpMode", "=", 1);
if (StrUtil.isNotBlank(selectId)) cnd3.and("lineu.id","=",selectId);
sql3.setCondition(cnd3); sql3.setCondition(cnd3);
NutMap map3 = (NutMap) Daos.query(dao, sql3.toString(), Sqls.callback.map()); NutMap map3 = (NutMap) Daos.query(dao, sql3.toString(), Sqls.callback.map());
int count3 = Integer.parseInt(String.valueOf(map3.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map3.getOrDefault("familyNumber", 0))); int count3 = Integer.parseInt(String.valueOf(map3.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map3.getOrDefault("familyNumber",0)));
// return Map.of("count1", count1, "count2", count2, "count3", count3); // return Map.of("count1", count1, "count2", count2, "count3", count3);
@@ -571,13 +559,14 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "=", unionId) .and("selfUnionId", "=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId","=",takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.and("stateId", "=", TheRapyRecuperationState.UNIT) .and("stateId", "=", TheRapyRecuperationState.UNIT)
.andEX("signUpMode", "=", 1); .andEX("signUpMode", "=", 1);
if (StrUtil.isNotBlank(selectId)) cnd1.and("lineu.id","=",selectId);
sql.setCondition(cnd1); sql.setCondition(cnd1);
NutMap map = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map()); NutMap map = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map());
int count1 = Integer.parseInt(String.valueOf(map.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map.getOrDefault("familyNumber", 0))); int count1 = Integer.parseInt(String.valueOf(map.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map.getOrDefault("familyNumber",0)));
//本工会人员(其他路线) //本工会人员(其他路线)
@@ -598,13 +587,14 @@ public class TheRapyRecuperationAuditController {
.and("selfUnionId", "!=", unionId) .and("selfUnionId", "!=", unionId)
.and("isNormal", "=", true) .and("isNormal", "=", true)
.and("takePartInLineId", "is not", null) .and("takePartInLineId", "is not", null)
.andEX("lineu.lineId", "=", takePartInLineId) .andEX("takePartInLineId","=",takePartInLineId)
.andEX("YEAR(signingUptime)", "=", year) .andEX("YEAR(signingUptime)", "=", year)
.and("stateId", "=", TheRapyRecuperationState.LINEUNIT) .and("stateId", "=", TheRapyRecuperationState.LINEUNIT)
.andEX("signUpMode", "=", 1); .andEX("signUpMode", "=", 1);
if (StrUtil.isNotBlank(selectId)) cnd3.and("lineu.id","=",selectId);
sql3.setCondition(cnd3); sql3.setCondition(cnd3);
NutMap map3 = (NutMap) Daos.query(dao, sql3.toString(), Sqls.callback.map()); NutMap map3 = (NutMap) Daos.query(dao, sql3.toString(), Sqls.callback.map());
int count3 = Integer.parseInt(String.valueOf(map3.getOrDefault("signUpNum", 0))) + Integer.parseInt(String.valueOf(map3.getOrDefault("familyNumber", 0))); int count3 = Integer.parseInt(String.valueOf(map3.getOrDefault("signUpNum",0))) + Integer.parseInt(String.valueOf(map3.getOrDefault("familyNumber",0)));
// return Map.of("count1", count1, "count2", count2, "count3", count3); // return Map.of("count1", count1, "count2", count2, "count3", count3);
return Map.of("count1", count1, "count3", count3); return Map.of("count1", count1, "count3", count3);
@@ -2,19 +2,15 @@ package io.v.nutz.zhgh.therapyRecuperation.controller.audit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit; import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService; import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollCompanion;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationAuditService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationAuditService;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
@@ -28,18 +24,15 @@ import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop; import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings; import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.trans.Trans; import org.nutz.trans.Trans;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@IocBean @IocBean
@At("/platform/theRapyRecuperation/TheRapyXghAudit") @At("/platform/theRapyRecuperation/TheRapyXghAudit")
@@ -293,19 +286,37 @@ public class TheRapyRecuperationXghAuditController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@RequiresPermissions("theRapyRecuperation.TheRapyXghAudit") @RequiresPermissions("theRapyRecuperation.TheRapyXghAudit")
public Object getXghLine() { public Object getXghLine(Integer year,String regionalNature) {
// Sql sql = Sqls.create("""
// SELECT
// line.*,
// un.unionname
// FROM
// `the_rapy_recuperation_enroll` enroll
// LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
// LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
// LEFT JOIN sys_union un ON un.id = enroll.takePartInUnionId
// where line.signUpMode='2' and line.createMode='2'
// group by line.id
// """);
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
line.*, line.*,
un.unionname un.unionname
FROM FROM
`the_rapy_recuperation_enroll` enroll the_rapy_recuperation_line_union_select lineu
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN sys_union un ON un.id = enroll.takePartInUnionId LEFT JOIN sys_union un ON un.id = lineu.unionId
where line.signUpMode='2' and line.createMode='2' $condition
group by line.id
"""); """);
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(lineu.selectTime)","=",year);
if (StrUtil.isNotBlank(regionalNature) && !"全部".equals(regionalNature)){
cnd.and("line.regionalNature","=",regionalNature);
}
cnd.groupBy("line.id");
sql.setCondition(cnd);
return baseService.listMap(sql); return baseService.listMap(sql);
} }
@@ -313,48 +324,21 @@ public class TheRapyRecuperationXghAuditController {
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getLinePlayTimeByLineId(String lineId, public Object getLinePlayTimeByLineId(String lineId, Integer signUpMode, Integer year) {
@Param(value = "signUpMode",required = false) Integer signUpMode, List<TheRapyRecuperationLineUnionSelect> query = dao.query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId)
@Param(value = "year",required = false) Integer year, .andEX("signUpMode", "=", signUpMode).andEX("YEAR(selectTime)", "=", year));
@Param(value = "startYear",required = false)Integer startYear,
@Param(value = "endYear",required = false)Integer endYear,
@Param(value = "flag",required = false) Boolean flag) {
Cnd cnd = Cnd.NEW();
cnd.and("lineId", "=", lineId);
if (flag == null || !flag){
cnd.andEX("signUpMode", "=", signUpMode);
cnd.and("YEAR(selectTime)", "=", year);
} else {
cnd.and("YEAR(selectTime)", ">=", startYear);
cnd.and("YEAR(selectTime)", "<=", endYear);
}
List<TheRapyRecuperationLineUnionSelect> query = dao.query(TheRapyRecuperationLineUnionSelect.class, cnd);
//.and("selectUserId", "=", ShiroUtil.getUserId()).and("unionId", "=", Vi.getUnionId())); //.and("selectUserId", "=", ShiroUtil.getUserId()).and("unionId", "=", Vi.getUnionId()));
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
List<NutMap> nutMaps = new ArrayList<>(); List<NutMap> nutMaps = new ArrayList<>();
query.forEach(v -> { query.forEach(v -> {
String startTime = DateUtil.formatChineseDate(v.getPlayStartTime(), false, false).substring(5); String startTime = DateUtil.formatChineseDate(v.getPlayStartTime(), false, false).substring(5);
String endTime = DateUtil.formatChineseDate(v.getPlayEndTime(), false, false).substring(5); String endTime = DateUtil.formatChineseDate(v.getPlayEndTime(), false, false).substring(5);
NutMap map = new NutMap(); NutMap map = new NutMap();
map.setv("times", startTime + "-" + endTime);
List<TheRapyRecuperationEnroll> enrollList = dao.query(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", v.getId())
.and("isNormal", "=", true)
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
int hasSignNumber;
if (config.getFamilyInfo() == 1) {
int sum = enrollList.stream().mapToInt(TheRapyRecuperationEnroll::getFamilyNumber).sum();
hasSignNumber = enrollList.size() + sum;
} else {
List<String> list = enrollList.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
List<TheRapyRecuperationEnrollCompanion> companions = dao.query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", list));
hasSignNumber = enrollList.size() + companions.size();
}
map.setv("times", startTime + "-" + endTime + "(报名人数:" + hasSignNumber + ",其中家属:" + (hasSignNumber - enrollList.size()) + "人)");
map.setv("selectId", v.getId()); map.setv("selectId", v.getId());
nutMaps.add(map); nutMaps.add(map);
}); });
return nutMaps; return nutMaps;
} }
} }
@@ -12,15 +12,15 @@ import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.dao.CndPlus; import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService; import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool; import io.v.nutz.base.query.PageForm;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationBaseManagement; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationBaseManagement;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.service.baseManage.TheRapyRecuperationBaseManagerService; import io.v.nutz.zhgh.therapyRecuperation.service.baseManage.TheRapyRecuperationBaseManagerService;
import io.v.nutz.base.utils.ViTool;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
@@ -92,7 +92,7 @@ public class TheRapyRecuperationBaseManagerController {
@POST @POST
@Ok("json:full") @Ok("json:full")
@ViReturn @ViReturn
@RequiresRoles(value = {"sysadmin", "A06", "H04"}, logical = Logical.OR) @RequiresRoles(value = {"sysadmin", "SchoolUnionAdmin", "H04"}, logical = Logical.OR)
public Object pageData(PageForm pageForm, Integer year, String lotId, String baseName, String unionId, String travelAgencyId, String regionalNature) { public Object pageData(PageForm pageForm, Integer year, String lotId, String baseName, String unionId, String travelAgencyId, String regionalNature) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
@@ -114,7 +114,7 @@ public class TheRapyRecuperationBaseManagerController {
tb.files, tb.files,
tb.baseContactPerson, tb.baseContactPerson,
tb.baseContactNumber, tb.baseContactNumber,
tb.files AS fileId, cast( tb.files ->> '$[0].id' AS CHAR ) AS fileId,
gh.unionname createUnionName, gh.unionname createUnionName,
u.username createUserName, u.username createUserName,
ta.travelAgencyName, ta.travelAgencyName,
@@ -136,7 +136,7 @@ public class TheRapyRecuperationBaseManagerController {
cnd.desc("tb.`year`"); cnd.desc("tb.`year`");
cnd.asc("tb.sortNumber"); cnd.asc("tb.sortNumber");
cnd.asc("tb.id"); cnd.asc("tb.id");
if (!ShiroUtil.hasAnyRoles(List.of("sysadmin", "A06"))) { if (!ShiroUtil.hasAnyRoles(List.of("sysadmin", "SchoolUnionAdmin"))) {
if (ShiroUtil.hasRole("H04")) { if (ShiroUtil.hasRole("H04")) {
cnd.and("tb.createUnionId", "=", Vi.getUnionId()); cnd.and("tb.createUnionId", "=", Vi.getUnionId());
} }
@@ -192,7 +192,7 @@ public class TheRapyRecuperationBaseManagerController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@RequiresRoles(value = {"sysadmin", "A06", "H04"}, logical = Logical.OR) @RequiresRoles(value = {"sysadmin", "SchoolUnionAdmin", "H04"}, logical = Logical.OR)
public Object doSubmit(@Param("base") TheRapyRecuperationBaseManagement baseManagement) { public Object doSubmit(@Param("base") TheRapyRecuperationBaseManagement baseManagement) {
baseManagement.setOpBy((String) ShiroUtil.getPrincipalProperty("id")); baseManagement.setOpBy((String) ShiroUtil.getPrincipalProperty("id"));
baseManagement.setCreateUnionId((String) ShiroUtil.getPrincipalProperty("unionid")); baseManagement.setCreateUnionId((String) ShiroUtil.getPrincipalProperty("unionid"));
@@ -9,20 +9,19 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.User;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationLineCreateMode; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationLineCreateMode;
import io.v.nutz.zhgh.therapyRecuperation.mode.TheRapyTravelLineExcelMode; import io.v.nutz.zhgh.therapyRecuperation.mode.TheRapyTravelLineExcelMode;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineService;
import io.v.nutz.base.utils.ViTool;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.Logical;
@@ -42,6 +41,7 @@ import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
@@ -82,28 +82,22 @@ public class TheRapyRecuperationLineController {
@POST @POST
@Ok("json:full") @Ok("json:full")
@ViReturn @ViReturn
@RequiresRoles(value = {"sysadmin", "A06", "H04"}, logical = Logical.OR) @RequiresRoles(value = {"sysadmin", "SchoolUnionAdmin", "H04", "H01"}, logical = Logical.OR)
public Object pageData(PageForm pageForm, Integer startYear , Integer endYear, String keywords, String travelAgencyId, String lineName, String unionId, String lotId) { public Object pageData(PageForm pageForm, Integer startYear, Integer endYear, Integer signUpMode, String travelAgencyId, String lineName, String unionId, String lotId) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.andEX("line.`year`", ">=", startYear); cnd.andEX("line.`year`", ">=", startYear);
cnd.andEX("line.`year`", "<=", endYear); cnd.andEX("line.`year`", "<=", endYear);
cnd.andEX("line.travelAgencyId", "=", travelAgencyId); cnd.andEX("line.travelAgencyId", "=", travelAgencyId);
cnd.andEX("line.lotId", "=", lotId); cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("line.signUpMode", "=", signUpMode);
cnd.and(Cnd.likeEX("line.lineName", lineName)); cnd.and(Cnd.likeEX("line.lineName", lineName));
/*if (StrUtil.isNotBlank(keywords)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("line.lineName", keywords);
seg.orLike("line.travelAgencyName", keywords);
cnd.and(seg);
}*/
cnd.desc("year"); cnd.desc("year");
if (!ShiroUtil.hasAnyRoles(List.of("sysadmin", "A06"))) { if (!ShiroUtil.hasAnyRoles(List.of("sysadmin", "SchoolUnionAdmin"))) {
if (ShiroUtil.hasRole("H04")) { if (ShiroUtil.hasRole("H04")) {
cnd.and("line.createUnionId", "=", Vi.getUnionId()); cnd.and("line.createUnionId", "=", Vi.getUnionId());
}else{
cnd.and("line.opBy", "=", ShiroUtil.getUserId());
} }
} else {
cnd.andEX("line.createUnionId", "=", unionId);
} }
cnd.desc("regionalNature").asc("serialNumber").asc("line.opBy"); cnd.desc("regionalNature").asc("serialNumber").asc("line.opBy");
return lineService.pageData(pageForm, cnd); return lineService.pageData(pageForm, cnd);
@@ -113,7 +107,7 @@ public class TheRapyRecuperationLineController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@RequiresRoles(value = {"sysadmin", "A06", "H04"}, logical = Logical.OR) @RequiresRoles(value = {"sysadmin", "SchoolUnionAdmin", "H04", "H01"}, logical = Logical.OR)
public Object getNo() { public Object getNo() {
Object serialNumber = dao.func2(TheRapyRecuperationLine.class, "max", "serialNumber"); Object serialNumber = dao.func2(TheRapyRecuperationLine.class, "max", "serialNumber");
serialNumber = Objects.requireNonNullElse(serialNumber, 0); serialNumber = Objects.requireNonNullElse(serialNumber, 0);
@@ -130,8 +124,8 @@ public class TheRapyRecuperationLineController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@RequiresRoles(value = {"sysadmin", "A06", "H04"}, logical = Logical.OR) @RequiresRoles(value = {"sysadmin", "SchoolUnionAdmin", "H04", "H01"}, logical = Logical.OR)
public Object doSubmit(TheRapyRecuperationLine line) { public Object doSubmit(@Param("line") TheRapyRecuperationLine line) {
if (StrUtil.isBlank(line.getId())) { if (StrUtil.isBlank(line.getId())) {
if (lineService.count(Cnd.where("serialNumber", "=", line.getSerialNumber())) > 0) { if (lineService.count(Cnd.where("serialNumber", "=", line.getSerialNumber())) > 0) {
return Result.error("编号已存在"); return Result.error("编号已存在");
@@ -219,7 +213,7 @@ public class TheRapyRecuperationLineController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getCreateMode() { public Object getCreateMode() {
boolean hasSchoolAdminRole = ShiroUtil.hasAnyRoles(List.of("sysadmin", "A06")); boolean hasSchoolAdminRole = ShiroUtil.hasAnyRoles(List.of("sysadmin", "SchoolUnionAdmin"));
if (hasSchoolAdminRole) { if (hasSchoolAdminRole) {
return TheRapyRecuperationLineCreateMode.SCHOOL.getValue(); return TheRapyRecuperationLineCreateMode.SCHOOL.getValue();
} }
@@ -5,11 +5,9 @@ import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.PageUtil; import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.zhgh.therapyRecuperation.mode.TheRapyTravelAgencyExcelMode; import io.v.nutz.zhgh.therapyRecuperation.mode.TheRapyTravelAgencyExcelMode;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService;
@@ -84,7 +82,7 @@ public class TheRapyRecuperationTravelAgencyController {
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else { } else {
cnd.asc("serialNumber * 1"); cnd.asc("serialNumber");
} }
return travelAgencyService.pageData(pageForm, cnd); return travelAgencyService.pageData(pageForm, cnd);
} }
@@ -176,14 +174,10 @@ public class TheRapyRecuperationTravelAgencyController {
@At("/selectTravelAgencyByYears") @At("/selectTravelAgencyByYears")
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object selectTravelAgencyByYears(Integer startYear, Integer endYear, Integer year) { public Object selectTravelAgencyByYears(Integer startYear, Integer endYear) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if(startYear != null && endYear != null) { cnd.andEX("year", ">=", startYear);
cnd.andEX("year", ">=", startYear); cnd.andEX("year", "<=", endYear);
cnd.andEX("year", "<=", endYear);
}else {
cnd.andEX("year", "=", year);
}
return travelAgencyService.selectAllTravelAgencyByYear(cnd); return travelAgencyService.selectAllTravelAgencyByYear(cnd);
} }
@@ -0,0 +1,168 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.enrollAudit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhf
* @date 2025/5/21 15:02
* @description 线路审核公用
*/
@IocBean
@At("/platform/theRapyRecuperation/enrollAudit/commonAudit")
@Ok("json:full")
public class TheRapyRecuperationEnrollCommonAuditController {
@Inject
private TheRapyRecuperationEnrollService enrollService;
/**
*
* 查询某一条选择线路的审核记录
* @param id
* @return
*/
@At
@ViReturn
public Object findOne(String id){
Sql sql = Sqls.create("""
select * from the_rapy_recuperation_line_union_select where id=@id
""").setParam("id", id);
NutMap nutMap = enrollService.fetch(sql);
if (StrUtil.isNotBlank(nutMap.getString("unionAuditId"))){
nutMap.put("unionAudit",enrollService.dao().fetch(Audit.class,nutMap.getString("unionAuditId")));
}
if (StrUtil.isNotBlank(nutMap.getString("unitLeaderAuditId"))){
nutMap.put("unitLeaderAudit",enrollService.dao().fetch(Audit.class,nutMap.getString("unitLeaderAuditId")));
}
if (StrUtil.isNotBlank(nutMap.getString("schoolAuditId"))){
nutMap.put("schoolAudit",enrollService.dao().fetch(Audit.class,nutMap.getString("schoolAuditId")));
}
return nutMap;
}
@At
@ViReturn
public Object getUnionSelectLine(Integer startYear, Integer endYear, Integer signUpMode) {
Sql sql = Sqls.create("""
SELECT
rlus.id,
rlus.unionId,
rlus.lineId,
rlus.selectUserId,
DATE_FORMAT( rlus.playStartTime, '%Y-%m-%d' ) AS playStartTime,
DATE_FORMAT( rlus.playEndTime, '%Y-%m-%d' ) AS playEndTime,
rl.lineName,
rl.regionalNature,
CASE
WHEN rlus.signUpMode = 1 THEN '个人组织'
WHEN rlus.signUpMode = 2 THEN '分工会组织'
WHEN rlus.signUpMode = 3 THEN '校工会组织'
ELSE '未知'
END AS signUpMode,
lot.lotName
FROM
`the_rapy_recuperation_line_union_select` rlus
LEFT JOIN `the_rapy_recuperation_line` rl ON rlus.lineId = rl.id
LEFT JOIN `the_rapy_recuperation_lot` lot ON rl.lotId = lot.id
$condition
""");
Cnd cnd = Cnd.NEW();
if (ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin,SchoolUnionLxyAdmin")){
cnd.and("rlus.unionId", "=", Vi.getUnionId());
}
cnd.andEX("YEAR(rlus.selectTime)", ">=", startYear);
cnd.andEX("YEAR(rlus.selectTime)", "<=", endYear);
cnd.andEX("rlus.signUpMode", "=", signUpMode);
cnd.groupBy("rlus.lineId");
cnd.desc("lot.lotValue");
cnd.desc("rl.lineName");
sql.setCondition(cnd);
return enrollService.listMap(sql);
}
@At
@ViReturn
public Object getLinePlayTimeByLineId(String lineId, Integer signUpMode, Integer year) {
List<TheRapyRecuperationLineUnionSelect> query = enrollService.dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId)
.andEX("signUpMode", "=", signUpMode).andEX("YEAR(selectTime)", "=", year));
//.and("selectUserId", "=", ShiroUtil.getUserId()).and("unionId", "=", Vi.getUnionId()));
List<NutMap> nutMaps = new ArrayList<>();
query.forEach(v -> {
String startTime = DateUtil.formatChineseDate(v.getPlayStartTime(), false, false).substring(5);
String endTime = DateUtil.formatChineseDate(v.getPlayEndTime(), false, false).substring(5);
NutMap map = new NutMap();
map.setv("times", startTime + "-" + endTime);
map.setv("selectId", v.getId());
nutMaps.add(map);
});
return nutMaps;
}
@At
@ViReturn
public Object getUserDateByLine(PageForm pageForm,
@Param(value = "takePartLineId",required = false) String takePartLineId,
@Param(value = "searchKeyword", required = false) String searchKeyword,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId) {
Sql sql = Sqls.create("""
SELECT
enroll.*,
line.lineName,
line.id as lineId,
line.regionalNature,
'教职工' userNature,
state.stateColor,
state.stateName,
CONCAT(DATE_FORMAT(rs.playStartTime,'%m月%d日'),'-',DATE_FORMAT(rs.playEndTime,'%m月%d日')) AS linePlayTime,
IF
( enroll.takePartInUnionId != enroll.selfUnionId, TRUE, FALSE ) isTransferIn,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) num
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN `the_rapy_recuperation_line_union_select` rs ON rs.id = enroll.takePartInLineId
LEFT JOIN `the_rapy_recuperation_line` line on line.id=rs.lineId
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("enroll.takePartInLineId","=",takePartLineId);
cnd.and("enroll.stateId","=",2750);
cnd.andEX("enroll.selfUnionId", "=", unionId);
cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.and("enroll.takePartInLineId", "is not", null);
cnd.andEX("enroll.isNormal", "=", true);
if (StrUtil.isNotBlank(searchKeyword)){
cnd.and(Cnd.exps("enroll.loginName","like","%"+searchKeyword+"%").or("enroll.userName","like","%"+searchKeyword+"%"));
}
cnd.desc("enroll.signingUptime");
cnd.desc("enroll.unitName");
sql.setCondition(cnd);
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
}
@@ -0,0 +1,163 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.enrollAudit;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.Date;
/**
* @author zhf
* @date 2025/5/20 19:17
* @description 校工会审核
*/
@IocBean
@At("/platform/theRapyRecuperation/enrollAudit/schoolAudit")
@Ok("json:full")
public class TheRapyRecuperationEnrollSchoolAuditController {
@Inject
private TheRapyRecuperationEnrollService enrollService;
@Inject
private MsgApi msgApi;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/enrollAudit/schoolAudit.html")
@RequiresPermissions("theRapyRecuperation.enrollAudit.schoolAudit")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("theRapyRecuperation.enrollAudit.schoolAudit")
public Object pageData(PageForm pageForm,
@Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear,
@Param("unionId") String unionId,
@Param("takePartInLineId") String takePartInLineId,
@Param(value = "lotId", required = false) String lotId,
@Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "selectId", required = false) String selectId,
@Param(value = "isAudit", required = false) Integer isAudit,
@Param(value = "regionalNature", required = false) String regionalNature) {
Sql sql = Sqls.create("""
SELECT
st.stateName,
u.username,
u.loginname,
line.id,
line.lineName,
line.regionalNature,
lineu.lineId,
lineu.id as lineUId,
lineu.signUpMode,
lineu.auditState,
lineu.minimumGroupSize,
lineu.estimatedFamilyNumbers,
YEAR(lineu.selectTime) as `year`,
CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime,
lineu.playStartTime as playStartTime1,
lineu.playEndTime as playEndTime2,
lxs.travelAgencyName,
lxs.contact,
lxs.contactMobileNumber,
enroll.takePartInUnionId AS usUnionId,
un.unionname as unionname,
lot.lotName,
lot.lotValue,
enroll.familyNumber,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE takePartInLineId = lineu.id and stateId=2750 and isNormal = true $unionCnd) lineNum,
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where stateId=2750 and takePartInLineId = lineu.id and isNormal = true $unionCnd)) as signUpUserFamilyNum
FROM
the_rapy_recuperation_line_union_select lineu
LEFT JOIN `the_rapy_recuperation_enroll` enroll ON lineu.id=enroll.takePartInLineId
left join `user` u on u.id=lineu.selectUserId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
LEFT JOIN sys_union un ON un.id = lineu.unionId
left join audit_state st on st.stateId=lineu.auditState
$condition
""");
Cnd cnd = Cnd.NEW();
if (isAudit != 0) {
cnd.andEX("lineu.auditState", isAudit == 1 ? ">" : "=", 7712);
}else{
cnd.andEX("lineu.auditState", ">=", 7712);
}
cnd.andEX("groupSuccess", "=", 1);
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
cnd.andEX("lineu.signUpMode", "=", signUpMode);
cnd.andEX("lineu.unionId", "=", unionId);
cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.groupBy("enroll.takePartInLineId");
cnd.asc("line.serialNumber").asc("lineu.playStartTime");
sql.setCondition(cnd);
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.enrollAudit.schoolAudit")
public Result doPass(String id, Audit audit) {
audit.setAuditTime(new Date());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditor(ShiroUtil.getUserId());
enrollService.insert(audit);
TheRapyRecuperationLineUnionSelect unionSelect = enrollService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, id);
unionSelect.setAuditState(7720);
unionSelect.setSchoolAuditId(audit.getId());
enrollService.update(unionSelect);
return Result.success();
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.enrollAudit.schoolAudit")
public Result doBack(String id, Audit audit) {
audit.setAuditTime(new Date());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditor(ShiroUtil.getUserId());
enrollService.insert(audit);
TheRapyRecuperationLineUnionSelect unionSelect = enrollService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, id);
unionSelect.setAuditState(7715);
unionSelect.setSchoolAuditId(audit.getId());
enrollService.update(unionSelect);
TheRapyRecuperationLine line = enrollService.dao().fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
Sys_user user = enrollService.dao().fetch(Sys_user.class, unionSelect.getSelectUserId());
msgApi.sendTextMsg("您备案的疗休养【"+line.getLineName()+"】校工会退回,请修改后在提交审核!", user.getLoginname());
return Result.success();
}
}
@@ -0,0 +1,164 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.enrollAudit;
import cn.hutool.core.date.DateUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.Date;
/**
* @author zhf
* @date 2025/5/20 18:42
* @description 分工会审核
*/
@IocBean
@At("/platform/theRapyRecuperation/enrollAudit/unionAudit")
@Ok("json:full")
public class TheRapyRecuperationEnrollUnionAuditController {
@Inject
private TheRapyRecuperationEnrollService enrollService;
@Inject
private MsgApi msgApi;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/enrollAudit/unionAudit.html")
@RequiresPermissions("theRapyRecuperation.enrollAudit.unionAudit")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("theRapyRecuperation.enrollAudit.unionAudit")
public Object pageData(PageForm pageForm,
@Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear,
@Param("takePartInLineId") String takePartInLineId,
@Param(value = "lotId", required = false) String lotId,
@Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "selectId", required = false) String selectId,
@Param(value = "isAudit", required = false) Integer isAudit,
@Param(value = "regionalNature", required = false) String regionalNature) {
Sql sql = Sqls.create("""
SELECT
st.stateName,
u.username,
u.loginname,
line.id,
line.lineName,
line.regionalNature,
lineu.lineId,
lineu.id as lineUId,
lineu.signUpMode,
lineu.auditState,
lineu.minimumGroupSize,
lineu.estimatedFamilyNumbers,
YEAR(lineu.selectTime) as `year`,
CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime,
lineu.playStartTime as playStartTime1,
lineu.playEndTime as playEndTime2,
lxs.travelAgencyName,
lxs.contact,
lxs.contactMobileNumber,
enroll.takePartInUnionId AS usUnionId,
un.unionname as unionname,
lot.lotName,
lot.lotValue,
enroll.familyNumber,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE takePartInLineId = lineu.id and stateId=2750 and isNormal = true $unionCnd) lineNum,
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where stateId=2750 and takePartInLineId = lineu.id and isNormal = true $unionCnd)) as signUpUserFamilyNum
FROM
the_rapy_recuperation_line_union_select lineu
LEFT JOIN `the_rapy_recuperation_enroll` enroll ON lineu.id=enroll.takePartInLineId
left join `user` u on u.id=lineu.selectUserId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
LEFT JOIN sys_union un ON un.id = lineu.unionId
left join audit_state st on st.stateId=lineu.auditState
$condition
""");
Cnd cnd = Cnd.NEW();
if (isAudit != 0) {
cnd.andEX("lineu.auditState", isAudit == 1 ? ">" : "=", 7700);
}
cnd.andEX("groupSuccess", "=", 1);
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
cnd.andEX("lineu.signUpMode", "=", signUpMode);
cnd.and("lineu.unionId", "=", Vi.getUnionId());
cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.groupBy("enroll.takePartInLineId");
cnd.asc("line.serialNumber").asc("lineu.playStartTime");
sql.setCondition(cnd);
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.enrollAudit.unionAudit")
public Result doPass(String id, Audit audit) {
audit.setAuditTime(new Date());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditor(ShiroUtil.getUserId());
enrollService.insert(audit);
TheRapyRecuperationLineUnionSelect unionSelect = enrollService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, id);
unionSelect.setAuditState(7707);
unionSelect.setUnionAuditId(audit.getId());
enrollService.update(unionSelect);
return Result.success();
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.enrollAudit.unionAudit")
public Result doBack(String id, Audit audit) {
audit.setAuditTime(new Date());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditor(ShiroUtil.getUserId());
enrollService.insert(audit);
TheRapyRecuperationLineUnionSelect unionSelect = enrollService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, id);
unionSelect.setAuditState(7703);
unionSelect.setUnionAuditId(audit.getId());
enrollService.update(unionSelect);
TheRapyRecuperationLine line = enrollService.dao().fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
Sys_user user = enrollService.dao().fetch(Sys_user.class, unionSelect.getSelectUserId());
msgApi.sendTextMsg("您备案的疗休养【"+line.getLineName()+"】分工会退回,请修改后在提交审核!", user.getLoginname());
return Result.success();
}
}
@@ -0,0 +1,172 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.enrollAudit;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.Date;
import java.util.List;
/**
* @author zhf
* @date 2025/5/20 19:16
* @description 单位领导审核
*/
@IocBean
@At("/platform/theRapyRecuperation/enrollAudit/unitLeaderAudit")
@Ok("json:full")
public class TheRapyRecuperationEnrollUnitLeaderAuditController {
@Inject
private TheRapyRecuperationEnrollService enrollService;
@Inject
private MsgApi msgApi;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/enrollAudit/unitLeaderAudit.html")
@RequiresPermissions("theRapyRecuperation.enrollAudit.unitLeaderAudit")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("theRapyRecuperation.enrollAudit.unitLeaderAudit")
public Object pageData(PageForm pageForm,
@Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear,
@Param("takePartInLineId") String takePartInLineId,
@Param(value = "lotId", required = false) String lotId,
@Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "selectId", required = false) String selectId,
@Param(value = "isAudit", required = false) Integer isAudit,
@Param(value = "regionalNature", required = false) String regionalNature) {
Sql sql = Sqls.create("""
SELECT
st.stateName,
u.username,
u.loginname,
line.id,
line.lineName,
line.regionalNature,
lineu.lineId,
lineu.id as lineUId,
lineu.signUpMode,
lineu.auditState,
lineu.minimumGroupSize,
lineu.estimatedFamilyNumbers,
YEAR(lineu.selectTime) as `year`,
CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime,
lineu.playStartTime as playStartTime1,
lineu.playEndTime as playEndTime2,
lxs.travelAgencyName,
lxs.contact,
lxs.contactMobileNumber,
enroll.takePartInUnionId AS usUnionId,
un.unionname as unionname,
lot.lotName,
lot.lotValue,
enroll.familyNumber,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE takePartInLineId = lineu.id and stateId=2750 and isNormal = true $unionCnd) lineNum,
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where stateId=2750 and takePartInLineId = lineu.id and isNormal = true $unionCnd)) as signUpUserFamilyNum
FROM
the_rapy_recuperation_line_union_select lineu
LEFT JOIN `the_rapy_recuperation_enroll` enroll ON lineu.id=enroll.takePartInLineId
left join `user` u on u.id=lineu.selectUserId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
LEFT JOIN sys_union un ON un.id = lineu.unionId
left join audit_state st on st.stateId=lineu.auditState
$condition
""");
Cnd cnd = Cnd.NEW();
if (isAudit != 0) {
cnd.andEX("lineu.auditState", isAudit == 1 ? ">" : "=", 7707);
}else{
cnd.andEX("lineu.auditState", ">=", 7707);
}
cnd.andEX("groupSuccess", "=", 1);
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
cnd.andEX("lineu.signUpMode", "=", signUpMode);
if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin,SchoolUnionLxyAdmin")){
if (Vi.getUnion().getUnioncode().equals("01")){
cnd.and("lineu.unionId", "in", List.of("7406938f3d6645308245eab9394943d8","fc38a500c0d64218ada03ac49b39c856","9c8639134e1547259c4b2e0f509641aa"));
}else{
cnd.and("lineu.unionId", "=", Vi.getUnionId());
}
}
cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.groupBy("enroll.takePartInLineId");
cnd.asc("line.serialNumber").asc("lineu.playStartTime");
sql.setCondition(cnd);
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.enrollAudit.unitLeaderAudit")
public Result doPass(String id, Audit audit) {
audit.setAuditTime(new Date());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditor(ShiroUtil.getUserId());
enrollService.insert(audit);
TheRapyRecuperationLineUnionSelect unionSelect = enrollService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, id);
unionSelect.setAuditState(7712);
unionSelect.setUnitLeaderAuditId(audit.getId());
enrollService.update(unionSelect);
return Result.success();
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.enrollAudit.unitLeaderAudit")
public Result doBack(String id, Audit audit) {
audit.setAuditTime(new Date());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditor(ShiroUtil.getUserId());
enrollService.insert(audit);
TheRapyRecuperationLineUnionSelect unionSelect = enrollService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, id);
unionSelect.setAuditState(7710);
unionSelect.setUnitLeaderAuditId(audit.getId());
enrollService.update(unionSelect);
TheRapyRecuperationLine line = enrollService.dao().fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
Sys_user user = enrollService.dao().fetch(Sys_user.class, unionSelect.getSelectUserId());
msgApi.sendTextMsg("您备案的疗休养【"+line.getLineName()+"】单位领导退回,请修改后在提交审核!", user.getLoginname());
return Result.success();
}
}
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.process; package io.v.nutz.zhgh.therapyRecuperation.controller.process;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -8,18 +7,15 @@ import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_config; import io.v.nutz.sys.models.Sys_config;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationBaseManagement; import io.v.nutz.zhgh.therapyRecuperation.model.*;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationCommonService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationCommonService;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineService;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Chain; import org.nutz.dao.Chain;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
@@ -35,7 +31,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* @FileName io.v.nutz.therapyRecuperation.controller.process.TheRapyRecuperationEnroll * @FileName io.v.nutz.zhgh.therapyRecuperation.controller.process.TheRapyRecuperationEnroll
* @Description: 疗休养报名报名 * @Description: 疗休养报名报名
* @Author zxc * @Author zxc
* @Date 2022/5/31:16:58 * @Date 2022/5/31:16:58
@@ -83,7 +79,7 @@ public class TheRapyRecuperationEnrollController {
* @param unionId 选择的工会id * @param unionId 选择的工会id
* @param theRapyRecuperationType 线路类型 见下枚举类 * @param theRapyRecuperationType 线路类型 见下枚举类
* @return {@link Object} * @return {@link Object}
* @see TheRapyRecuperationType * @see io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType
*/ */
@At @At
@POST @POST
@@ -94,27 +90,40 @@ public class TheRapyRecuperationEnrollController {
} }
@At @At
@POST
@ViReturn @ViReturn
@RequiresAuthentication @SLog(type = "lxy", tag = "我的疗休养", msg = "疗休养评价")
public Object getSelectLineById(String lineId, String unionId, int theRapyRecuperationType, Integer lineUnionType) { public Object doEvaluate(TheRapyRecuperationEvaluate rapyRecuperationEvaluate) {
return enrollService.getSelectLineById(lineId, unionId, theRapyRecuperationType, lineUnionType); rapyRecuperationEvaluate.setUserId(ShiroUtil.getUserId());
rapyRecuperationEvaluate.setUserName(ShiroUtil.getPlatformUsername());
rapyRecuperationEvaluate.setLoginName(ShiroUtil.getPlatformLoginname());
rapyRecuperationEvaluate.setApplyDate(new Date());
enrollService.dao().insertOrUpdate(rapyRecuperationEvaluate);
return null;
}
@At
@ViReturn
public Object finOneEvaluate(String lineId) {
TheRapyRecuperationEvaluate fetch = enrollService.dao().fetch(TheRapyRecuperationEvaluate.class,
Cnd.where("userId", "=", ShiroUtil.getUserId())
.and("lineId", "=", lineId));
return fetch;
} }
@At @At
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object openSignUser(String usId, String travelId, String searchKeyWord) { public Object getSelectLineById(String lineId, String unionId, int theRapyRecuperationType, @Param(value = "lineUnionType", required = false) Integer lineUnionType) {
return enrollService.openSignUser(usId, travelId, searchKeyWord); return enrollService.getSelectLineById(lineId, unionId, theRapyRecuperationType, lineUnionType);
} }
//获取设置了公开线路的分工会 //获取设置了公开线路的分工会
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getTheRapyUnions(Integer year, int theRapyRecuperationType) { public Object getTheRapyUnions(Integer year) {
return enrollService.getTheRapyUnions(year, theRapyRecuperationType); return enrollService.getTheRapyUnions(year);
} }
@@ -131,15 +140,7 @@ public class TheRapyRecuperationEnrollController {
public Object doSignUpForLine(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { public Object doSignUpForLine(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) {
//省外的线路报名需要判断 //省外的线路报名需要判断
// if (lineInfo.getRegionalNature().equals(TheRapyRecuperationProvinceType.provinceOut.getValue())) { // if (lineInfo.getRegionalNature().equals(TheRapyRecuperationProvinceType.provinceOut.getValue())) {
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Map<Boolean, String> validResult = enrollService.validSignUpInfo((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
Map<Boolean, String> validResult = new HashMap<>();
if("zjxu".equals(config.getConfigValue())) {
validResult = enrollService.validSignUpInfoForZJXU((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
} else if("zjiet".equals(config.getConfigValue())) {
validResult = enrollService.validSignUpInfo((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
} else if("zjnu".equals(config.getConfigValue())) {
validResult = enrollService.validSignUpInfoForZJNU((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
}
if (validResult.containsKey(false)) { if (validResult.containsKey(false)) {
return Result.error(validResult.get(false)); return Result.error(validResult.get(false));
} }
@@ -163,15 +164,7 @@ public class TheRapyRecuperationEnrollController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object doSignUpForTravelAgency(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { public Object doSignUpForTravelAgency(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) {
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Map<Boolean, String> resultMap = enrollService.validSignUpInfo((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
Map<Boolean, String> resultMap = new HashMap<>();
if("zjxu".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfoForZJXU((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
} else if("zjiet".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfo((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
} else if("zjnu".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfoForZJNU((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
}
if (resultMap.containsKey(false)) { if (resultMap.containsKey(false)) {
return Result.error(resultMap.get(false)); return Result.error(resultMap.get(false));
} }
@@ -194,17 +187,10 @@ public class TheRapyRecuperationEnrollController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object doSignUpForBaseManagement(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { public Object doSignUpForBaseManagement(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) {
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Map<Boolean, String> resultMap = enrollService.validSignUpInfo((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
Map<Boolean, String> resultMap = new HashMap<>();
if("zjxu".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfoForZJXU((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
} else {
resultMap = enrollService.validSignUpInfo((String) ShiroUtil.getPrincipalProperty("loginname"), enrollInfo);
}
if (resultMap.containsKey(false)) { if (resultMap.containsKey(false)) {
return Result.error(resultMap.get(false)); return Result.error(resultMap.get(false));
} }
if (StrUtil.isBlank(enrollInfo.getId())) { if (StrUtil.isBlank(enrollInfo.getId())) {
enrollService.doSignUpForHotel(enrollInfo); enrollService.doSignUpForHotel(enrollInfo);
} else { } else {
@@ -300,20 +286,10 @@ public class TheRapyRecuperationEnrollController {
&& StrUtil.isBlank(enrollInfo.getTakePartInLineId())) { && StrUtil.isBlank(enrollInfo.getTakePartInLineId())) {
return Result.error("线路信息不能为空"); return Result.error("线路信息不能为空");
} }
if (StrUtil.isBlank(enrollInfo.getLoginName())){ if (StrUtil.isBlank(enrollInfo.getLoginName())){
enrollInfo.setLoginName(ShiroUtil.getPrincipalProperty("loginname").toString()); enrollInfo.setLoginName(ShiroUtil.getPrincipalProperty("loginname").toString());
} }
Map<Boolean, String> resultMap = enrollService.validSignUpInfo(enrollInfo.getLoginName(), enrollInfo);
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion"));
Map<Boolean, String> resultMap = new HashMap<>();
if("zjxu".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfoForZJXU(enrollInfo.getLoginName(), enrollInfo);
} else if("zjiet".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfo(enrollInfo.getLoginName(), enrollInfo);
} else if("zjnu".equals(config.getConfigValue())) {
resultMap = enrollService.validSignUpInfoForZJNU(enrollInfo.getLoginName(), enrollInfo);
}
if (resultMap.containsKey(false)) { if (resultMap.containsKey(false)) {
return Result.error(resultMap.get(false)); return Result.error(resultMap.get(false));
} }
@@ -335,22 +311,6 @@ public class TheRapyRecuperationEnrollController {
return null; return null;
} }
/**
* 删除我的报名信息
*
* @param id id
* @return {@link Object}
*/
@At("/doModify/?")
@POST
@ViReturn
@RequiresAuthentication
public Object doModify(String id) {
enrollService.update(Chain.make("isNormal",false),Cnd.where("id","=",id));
return null;
}
/** /**
* 能取消吗 * 能取消吗
* *
@@ -426,8 +386,8 @@ public class TheRapyRecuperationEnrollController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
select select
(select count(1) from the_rapy_recuperation_enroll where isNormal=true and takePartInUnionId = @unionId AND takePartInLineId = @lineId AND stateId = @signUpSuccessCode) as signUpUserNum, (select count(1) from the_rapy_recuperation_enroll where takePartInUnionId = @unionId AND takePartInLineId = @lineId AND stateId = @signUpSuccessCode) as signUpUserNum,
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where isNormal=true and takePartInUnionId = @unionId AND takePartInLineId = @lineId AND stateId = @signUpSuccessCode)) as signUpUserFamilyNum (select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where takePartInUnionId = @unionId AND takePartInLineId = @lineId AND stateId = @signUpSuccessCode)) as signUpUserFamilyNum
"""); """);
sql.setParam("signUpSuccessCode", TheRapyRecuperationState.PASS); sql.setParam("signUpSuccessCode", TheRapyRecuperationState.PASS);
sql.setParam("lineId", lineId); sql.setParam("lineId", lineId);
@@ -447,25 +407,8 @@ public class TheRapyRecuperationEnrollController {
@GET @GET
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object selectLineAllInfo(@Param("usId") String usId, public Object selectLineAllInfo(@Param("usId") String usId, @Param("usUnionId") String usUnionId) {
@Param("usUnionId") String usUnionId,
@Param("year") String year) {
Assert.notBlank(usId); Assert.notBlank(usId);
return enrollService.selectLineAllInfo(usId, usUnionId, year); return enrollService.selectLineAllInfo(usId, usUnionId);
}
@At
@ViReturn
@RequiresAuthentication
public Object getSchoolTime() {
Sys_user sysUser = dao.fetch(Sys_user.class, ShiroUtil.getUserId());
if(StrUtil.isNotBlank(sysUser.getSchoolTime())) {
DateTime schoolDate = DateUtil.parse(sysUser.getSchoolTime());
DateTime time = DateUtil.parse(DateUtil.thisYear() + "-07-01");
int compareResult = DateUtil.compare(schoolDate, time);
return compareResult >= 0 ? sysUser.getSchoolTime() : null;
} else {
return null;
}
} }
} }
@@ -10,9 +10,9 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.result.Result; import io.v.nutz.base.result.Result;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollJoinUserImportService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollJoinUserImportService;
import io.v.nutz.base.utils.ViTool;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -3,8 +3,8 @@ package io.v.nutz.zhgh.therapyRecuperation.controller.process;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationSignUpMode; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationSignUpMode;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
@@ -73,7 +73,7 @@ public class TheRapyRecuperationLineAdjustmentController {
@POST @POST
@Ok("json:full") @Ok("json:full")
@ViReturn @ViReturn
@RequiresRoles(value = {"sysadmin", "A06", "H04"}, logical = Logical.OR) @RequiresRoles(value = {"sysadmin", "SchoolUnionAdmin", "H04"}, logical = Logical.OR)
public Object pageData(PageForm pageForm, public Object pageData(PageForm pageForm,
Integer year, Integer year,
String lineId, String lineId,
@@ -193,7 +193,7 @@ public class TheRapyRecuperationLineAdjustmentController {
String username = usernameMap.get(v); String username = usernameMap.get(v);
String content = "%s老师您好,您报名的%s【%s-%s】(%s至%s)线路未达到成团标准,现已解散,请您选择其他线路进行报名!" String content = "%s老师您好,您报名的%s【%s-%s】(%s至%s)线路未达到成团标准,现已解散,请您选择其他线路进行报名!"
.formatted(username,lineName,lotName,regionalNature,playStartTime,playEndTime); .formatted(username,lineName,lotName,regionalNature,playStartTime,playEndTime);
//msgApi.sendWxMsg(content,v); // msgApi.sendWxMsg(content,v);
}); });
} }
return Result.success(); return Result.success();
@@ -4,10 +4,10 @@ import cn.hutool.core.lang.Assert;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationCluster; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationCluster;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationClusterMember; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationClusterMember;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineClusterService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineClusterService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
@@ -2,15 +2,23 @@ package io.v.nutz.zhgh.therapyRecuperation.controller.process;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.slog.annotation.SLog; import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.*; import io.v.nutz.zhgh.activity.models.ActivityUserScope;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationSignUpMode;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineUnionSelectService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineUnionSelectService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
@@ -23,10 +31,12 @@ import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos; import org.nutz.dao.util.Daos;
import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop; import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang; import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.POST; import org.nutz.mvc.annotation.POST;
@@ -43,24 +53,25 @@ import java.util.stream.Collectors;
* @date 2023/06/26 * @date 2023/06/26
*/ */
@IocBean @IocBean
@At(value = {"/platform/theRapyRecuperation/lineFghSelect", "/platform/theRapyRecuperation/lineXghSelect", "/platform/theRapyRecuperation/lineUnionSelect"}) @At(value = {
"/platform/theRapyRecuperation/lineFghSelect",
"/platform/theRapyRecuperation/lineXghSelect",
"/platform/theRapyRecuperation/linePersonalSelect",
})
@Ok("json:full") @Ok("json:full")
@Slf4j @Slf4j
public class TheRapyRecuperationLineUnionSelectController { public class TheRapyRecuperationLineUnionSelectController {
@Inject @Inject
private Vi vi; private Vi vi;
@Inject @Inject
private Dao dao; private Dao dao;
@Inject @Inject
private TheRapyRecuperationLineUnionSelectService unionSelectService; private TheRapyRecuperationLineUnionSelectService unionSelectService;
@At("") @At("")
@Ok("re") @Ok("re")
// @Ok("beetl:/platform/theRapyRecuperation/process/lineUnionSelect.html") @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR)
public String index(@Param("mode") Integer mode) { public String index(@Param("mode") Integer mode) {
return "beetl:/platform/theRapyRecuperation/process/lineUnionSelect.html"; return "beetl:/platform/theRapyRecuperation/process/lineUnionSelect.html";
} }
@@ -75,62 +86,64 @@ public class TheRapyRecuperationLineUnionSelectController {
@At @At
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object pageData(PageForm pageForm, Integer year, String keywords, int selectStatus, String unionId, public Object pageData(PageForm pageForm, Integer year, String keywords, int selectStatus, String unionId,
String lotId, String travelAgencyId, Integer mode, String regionalNature) { String lotId, String travelAgencyId, Integer mode, String regionalNature) {
TheRapyRecuperationConfig config = unionSelectService.dao().fetch(TheRapyRecuperationConfig.class, Cnd.NEW()); year = year == null ? DateUtil.thisYear() : year;
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.andEX("line.lotId", "=", lotId); cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("us.travelAgencyId", "=", travelAgencyId); cnd.andEX("line.travelAgencyId", "=", travelAgencyId);
if (!"全部".equals(regionalNature)) { if (!"全部".equals(regionalNature)) {
cnd.andEX("line.regionalNature", "=", regionalNature); cnd.andEX("line.regionalNature", "=", regionalNature);
} }
cnd.and("line.signUpMode", "=", mode);
//当前登录用户已选择的线路id //当前登录用户已选择的线路id
Sql hasSelectLineSql; Sql hasSelectLineSql = null;
if (!ShiroUtil.hasAnyRoles("sysadmin, A06")) {
cnd.and(Cnd.exps("line.createUnionId", "=", Vi.getUnionId()).or("createMode", "=", 2)); if(mode == 1) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("line.openChoose", "=", true);
group.or(Cnd.exps("line.openChoose", "=", false).and("line.createUnionId", "=", Vi.getUnionId()));
cnd.and(group);
hasSelectLineSql = Sqls.createf(""" hasSelectLineSql = Sqls.createf("""
select lineId from the_rapy_recuperation_line_union_select where selectUserId = '%s' AND unionId = '%s' AND year(selectTime) = %s select lineId from the_rapy_recuperation_line_union_select where selectUserId = '%s' AND unionId = '%s' AND year(selectTime) = %s
""", ShiroUtil.getPrincipalProperty("id"), Vi.getUnionId(), year == null ? DateUtil.thisYear() : year); """, ShiroUtil.getUserId(), Vi.getUnionId(), year);
} else { } else if(mode == 2) {
hasSelectLineSql = Sqls.createf(""" hasSelectLineSql = Sqls.createf("""
select lineId from the_rapy_recuperation_line_union_select where year(selectTime) = %s select lineId from the_rapy_recuperation_line_union_select where year(selectTime) = %s and signUpMode = %s
""", year == null ? DateUtil.thisYear() : year); """, year, TheRapyRecuperationSignUpMode.FREE.getValue());
} else if(mode == 3) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("line.openChoose", "=", true);
group.or(Cnd.exps("line.openChoose", "=", false).and("line.opBy", "=", ShiroUtil.getUserId()));
cnd.and(group);
//个人
hasSelectLineSql = Sqls.createf("""
select lineId from the_rapy_recuperation_line_union_select where selectUserId = '%s' and year(selectTime) = %s and signUpMode = %s
""", ShiroUtil.getUserId(), year, TheRapyRecuperationSignUpMode.PERSONAL.getValue());
} }
/*hasSelectLineSql = Sqls.createf("""
select lineId from the_rapy_recuperation_line_union_select where unionId = '%s'
""", Vi.getUnionId());*/
switch (selectStatus) { switch (selectStatus) {
//查询未选择的线路 //查询未选择的线路
case -1 -> { case -1 -> {
cnd.and("line.id", "not in", hasSelectLineSql); cnd.and("line.id", "not in", hasSelectLineSql);
cnd.and("line.year", "in", year == null ? Lang.array(config.getProvinceStartYear(), config.getProvinceStartYear() + 1) : year); cnd.and("line.year", "in", year);
} }
case 0 -> { case 0 -> {
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("us.signUpMode", "is", null); seg.or("us.signUpMode", "is", null);
seg.or("us.signUpMode", "=", mode); seg.or("us.signUpMode", "=", mode);
cnd.and(seg); cnd.and(seg);
} }
/*case 0 -> {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or(Cnd.exps("line.id", "not in", hasSelectLineSql).and("line.createMode", "=", TheRapyRecuperationLineCreateMode.SCHOOL.getValue()));
seg.or("line.id", "in", hasSelectLineSql);
cnd.and(seg);
}*/
//查询已选择的线路 //查询已选择的线路
case 1 -> { case 1 -> {
cnd.and("line.id", "in", hasSelectLineSql); cnd.and("line.id", "in", hasSelectLineSql);
cnd.and("us.signUpMode", "=", mode); cnd.and("us.signUpMode", "=", mode);
cnd.and("year(us.selectTime)", "=", year == null ? DateUtil.thisYear() : year); cnd.and("year(us.selectTime)", "=", year);
} }
} }
@@ -147,7 +160,7 @@ public class TheRapyRecuperationLineUnionSelectController {
} else { } else {
cnd.asc("createUnionId").desc("year").asc("serialNumber"); cnd.asc("createUnionId").desc("year").asc("serialNumber");
} }
return unionSelectService.pageData(pageForm, cnd, year); return unionSelectService.pageData(pageForm, cnd, year, mode);
} }
/** /**
@@ -159,7 +172,7 @@ public class TheRapyRecuperationLineUnionSelectController {
@At("/selectLine") @At("/selectLine")
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object selectLine(TheRapyRecuperationLineUnionSelect us) { public Object selectLine(TheRapyRecuperationLineUnionSelect us) {
unionSelectService.selectLine(us); unionSelectService.selectLine(us);
return null; return null;
@@ -174,15 +187,12 @@ public class TheRapyRecuperationLineUnionSelectController {
@At("/selectLineTimes") @At("/selectLineTimes")
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public Object selectLineTimes(@Param("lineUnionSelects") TheRapyRecuperationLineUnionSelect[] lineUnionSelects) { public Object selectLineTimes(@Param("lineUnionSelects") TheRapyRecuperationLineUnionSelect[] lineUnionSelects) {
if (Lang.isNotEmpty(lineUnionSelects)) { if (Lang.isNotEmpty(lineUnionSelects)) {
TheRapyRecuperationLineUnionSelect lineUnionSelect = lineUnionSelects[0]; TheRapyRecuperationLineUnionSelect lineUnionSelect = lineUnionSelects[0];
List<TheRapyRecuperationLineUnionSelect> oldUnionSelects = unionSelectService.query(Cnd.where("unionId", "=", Vi.getUnionId()).and("lineId", "=", lineUnionSelect.getUnionId())); List<TheRapyRecuperationLineUnionSelect> oldUnionSelects = unionSelectService.query(Cnd.where("selectUserId", "=", ShiroUtil.getUserId()).and("lineId", "=", lineUnionSelect.getLineId()));
//组织形式
int signUpMode = ShiroUtil.hasRole("H04") ? 1 : 2;
TheRapyRecuperationLineUnionSelect theRapyRecuperationLineUnionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, Cnd.where("id", "=", lineUnionSelect.getId())); TheRapyRecuperationLineUnionSelect theRapyRecuperationLineUnionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, Cnd.where("id", "=", lineUnionSelect.getId()));
@@ -190,16 +200,35 @@ public class TheRapyRecuperationLineUnionSelectController {
unionSelect.setSelectTime(new Date()); unionSelect.setSelectTime(new Date());
unionSelect.setSelectUserId(ShiroUtil.getPlatformUid()); unionSelect.setSelectUserId(ShiroUtil.getPlatformUid());
unionSelect.setUnionId(Vi.getUnionId()); unionSelect.setUnionId(Vi.getUnionId());
unionSelect.setIsOpen(Lang.isNotEmpty(theRapyRecuperationLineUnionSelect) ? theRapyRecuperationLineUnionSelect.getIsOpen() : true); unionSelect.setIsOpen(Lang.isNotEmpty(theRapyRecuperationLineUnionSelect)?theRapyRecuperationLineUnionSelect.getIsOpen():false);
//unionSelect.setDelFlag(signUpMode == 2); unionSelect.setDelFlag(false);
unionSelect.setSignUpMode(signUpMode);
//如果是个人组织,加自己
if(unionSelect.getSignUpMode() == 3) {
if(Lang.isEmpty(unionSelect.getChooseUserList())) {
unionSelect.setChooseUserList(new ArrayList<>());
}
List<String> list = unionSelect.getChooseUserList().stream().map(o -> o.getString("id")).toList();
Sys_user currentUser = (Sys_user) ShiroUtil.getPrincipal();
if(currentUser != null && !list.contains(ShiroUtil.getUserId())) {
NutMap map = new NutMap();
map.put("id", currentUser.getId());
map.put("sex", currentUser.getSex());
map.put("mobile", currentUser.getMobile());
map.put("unitname", currentUser.getUnit() != null ? currentUser.getUnit().getName() : "");
map.put("username", currentUser.getUsername());
map.put("loginname", currentUser.getLoginname());
map.put("unionname", currentUser.getUnion() != null ? currentUser.getUnion().getUnionname() : "");
unionSelect.getChooseUserList().add(map);
}
}
} }
//新增或修改 //新增或修改
dao.insertOrUpdate(lineUnionSelects); dao.insertOrUpdate(lineUnionSelects);
List<String> newIds = Arrays.stream(lineUnionSelects).map(v -> v.getId()).collect(Collectors.toList()); List<String> newIds = Arrays.stream(lineUnionSelects).map(TheRapyRecuperationLineUnionSelect::getId).toList();
//删除 //删除
List<String> deleteIds = oldUnionSelects.stream().map(v -> v.getId()).filter(v -> !newIds.contains(v)).collect(Collectors.toList()); List<String> deleteIds = oldUnionSelects.stream().map(TheRapyRecuperationLineUnionSelect::getId).filter(v -> !newIds.contains(v)).collect(Collectors.toList());
unionSelectService.clear(Cnd.where("id", "in", deleteIds)); unionSelectService.clear(Cnd.where("id", "in", deleteIds));
} }
return null; return null;
@@ -208,19 +237,19 @@ public class TheRapyRecuperationLineUnionSelectController {
@At @At
@POST @POST
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object selectLineInfo(@Param("lineId") String lineId, @Param("unionId") String unionId, @Param("mode") Integer mode, @Param("year") Integer year) { public Object selectLineInfo(@Param("lineId") String lineId, @Param("unionId") String unionId, @Param("mode") Integer mode, @Param("year") Integer year) {
try { try {
Assert.notBlank(lineId); Assert.notBlank(lineId);
Assert.notNull(mode); Assert.notNull(mode);
unionId = StrUtil.emptyToNull(Vi.getUnionId()); unionId = StrUtil.emptyToNull(Vi.getUnionId());
if (mode == 1 && !ShiroUtil.hasRole("H04")&&!ShiroUtil.hasRole("sysadmin")) { if (mode == 1 && !ShiroUtil.hasRole("H04")) {
return Result.error("您没有分工会角色权限!"); return Result.error("您没有分工会角色权限!");
} else if (mode == 2 && !ShiroUtil.hasRole("SchoolUnionAdmin")&&!ShiroUtil.hasRole("sysadmin")) { } else if (mode == 2 && !ShiroUtil.hasRole("SchoolUnionAdmin")) {
return Result.error("您没有校工会角色权限!"); return Result.error("您没有校工会角色权限!");
} }
return Result.success(unionSelectService.selectLineInfo(lineId, unionId, mode, year)); return Result.success(unionSelectService.selectLineInfo(lineId, unionId,mode, year));
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
return Result.error(e.getMessage()); return Result.error(e.getMessage());
@@ -237,7 +266,7 @@ public class TheRapyRecuperationLineUnionSelectController {
@At @At
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object findUsLineInfo(String lineId, String usUnionId) { public Object findUsLineInfo(String lineId, String usUnionId) {
return unionSelectService.findUsLineInfo(lineId, usUnionId); return unionSelectService.findUsLineInfo(lineId, usUnionId);
} }
@@ -245,7 +274,7 @@ public class TheRapyRecuperationLineUnionSelectController {
@At("/deSelect") @At("/deSelect")
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
@SLog(tag = "疗休养", msg = "取消选择线路", param = true, result = true) @SLog(tag = "疗休养", msg = "取消选择线路", param = true, result = true)
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public Object deSelect(@Param("lineId") String lineId, @Param("unionId") String unionId) { public Object deSelect(@Param("lineId") String lineId, @Param("unionId") String unionId) {
@@ -256,29 +285,8 @@ public class TheRapyRecuperationLineUnionSelectController {
// enrollCnd.and("takePartInLineId", "=", lineId); // enrollCnd.and("takePartInLineId", "=", lineId);
Cnd enrollCnd = Cnd.where("unionId", "=", unionId); Cnd enrollCnd = Cnd.where("unionId", "=", unionId);
enrollCnd.and("lineId", "=", lineId); enrollCnd.and("lineId", "=", lineId);
List<TheRapyRecuperationLineUnionSelect> unionSelects = unionSelectService.query(enrollCnd);
List<String> list = unionSelects.stream().map(TheRapyRecuperationLineUnionSelect::getId).collect(Collectors.toList());
List<TheRapyRecuperationEnroll> enrolls = unionSelectService.dao().query(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "in", list));
List<String> enrollIdList = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
List<String> bedIdList = enrolls.stream().map(TheRapyRecuperationEnroll::getBedInfoId).collect(Collectors.toList());
//同伴信息
List<TheRapyRecuperationEnrollCompanion> companions = unionSelectService.dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", enrollIdList));
List<String> comBedIdList = companions.stream().map(TheRapyRecuperationEnrollCompanion::getBedInfoId).collect(Collectors.toList());
//删除报名记录
unionSelectService.dao().clear(TheRapyRecuperationEnroll.class, Cnd.where("id", "in", enrollIdList));
//删除床位记录
unionSelectService.dao().clear(TheRapyRecuperationEnrollBed.class, Cnd.where("id", "in", bedIdList));
//删除同伴信息
unionSelectService.dao().clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", enrollIdList));
//删除变更记录
unionSelectService.dao().clear(TheRapyRecuperationEnrollChangeRecord.class, Cnd.where("enrollId", "in", enrollIdList));
//删除同伴床位信息
unionSelectService.dao().clear(TheRapyRecuperationEnrollBed.class, Cnd.where("id", "in", comBedIdList));
unionSelectService.clear(enrollCnd); unionSelectService.clear(enrollCnd);
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
return Result.error(e.getMessage()); return Result.error(e.getMessage());
@@ -293,7 +301,7 @@ public class TheRapyRecuperationLineUnionSelectController {
*/ */
@At @At
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object getTravelAgencyOptions() { public Object getTravelAgencyOptions() {
List<TheRapyRecuperationTravelAgency> travelAgencies = unionSelectService.dao().query(TheRapyRecuperationTravelAgency.class, Cnd.NEW().asc("serialNumber")); List<TheRapyRecuperationTravelAgency> travelAgencies = unionSelectService.dao().query(TheRapyRecuperationTravelAgency.class, Cnd.NEW().asc("serialNumber"));
return travelAgencies; return travelAgencies;
@@ -321,7 +329,7 @@ public class TheRapyRecuperationLineUnionSelectController {
@At("/getLineConfig/?") @At("/getLineConfig/?")
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object getLineConfig(String id) { public Object getLineConfig(String id) {
Sql sql = Sqls.create("select lotId from the_rapy_recuperation_line where id = @lineId"); Sql sql = Sqls.create("select lotId from the_rapy_recuperation_line where id = @lineId");
sql.setParam("lineId", id); sql.setParam("lineId", id);
@@ -330,52 +338,89 @@ public class TheRapyRecuperationLineUnionSelectController {
Integer cost = Optional.ofNullable(lotInfo).map(v -> v.getActivityCost()).orElse(0); Integer cost = Optional.ofNullable(lotInfo).map(v -> v.getActivityCost()).orElse(0);
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW()); TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
Integer groupNumber = Optional.ofNullable(config).map(TheRapyRecuperationConfig::getGroupNumber).orElse(0); Integer groupNumber = Optional.ofNullable(config).map(TheRapyRecuperationConfig::getGroupNumber).orElse(0);
Integer outsideQuota = Optional.ofNullable(config).map(TheRapyRecuperationConfig::getOutsideQuota).orElse(0); return Result.success(Map.of("cost", cost, "groupNumber", groupNumber));
return Result.success(Map.of("cost", cost, "groupNumber", groupNumber, "outsideQuota", outsideQuota));
} }
/** /**
* 一键统赋时间,针对于已选择的线路 * 一键统赋时间,针对于已选择的线路
* * @param lineIds 线路Id数组
* @param lineIds 线路Id数组
* @param lineUnionSelects 出行时段 * @param lineUnionSelects 出行时段
* @return {@link Object} * @return {@link Object}
*/ */
@At("/setGiveLineTimes") @At("/setGiveLineTimes")
@POST @POST
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SLog(type = "普惠疗休养", tag = "分工会/校工会选择线路", msg = "一键统赋时间,针对于已选择的线路", param = true, result = true) @SLog(type = "普惠疗休养",tag = "分工会/校工会选择线路",msg = "一键统赋时间,针对于已选择的线路",param = true,result = true)
public Object setGiveLineTimes(@Param("lineIds") String[] lineIds, @Param("lineUnionSelects") TheRapyRecuperationLineUnionSelect[] lineUnionSelects) { public Object setGiveLineTimes(@Param("lineIds") String[] lineIds,@Param("lineUnionSelects") TheRapyRecuperationLineUnionSelect[] lineUnionSelects,
@Param(value = "year",required = false) Integer year) {
if (Lang.isNotEmpty(lineUnionSelects) && Lang.isNotEmpty(lineIds)) { if (Lang.isNotEmpty(lineUnionSelects) && Lang.isNotEmpty(lineIds)) {
TheRapyRecuperationLineUnionSelect lineUnionSelect = lineUnionSelects[0]; TheRapyRecuperationLineUnionSelect lineUnionSelect = lineUnionSelects[0];
Chain chain = Chain.make("enable", 1); Cnd cnd = Cnd.NEW();
if (lineUnionSelect.getSignUpStartTime() != null) cnd.and("unionId","=",Vi.getUnionId());
chain.add("signUpStartTime", lineUnionSelect.getSignUpStartTime()); cnd.and("selectUserId","=", ShiroUtil.getUserId());
if (lineUnionSelect.getSignUpEndTime() != null) cnd.and("YEAR(selectTime)","=",year == null ? DateUtil.thisYear() : year);
chain.add("signUpEndTime", lineUnionSelect.getSignUpEndTime()); List<TheRapyRecuperationLineUnionSelect> unionSelectList = dao.query(TheRapyRecuperationLineUnionSelect.class, cnd);
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(TheRapyRecuperationLineUnionSelect.class, chain, Cnd.where("id", "in", lineIds)); List<String> selectIdList = unionSelectList.stream().map(TheRapyRecuperationLineUnionSelect::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(TheRapyRecuperationLineUnionSelect.class,chain,Cnd.where("id","in",selectIdList));
} }
return null; return null;
} }
@At
@ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
@SLog(type = "普惠疗休养",tag = "分工会/校工会选择线路",msg = "是否开放对外报名",param = true,result = true)
public Object doEditOpen(String id){
dao.update(TheRapyRecuperationLineUnionSelect.class,Chain.makeSpecial("isOpen", "isOpen ^ 1"), Cnd.where("id", "=", id));
return null;
}
@At @At
@ViReturn @ViReturn
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect"}, logical = Logical.OR) @RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
@SLog(type = "普惠疗休养", tag = "分工会/校工会选择线路", msg = "是否开放对外报名", param = true, result = true) public Object queryJoinUser(String keyWord){
public Object doEditOpen(String id) { Sql sql = Sqls.create("""
dao.update(TheRapyRecuperationLineUnionSelect.class, Chain.makeSpecial("isOpen", "isOpen ^ 1"), Cnd.where("id", "=", id)); select
return null; id,
username,
loginname,
sex,
mobile,
unitname,
unionname
from
user
$condition
""");
Cnd cnd = Cnd.NEW();
if(StrUtil.isNotBlank(keyWord)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("userName", keyWord);
seg.orLike("loginName", keyWord);
cnd.and(seg);
}
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
cnd.and(new Static("id in (select userId from activity_user_scope where groupId = '%s')".formatted(config.getActivityGroupId())));
cnd.groupBy("id");
cnd.asc("loginname");
sql.setCondition(cnd);
Pagination pagination = unionSelectService.listPageMap(1, 30, sql);
return pagination.getList();
} }
} }
@@ -1,9 +1,8 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.process; package io.v.nutz.zhgh.therapyRecuperation.controller.process;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.service.BaseService; import io.v.nutz.base.service.BaseService;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
@@ -47,7 +46,7 @@ public class TheRapyRecuperationStatisticsController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
line.lineName, line.lineName,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE isNormal=true and line.id = takePartInLineId ) AS enrollNum, ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE line.id = takePartInLineId ) AS enrollNum,
( (
SELECT SELECT
COUNT( 1 ) COUNT( 1 )
@@ -123,7 +122,7 @@ public class TheRapyRecuperationStatisticsController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
agency.travelAgencyName, agency.travelAgencyName,
( SELECT AVG( evaluationForTravelAgency ) FROM the_rapy_recuperation_enroll where isNormal=true and agency.id=takePartInTravelAgencyId) AS avg ( SELECT AVG( evaluationForTravelAgency ) FROM the_rapy_recuperation_enroll where agency.id=takePartInTravelAgencyId) AS avg
FROM FROM
`the_rapy_recuperation_travel_agency` agency `the_rapy_recuperation_travel_agency` agency
WHERE WHERE
@@ -140,7 +139,7 @@ public class TheRapyRecuperationStatisticsController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
line.lineName, line.lineName,
( SELECT AVG( evaluationForLine ) FROM the_rapy_recuperation_enroll where isNormal=true and line.id=takePartInLineId) AS avg ( SELECT AVG( evaluationForLine ) FROM the_rapy_recuperation_enroll where line.id=takePartInLineId) AS avg
FROM FROM
`the_rapy_recuperation_line` line `the_rapy_recuperation_line` line
WHERE WHERE
@@ -7,26 +7,21 @@ import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.page.Pagination; import io.v.nutz.base.page.Pagination;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService; import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.utils.EmailUtil; import io.v.nutz.base.utils.EmailUtil;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.ViTool; import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.Sys_union; import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.base.Globals;
import io.v.nutz.web.commons.slog.annotation.SLog;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.common.TherapyRecuperationCommon;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.*; import io.v.nutz.zhgh.therapyRecuperation.model.*;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService;
import io.v.nutz.web.commons.base.Globals;
import io.v.nutz.web.commons.slog.annotation.SLog;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -81,22 +76,15 @@ public class TheRapyRecuperationUnionQueryController {
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getXlData(PageForm pageForm, public Object getXlData(PageForm pageForm, String year, String unionId, String takePartInLineId, String regionalNature, String lotId) {
String year,
String unionId,
String takePartInLineId,
String regionalNature,
String lotId,
String state,
String selectId) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
enroll.id as enrollId, line.id,
lineu.id,
line.lineName, line.lineName,
line.regionalNature, line.regionalNature,
lineu.lineId, lineu.lineId,
lineu.id AS selectId,
lineu.signUpMode, lineu.signUpMode,
YEAR(lineu.selectTime) as `year`, YEAR(lineu.selectTime) as `year`,
CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime, CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime,
@@ -109,15 +97,15 @@ public class TheRapyRecuperationUnionQueryController {
un.unionname, un.unionname,
lot.lotName, lot.lotName,
lot.lotValue, lot.lotValue,
enroll.familyNumber, SUM(enroll.familyNumber) AS familyNumber,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE isNormal=true and takePartInLineId = lineu.id and stateId=@stateId $unionCnd) lineNum, ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE takePartInLineId = lineu.id and stateId=@stateId $unionCnd) lineNum,
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where isNormal=true and stateId=2750 and takePartInLineId = lineu.id $unionCnd)) as signUpUserFamilyNum (select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where takePartInLineId = lineu.id $unionCnd)) as signUpUserFamilyNum
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lineu.travelAgencyId = lxs.id LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
LEFT JOIN sys_union un ON un.id = enroll.takePartInUnionId LEFT JOIN sys_union un ON un.id = enroll.takePartInUnionId
$condition $condition
""").setParam("stateId", TheRapyRecuperationState.PASS); """).setParam("stateId", TheRapyRecuperationState.PASS);
@@ -128,10 +116,10 @@ public class TheRapyRecuperationUnionQueryController {
if (!ShiroUtil.hasAnyRoles("sysadmin,H06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,H06")) {
// sql.setVar("unionCnd", "and (takePartInUnionId='%s' or selfUnionId='%s')".formatted(Vi.getUnionId(), Vi.getUnionId())); // sql.setVar("unionCnd", "and (takePartInUnionId='%s' or selfUnionId='%s')".formatted(Vi.getUnionId(), Vi.getUnionId()));
String unionCndSql = StrUtil.isBlank(year) ? "and (takePartInUnionId='%s' or selfUnionId='%s')".formatted(Vi.getUnionId(), Vi.getUnionId()) : "and (takePartInUnionId='%s' or selfUnionId='%s') and YEAR(signingUptime)='%s'".formatted(Vi.getUnionId(), Vi.getUnionId(), year); String unionCndSql = StrUtil.isBlank(year) ? "and selfUnionId='%s'".formatted(Vi.getUnionId()) : "and selfUnionId='%s' and YEAR(signingUptime)='%s'".formatted(Vi.getUnionId(), year);
sql.setVar("unionCnd", unionCndSql); sql.setVar("unionCnd", unionCndSql);
cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId())); // cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId()));
//cnd.and("enroll.selfUnionId", "=", Vi.getUnionId()); cnd.and("enroll.selfUnionId", "=", Vi.getUnionId());
/* if (Strings.isNotBlank(unionId)) { /* if (Strings.isNotBlank(unionId)) {
cnd.andEX("enroll.selfUnionId", "=", unionId); cnd.andEX("enroll.selfUnionId", "=", unionId);
//cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId)); //cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId));
@@ -141,38 +129,21 @@ public class TheRapyRecuperationUnionQueryController {
}*/ }*/
} else { } else {
if (Strings.isNotBlank(unionId)) { if (Strings.isNotBlank(unionId)) {
cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId)); // cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId));
//cnd.and("enroll.selfUnionId", "=", unionId); cnd.and("enroll.selfUnionId", "=", unionId);
} }
} }
if (Strings.isNotBlank(regionalNature)) { if (Strings.isNotBlank(regionalNature)) {
sql.setVar("regionalNature", "AND line.regionalNature='%s'".formatted(regionalNature)); sql.setVar("regionalNature", "AND line.regionalNature='%s'".formatted(regionalNature));
} }
if(state.equals("2")) {
cnd.and("enroll.takePartInTravelAgencyId", "is not", null)
.and("enroll.takePartInTravelAgencyId", "!=", "");
} else {
cnd.and("enroll.takePartInLineId", "is not", null)
.and("enroll.takePartInLineId", "!=", "");
}
cnd.andEX("line.lotId", "=", lotId); cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("lineu.lineId", "=", takePartInLineId); cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
cnd.andEX("line.regionalNature", "=", regionalNature); cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.groupBy("enroll.takePartInLineId"); cnd.groupBy("enroll.takePartInLineId");
cnd.desc("un.unioncode"); cnd.desc("un.unioncode");
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
list.forEach(v -> {
List<TheRapyRecuperationEnrollCompanion> companionList = baseService.dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("enrollId")));
for (TheRapyRecuperationEnrollCompanion enrollCompanion : companionList) {
baseService.dao().fetchLinks(enrollCompanion, "bedInfo");
}
v.setv("companionList", companionList);
});
return pagination;
} }
@@ -181,8 +152,7 @@ public class TheRapyRecuperationUnionQueryController {
@RequiresAuthentication @RequiresAuthentication
public Object getRyData(PageForm pageForm, String year, String unionId, String unitId, public Object getRyData(PageForm pageForm, String year, String unionId, String unitId,
String takePartInLineId, String regionalNature, String state, String takePartInLineId, String regionalNature, String state,
String state2, String agencyId, String takePartInBaseManagementId, String state2, String agencyId, String takePartInBaseManagementId, String lotId) {
String lotId, String selectId) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
@@ -193,7 +163,6 @@ public class TheRapyRecuperationUnionQueryController {
agency.travelAgencyName, agency.travelAgencyName,
ma.baseName, ma.baseName,
enroll.*, enroll.*,
IF(enroll.isReimbursement = 1,'已报销','未报销') AS reimbursementStatus,
lineu.lineId, lineu.lineId,
lineu.playStartTime, lineu.playStartTime,
lineu.playEndTime, lineu.playEndTime,
@@ -226,10 +195,10 @@ public class TheRapyRecuperationUnionQueryController {
cnd.and(seg); cnd.and(seg);
} }
if (ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")) {
if (Strings.isNotBlank(unionId) && state.equals("1")) { if (Strings.isNotBlank(unionId) && state.equals("1")) {
cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId)); // cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId));
//cnd.and("enroll.selfUnionId", "=", unionId); cnd.and("enroll.selfUnionId", "=", unionId);
} }
cnd.andEX("enroll.selfUnionId", "=", unionId); cnd.andEX("enroll.selfUnionId", "=", unionId);
} else { } else {
@@ -249,21 +218,18 @@ public class TheRapyRecuperationUnionQueryController {
cnd.andEX("lineu.signUpMode", "=", 2); cnd.andEX("lineu.signUpMode", "=", 2);
} }
} else { } else {
cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId())); // cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId()));
//cnd.and("enroll.selfUnionId", "=", Vi.getUnionId()); cnd.and("enroll.selfUnionId", "=", Vi.getUnionId());
} }
} }
cnd.andEX("enroll.selfUnitId", "=", unitId); cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("lineu.lineId", "=", takePartInLineId); cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
if (state.equals("1")) { if (state.equals("1")) {
cnd.andEX("line.regionalNature", "=", regionalNature); cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.and("enroll.takePartInLineId", "is not", null); cnd.and("enroll.takePartInLineId", "is not", null);
cnd.and("enroll.takePartInLineId", "!=", "");
sql.setVar("lotSql", ",(select lotName from the_rapy_recuperation_lot where id = line.lotId) as lotName"); sql.setVar("lotSql", ",(select lotName from the_rapy_recuperation_lot where id = line.lotId) as lotName");
} else if (state.equals("2")) { } else if (state.equals("2")) {
cnd.and("enroll.takePartInTravelAgencyId", "is not", null); cnd.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId); cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
} else if ("3".equals(state)) { } else if ("3".equals(state)) {
cnd.and("enroll.takePartInBaseManagementId", "is not", null); cnd.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -292,7 +258,7 @@ public class TheRapyRecuperationUnionQueryController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
*, *,
files AS fileId, cast( files ->> '$[0].id' AS CHAR ) AS fileId,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE agency.id = takePartInTravelAgencyId and isNormal=true and stateId=@stateId $unionCnd $yearCnd) agencyNum ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE agency.id = takePartInTravelAgencyId and isNormal=true and stateId=@stateId $unionCnd $yearCnd) agencyNum
FROM FROM
the_rapy_recuperation_travel_agency agency the_rapy_recuperation_travel_agency agency
@@ -357,7 +323,6 @@ public class TheRapyRecuperationUnionQueryController {
state.stateName, state.stateName,
state.stateColor, state.stateColor,
enroll.*, enroll.*,
IF(enroll.isReimbursement = 1,'已报销','未报销') AS reimbursementStatus,
lineu.lineId, lineu.lineId,
lineu.playStartTime, lineu.playStartTime,
lineu.playEndTime, lineu.playEndTime,
@@ -385,17 +350,17 @@ public class TheRapyRecuperationUnionQueryController {
cnd.andEX("enroll.stateId", "=", TheRapyRecuperationState.PASS); cnd.andEX("enroll.stateId", "=", TheRapyRecuperationState.PASS);
cnd.andEX("enroll.selfUnitId", "=", unitId); cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("enroll.isNormal", "=", true); cnd.andEX("enroll.isNormal", "=", true);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")) {
if (StrUtil.isNotBlank(unionId)) { if (StrUtil.isNotBlank(unionId)) {
cnd.and("enroll.selfUnionId", "=", unionId); cnd.and("enroll.selfUnionId", "=", unionId);
} else { } else {
cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId())); // cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId()));
//cnd.and("enroll.selfUnionId", "=", Vi.getUnionId()); cnd.and("enroll.selfUnionId", "=", Vi.getUnionId());
} }
} else { } else {
if (StrUtil.isNotBlank(unionId)) { if (StrUtil.isNotBlank(unionId)) {
cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId)); // cnd.and(Cnd.exps("enroll.takePartInUnionId", "=", unionId).or("enroll.selfUnionId", "=", unionId));
//cnd.and("enroll.selfUnionId", "=", unionId); cnd.and("enroll.selfUnionId", "=", unionId);
} }
} }
cnd.desc("enroll.stateId"); cnd.desc("enroll.stateId");
@@ -444,6 +409,9 @@ public class TheRapyRecuperationUnionQueryController {
if (Strings.isNotBlank(searchKeyword) && Strings.isNotBlank(searchName)) { if (Strings.isNotBlank(searchKeyword) && Strings.isNotBlank(searchName)) {
cnd.and(Cnd.likeEX(searchName, searchKeyword)); cnd.and(Cnd.likeEX(searchName, searchKeyword));
} }
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
cnd.and(Cnd.exps("takePartInUnionId", "=", Vi.getUnionId()).or("selfUnionId", "=", Vi.getUnionId()));
}
cnd.and("stateId", "=", TheRapyRecuperationState.PASS); cnd.and("stateId", "=", TheRapyRecuperationState.PASS);
cnd.and("isNormal", "=", true); cnd.and("isNormal", "=", true);
cnd.desc("unitName"); cnd.desc("unitName");
@@ -536,7 +504,7 @@ public class TheRapyRecuperationUnionQueryController {
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object getApplyNum(String state, String state2, String unionId, Integer year, String regionalNature, String takePartInLineId, String selectId) { public Object getApplyNum(String state, String state2, String unionId, Integer year, String regionalNature, String takePartInLineId) {
Cnd cnd1 = Cnd.NEW(); Cnd cnd1 = Cnd.NEW();
Sql sql1 = Sqls.create(""" Sql sql1 = Sqls.create("""
SELECT SELECT
@@ -552,16 +520,13 @@ public class TheRapyRecuperationUnionQueryController {
if (Strings.isNotBlank(state)) { if (Strings.isNotBlank(state)) {
if (state.equals("1")) { if (state.equals("1")) {
cnd1.andEX("line.regionalNature", "=", regionalNature); cnd1.andEX("line.regionalNature", "=", regionalNature);
cnd1.and("enroll.takePartInLineId", "is not", null); // cnd1.and("enroll.takePartInTravelAgencyId", "is", null);
cnd1.and("enroll.takePartInLineId", "!=", "");
if (StrUtil.isBlank(state2)) { if (StrUtil.isBlank(state2)) {
cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId())); // cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId()));
//cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId())); cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
} }
} else if (state.equals("2")) { } else if (state.equals("2")) {
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null) cnd1.and("enroll.takePartInTravelAgencyId", "is not", null).and("enroll.selfUnionId", "=", Vi.getUnionId());
.and("enroll.takePartInTravelAgencyId", "!=", "")
.and("enroll.selfUnionId", "=", Vi.getUnionId());
} else { } else {
cnd1.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", Vi.getUnionId()); cnd1.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", Vi.getUnionId());
} }
@@ -582,8 +547,8 @@ public class TheRapyRecuperationUnionQueryController {
} }
} }
} else { } else {
cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId())); // cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId()));
//cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId())); cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
} }
} else { } else {
if (Strings.isNotBlank(state)) { if (Strings.isNotBlank(state)) {
@@ -593,10 +558,8 @@ public class TheRapyRecuperationUnionQueryController {
} }
cnd1.andEX("line.regionalNature", "=", regionalNature); cnd1.andEX("line.regionalNature", "=", regionalNature);
cnd1.and("enroll.takePartInLineId", "is not", null); cnd1.and("enroll.takePartInLineId", "is not", null);
cnd1.and("enroll.takePartInLineId", "!=", "");
} else if (state.equals("2")) { } else if (state.equals("2")) {
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null); cnd1.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd1.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd1.andEX("enroll.selfUnionId", "=", unionId); cnd1.andEX("enroll.selfUnionId", "=", unionId);
} else if (state.equals("3")) { } else if (state.equals("3")) {
cnd1.and("enroll.takePartInBaseManagementId", "is not", null); cnd1.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -605,13 +568,12 @@ public class TheRapyRecuperationUnionQueryController {
} }
} else { } else {
if (Strings.isNotBlank(unionId)) { if (Strings.isNotBlank(unionId)) {
cnd1.and(Cnd.exps("enroll.selfUnionId", "=", unionId).or("enroll.takePartInUnionId", "=", unionId)); // cnd1.and(Cnd.exps("enroll.selfUnionId", "=", unionId).or("enroll.takePartInUnionId", "=", unionId));
//cnd1.and(Cnd.exps("enroll.selfUnionId", "=", unionId)); cnd1.and(Cnd.exps("enroll.selfUnionId", "=", unionId));
} }
} }
} }
cnd1.andEX("lineu.lineId", "=", takePartInLineId); cnd1.andEX("line.id", "=", takePartInLineId);
cnd1.andEX("lineu.id", "=", selectId);
cnd1.andEX("YEAR(enroll.signingUptime)", "= ", year); cnd1.andEX("YEAR(enroll.signingUptime)", "= ", year);
cnd1.andEX("enroll.isNormal", "= ", true); cnd1.andEX("enroll.isNormal", "= ", true);
cnd1.andEX("enroll.stateId", "= ", TheRapyRecuperationState.PASS); cnd1.andEX("enroll.stateId", "= ", TheRapyRecuperationState.PASS);
@@ -643,15 +605,12 @@ public class TheRapyRecuperationUnionQueryController {
if (state.equals("1")) { if (state.equals("1")) {
cnd2.andEX("line.regionalNature", "=", regionalNature); cnd2.andEX("line.regionalNature", "=", regionalNature);
cnd2.and("enroll.takePartInLineId", "is not", null); cnd2.and("enroll.takePartInLineId", "is not", null);
cnd2.and("enroll.takePartInLineId", "!=", "");
if (StrUtil.isBlank(state2)) { if (StrUtil.isBlank(state2)) {
cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId())); // cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId()));
//cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId())); cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
} }
} else if (state.equals("2")) { } else if (state.equals("2")) {
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null) cnd2.and("enroll.takePartInTravelAgencyId", "is not", null).and("enroll.selfUnionId", "=", Vi.getUnionId());
.and("enroll.takePartInTravelAgencyId", "!=", "")
.and("enroll.selfUnionId", "=", Vi.getUnionId());
} else { } else {
cnd2.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", Vi.getUnionId()); cnd2.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", Vi.getUnionId());
} }
@@ -671,22 +630,20 @@ public class TheRapyRecuperationUnionQueryController {
} }
} }
} else { } else {
cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId())); // cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()).or("enroll.takePartInUnionId", "=", Vi.getUnionId()));
//cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId())); cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
} }
} else { } else {
if (Strings.isNotBlank(state)) { if (Strings.isNotBlank(state)) {
if (state.equals("1")) { if (state.equals("1")) {
if (Strings.isNotBlank(unionId)) { if (Strings.isNotBlank(unionId)) {
cnd2.and(Cnd.exps("enroll.selfUnionId", "=", unionId).or("enroll.takePartInUnionId", "=", unionId)); // cnd2.and(Cnd.exps("enroll.selfUnionId", "=", unionId).or("enroll.takePartInUnionId", "=", unionId));
//cnd2.and(Cnd.exps("enroll.selfUnionId", "=", unionId)); cnd2.and(Cnd.exps("enroll.selfUnionId", "=", unionId));
} }
cnd2.andEX("line.regionalNature", "=", regionalNature); cnd2.andEX("line.regionalNature", "=", regionalNature);
cnd2.and("enroll.takePartInLineId", "is not", null); cnd2.and("enroll.takePartInLineId", "is not", null);
cnd2.and("enroll.takePartInLineId", "!=", "");
} else if (state.equals("2")) { } else if (state.equals("2")) {
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null); cnd2.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd2.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd2.andEX("enroll.selfUnionId", "=", unionId); cnd2.andEX("enroll.selfUnionId", "=", unionId);
} else { } else {
cnd2.and("enroll.takePartInBaseManagementId", "is not", null); cnd2.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -695,8 +652,7 @@ public class TheRapyRecuperationUnionQueryController {
cnd2.andEX("enroll.selfUnionId", "=", unionId); cnd2.andEX("enroll.selfUnionId", "=", unionId);
} }
} }
cnd2.andEX("lineu.lineId", "=", takePartInLineId); cnd2.andEX("line.id", "=", takePartInLineId);
cnd2.andEX("lineu.id", "=", selectId);
cnd2.andEX("YEAR(enroll.signingUptime)", "=", year); cnd2.andEX("YEAR(enroll.signingUptime)", "=", year);
cnd2.andEX("enroll.isNormal", "=", true); cnd2.andEX("enroll.isNormal", "=", true);
cnd2.andEX("enroll.stateId", "=", TheRapyRecuperationState.PASS); cnd2.andEX("enroll.stateId", "=", TheRapyRecuperationState.PASS);
@@ -731,19 +687,12 @@ public class TheRapyRecuperationUnionQueryController {
.and("YEAR(signingUptime)", "=", year) .and("YEAR(signingUptime)", "=", year)
.and("stateId", "=", TheRapyRecuperationState.PASS)); .and("stateId", "=", TheRapyRecuperationState.PASS));
TheRapyRecuperationTravelAgency travelAgency = baseService.dao().fetch(TheRapyRecuperationTravelAgency.class, Cnd.where("id", "=", id)); TheRapyRecuperationTravelAgency travelAgency = baseService.dao().fetch(TheRapyRecuperationTravelAgency.class, Cnd.where("id", "=", id));
List<Sys_user> sysUsers = baseService.dao().query(Sys_user.class, Cnd.NEW());
Map<String, String> userMap = sysUsers.stream().collect(Collectors.toMap(Sys_user::getLoginname, Sys_user::getSchoolTime));
if (travelAgency != null) { if (travelAgency != null) {
enrollList.forEach(v -> { enrollList.forEach(v -> {
baseService.dao().fetchLinks(v, "companionList"); baseService.dao().fetchLinks(v, "companionList");
}); });
List<NutMap> arrayList = new ArrayList<>(); List<NutMap> arrayList = new ArrayList<>();
enrollList.forEach(v -> { enrollList.forEach(v -> {
String schoolTime = userMap.getOrDefault(v.getLoginName(), "");
String sTime = TherapyRecuperationCommon.getRemarkBySchoolTime(schoolTime);
arrayList.add(new NutMap() {{ arrayList.add(new NutMap() {{
addv("userName", v.getUserName()); addv("userName", v.getUserName());
addv("loginName", v.getLoginName()); addv("loginName", v.getLoginName());
@@ -753,7 +702,6 @@ public class TheRapyRecuperationUnionQueryController {
addv("idCard", v.getIdCard()); addv("idCard", v.getIdCard());
addv("relation", "本人"); addv("relation", "本人");
addv("bz", v.getUserName()); addv("bz", v.getUserName());
addv("remark", sTime);
}}); }});
v.getCompanionList().forEach(c -> { v.getCompanionList().forEach(c -> {
arrayList.add(new NutMap() {{ arrayList.add(new NutMap() {{
@@ -778,7 +726,7 @@ public class TheRapyRecuperationUnionQueryController {
exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 60)); exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 60));
exportEntities.add(new ExcelExportEntity("与本人关系", "relation", 60)); exportEntities.add(new ExcelExportEntity("与本人关系", "relation", 60));
exportEntities.add(new ExcelExportEntity("备注", "bz", 20)); exportEntities.add(new ExcelExportEntity("备注", "bz", 20));
exportEntities.add(new ExcelExportEntity("备注2", "remark", 30));
File xls = new File("C:\\疗休养报名信息表.xls"); File xls = new File("C:\\疗休养报名信息表.xls");
FileOutputStream fileOutputStream = null; FileOutputStream fileOutputStream = null;
@@ -798,6 +746,7 @@ public class TheRapyRecuperationUnionQueryController {
return null; return null;
} }
@At @At
@ViReturn @ViReturn
public Object doAttend(@Param("data") String multipleSelection) { public Object doAttend(@Param("data") String multipleSelection) {
@@ -877,7 +826,7 @@ public class TheRapyRecuperationUnionQueryController {
} }
}); });
map.put("maplist", nutMaps); map.put("maplist", nutMaps);
map.put("unionName", ((Sys_union) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("union")).getUnionname()); map.put("unionName", ((Sys_union) ShiroUtil.getPrincipalProperty("union")).getUnionname());
try { try {
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
ViTool.excelResponse(response, "教职工疗休养组团时间路线申报表.xlsx"); ViTool.excelResponse(response, "教职工疗休养组团时间路线申报表.xlsx");
@@ -5,21 +5,15 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService; import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool; import io.v.nutz.base.query.PageForm;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.common.TherapyRecuperationCommon;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.mode.TheRapyRecuperationEnrollExcelMode; import io.v.nutz.zhgh.therapyRecuperation.mode.TheRapyRecuperationEnrollExcelMode;
import io.v.nutz.zhgh.therapyRecuperation.model.*; import io.v.nutz.zhgh.therapyRecuperation.model.*;
@@ -28,7 +22,6 @@ import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
@@ -42,23 +35,17 @@ import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy; import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor; import org.nutz.mvc.upload.UploadAdaptor;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@IocBean @IocBean
@At("/platform/theRapyRecuperation/user/query") @At("/platform/theRapyRecuperation/user/query")
@@ -84,7 +71,7 @@ public class TheRapyRecuperationUserQueryController {
public Object pageData(String regionalNature, Integer state, PageForm pageForm, public Object pageData(String regionalNature, Integer state, PageForm pageForm,
Integer startYear, Integer endYear, String unionId, Integer startYear, Integer endYear, String unionId,
String unitId, String takePartInLineId, String agencyId, String lotId, String unitId, String takePartInLineId, String agencyId, String lotId,
String takePartInBaseManagementId, String signUpMode) { String takePartInBaseManagementId,String signUpMode) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(pageForm.getSearchKeyword()) && Strings.isNotBlank(pageForm.getSearchName())) { if (Strings.isNotBlank(pageForm.getSearchKeyword()) && Strings.isNotBlank(pageForm.getSearchName())) {
@@ -96,17 +83,14 @@ public class TheRapyRecuperationUserQueryController {
sql = Sqls.create(""" sql = Sqls.create("""
SELECT SELECT
enroll.*, enroll.*,
IF(enroll.isReimbursement = 1,'已报销','未报销') AS reimbursementStatus,
lxs.travelAgencyName, lxs.travelAgencyName,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = enroll.takePartInTravelAgencyId LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = enroll.takePartInTravelAgencyId
$condition $condition
"""); """);
if (!ShiroUtil.hasAnyRoles("sysadmin, A06")) { cnd.andEX("enroll.selfUnionId", "=", Vi.getUnionId());
cnd.andEX("enroll.selfUnionId", "=", Vi.getUnionId());
}
cnd.andEX("lxs.`year`", ">=", startYear); cnd.andEX("lxs.`year`", ">=", startYear);
cnd.andEX("lxs.`year`", "<=", endYear); cnd.andEX("lxs.`year`", "<=", endYear);
cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId); cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
@@ -119,11 +103,10 @@ public class TheRapyRecuperationUserQueryController {
line.lineName, line.lineName,
ma.baseName, ma.baseName,
enroll.*, enroll.*,
IF(enroll.isReimbursement = 1,'已报销','未报销') AS reimbursementStatus,
lineu.lineId, lineu.lineId,
lineu.playStartTime, lineu.playStartTime,
lineu.playEndTime, lineu.playEndTime,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
@@ -138,7 +121,7 @@ public class TheRapyRecuperationUserQueryController {
cnd.andEX("enroll.selfUnitId", "=", unitId); cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("line.id", "=", takePartInLineId); cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("line.regionalNature", "=", regionalNature); cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.andEX("lineu.signUpMode", "=", signUpMode); cnd.andEX("lineu.signUpMode","=",signUpMode);
if (state == 3) { if (state == 3) {
sql.setVar("lotSql", "(select lotName from the_rapy_recuperation_lot where id = ma.lotId) as lotName"); sql.setVar("lotSql", "(select lotName from the_rapy_recuperation_lot where id = ma.lotId) as lotName");
cnd.and("enroll.takePartInBaseManagementId", "is not", null); cnd.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -146,7 +129,6 @@ public class TheRapyRecuperationUserQueryController {
} else { } else {
sql.setVar("lotSql", "(select lotName from the_rapy_recuperation_lot where id = line.lotId) as lotName"); sql.setVar("lotSql", "(select lotName from the_rapy_recuperation_lot where id = line.lotId) as lotName");
cnd.and("enroll.takePartInLineId", "is not", null); cnd.and("enroll.takePartInLineId", "is not", null);
cnd.and("enroll.takePartInLineId", "!=", "");
} }
if (StrUtil.isNotBlank(lotId)) { if (StrUtil.isNotBlank(lotId)) {
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
@@ -158,9 +140,9 @@ public class TheRapyRecuperationUserQueryController {
if (StrUtil.isNotBlank(unionId)) { if (StrUtil.isNotBlank(unionId)) {
cnd.and("enroll.selfUnionId", "=", unionId); cnd.and("enroll.selfUnionId", "=", unionId);
} }
cnd.and("enroll.stateId", "=", TheRapyRecuperationState.PASS);
} }
cnd.and("enroll.isNormal", "=", true); cnd.and("enroll.isNormal", "=", true);
cnd.and("enroll.stateId", "=", TheRapyRecuperationState.PASS);
cnd.desc("enroll.unionName"); cnd.desc("enroll.unionName");
sql.setCondition(cnd); sql.setCondition(cnd);
return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -177,23 +159,19 @@ public class TheRapyRecuperationUserQueryController {
} }
cnd.and("isNormal", "=", true); cnd.and("isNormal", "=", true);
cnd.and("takePartInLineId", "is not", null); cnd.and("takePartInLineId", "is not", null);
cnd.and("takePartInLineId", "!=", "");
cnd.and("stateId", "=", TheRapyRecuperationState.PASS); cnd.and("stateId", "=", TheRapyRecuperationState.PASS);
cnd.andEX("(select signUpMode from the_rapy_recuperation_line_union_select where id = takePartInLineId)", "=", signUpMode); cnd.andEX("(select signUpMode from the_rapy_recuperation_line_union_select where id = takePartInLineId)", "=", signUpMode);
int count = baseService.dao().count(TheRapyRecuperationEnroll.class, cnd); int count = baseService.dao().count(TheRapyRecuperationEnroll.class, cnd);
int count1 = baseService.dao().count(TheRapyRecuperationEnroll.class, Cnd.where("takePartInTravelAgencyId", "is not", null) int count1 = baseService.dao().count(TheRapyRecuperationEnroll.class, Cnd.where("takePartInTravelAgencyId", "is not", null)
.and("takePartInTravelAgencyId", "!=", "")
.andEX("selfUnionId", "=", unionId) .andEX("selfUnionId", "=", unionId)
.andEX("YEAR(signingUptime)", ">=", startYear) .andEX("YEAR(signingUptime)", ">=", startYear)
.andEX("YEAR(signingUptime)", "<=", endYear) .andEX("YEAR(signingUptime)", "<=", endYear)
.andEX("stateId", "=", TheRapyRecuperationState.PASS)
.andEX("isNormal", "=", true) .andEX("isNormal", "=", true)
.andEX("(select signUpMode from the_rapy_recuperation_line_union_select where id = takePartInLineId)", "=", signUpMode)); .andEX("(select signUpMode from the_rapy_recuperation_line_union_select where id = takePartInLineId)", "=", signUpMode));
int count2 = baseService.dao().count(TheRapyRecuperationEnroll.class, Cnd.where("takePartInBaseManagementId", "is not", null) int count2 = baseService.dao().count(TheRapyRecuperationEnroll.class, Cnd.where("takePartInBaseManagementId", "is not", null)
.andEX("selfUnionId", "=", unionId) .andEX("selfUnionId", "=", unionId)
.andEX("YEAR(signingUptime)", ">=", startYear) .andEX("YEAR(signingUptime)", ">=", startYear)
.andEX("YEAR(signingUptime)", "<=", endYear) .andEX("YEAR(signingUptime)", "<=", endYear)
.andEX("stateId", "=", TheRapyRecuperationState.PASS)
.andEX("isNormal", "=", true) .andEX("isNormal", "=", true)
.andEX("(select signUpMode from the_rapy_recuperation_line_union_select where id = takePartInLineId)", "=", signUpMode)); .andEX("(select signUpMode from the_rapy_recuperation_line_union_select where id = takePartInLineId)", "=", signUpMode));
return Map.of("xlCount", count, "lxsCount", count1, "jdCount", count2); return Map.of("xlCount", count, "lxsCount", count1, "jdCount", count2);
@@ -292,9 +270,10 @@ public class TheRapyRecuperationUserQueryController {
return null; return null;
} }
@At @At
@ViReturn @ViReturn
public Object getUnionSelectLine(Integer startYear, Integer endYear, Integer signUpMode, String regionalNature, Boolean flag, String disPlayUnionSelectId) { public Object getUnionSelectLine(Integer year,Integer signUpMode){
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
rlus.id, rlus.id,
@@ -305,7 +284,7 @@ public class TheRapyRecuperationUserQueryController {
DATE_FORMAT( rlus.playEndTime, '%Y-%m-%d' ) AS playEndTime, DATE_FORMAT( rlus.playEndTime, '%Y-%m-%d' ) AS playEndTime,
rl.lineName, rl.lineName,
rl.regionalNature, rl.regionalNature,
if(rlus.signUpMode=2,'工会','工会') AS signUpMode, if(rlus.signUpMode=1,'工会','工会') AS signUpMode,
lot.lotName lot.lotName
FROM FROM
`the_rapy_recuperation_line_union_select` rlus `the_rapy_recuperation_line_union_select` rlus
@@ -314,388 +293,30 @@ public class TheRapyRecuperationUserQueryController {
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (flag == null || !flag) { cnd.and(Cnd.exps("rlus.isOpen","=",1).or("rlus.unionId","=",Vi.getUnionId()));
SqlExpressionGroup group = new SqlExpressionGroup(); cnd.and("YEAR(rlus.selectTime)","=",DateUtil.thisYear());
if (ShiroUtil.hasAnyRoles("sysadmin,A06")) { // cnd.and("rlus.signUpMode","=",signUpMode);
group.and("rlus.isOpen", "=", 1);
//cnd.and(Cnd.exps("rlus.isOpen", "=", 1));
} else {
group.or("rlus.isOpen", "=", 1).or("rlus.unionId", "=", Vi.getUnionId());
//cnd.and(Cnd.exps("rlus.isOpen", "=", 1).or();
}
if(StrUtil.isNotBlank(disPlayUnionSelectId)) {
group.or("rlus.id", "=", disPlayUnionSelectId);
}
cnd.and(group);
} else {
cnd.andEX("YEAR(rlus.selectTime)", ">=", startYear);
cnd.andEX("YEAR(rlus.selectTime)", "<=", endYear);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
cnd.and(Cnd.exps("rlus.selectUserId", "=", ShiroUtil.getUserId()).or("rlus.unionId", "=", Vi.getUnionId()));
}
cnd.andEX("rl.regionalNature", "=", regionalNature);
cnd.groupBy("rlus.lineId");
}
cnd.and("YEAR(rlus.selectTime)", "in", startYear != null ? Lang.array(startYear) : Lang.array(DateUtil.thisYear()));
cnd.andEX("rlus.signUpMode", "=", signUpMode);
cnd.desc("lot.lotValue"); cnd.desc("lot.lotValue");
cnd.desc("rl.lineName"); cnd.desc("rl.lineName");
sql.setCondition(cnd); sql.setCondition(cnd);
return baseService.listMap(sql); return baseService.listMap(sql);
} }
@At
@Ok("void")
@ViReturn
@RequiresAuthentication
public void doExportExcel(@Param(value = "regionalNature", required = false) String regionalNature,
@Param(value = "state", required = false) Integer state,
@Param(value = "searchName", required = false) String searchName,
@Param(value = "searchKeyword", required = false) String searchKeyword,
@Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@Param(value = "takePartInLineId", required = false) String takePartInLineId,
@Param(value = "agencyId", required = false) String agencyId,
@Param(value = "lotId", required = false) String lotId,
@Param(value = "takePartInBaseManagementId", required = false) String takePartInBaseManagementId,
@Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "types", required = false) String[] types,
@Param(value = "satisfyPeople", required = false) Boolean satisfyPeople,
HttpServletResponse response) throws IOException {
Cnd commonCnd = Cnd.NEW();
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
commonCnd.and(Cnd.likeEX(searchName, searchKeyword));
}
if (!ShiroUtil.hasAnyRoles("sysadmin, A06")) {
commonCnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId()));
}
commonCnd.and("enroll.isNormal", "=", true);
commonCnd.and("enroll.stateId", "=", TheRapyRecuperationState.PASS);
//线路的查询
Sql lineSql = Sqls.create("""
SELECT
line.regionalNature,
lxs.travelAgencyName,
line.lineName,
enroll.*,
date_format( enroll.signingUptime, '%Y-%m-%d %H:%i:%s' ) signingUptimeFormat,
date_format( lineu.playStartTime, '%Y-%m-%d' ) playStartTime,
lineu.lineId,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id) familyCount,
u.schoolTime
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN `user` u on enroll.loginName = u.loginname
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = lineu.travelAgencyId
$condition
""");
Cnd lineCnd = commonCnd.clone();
lineCnd.andEX("YEAR(enroll.signingUptime)", ">=", startYear);
lineCnd.andEX("YEAR(enroll.signingUptime)", "<=", endYear);
lineCnd.andEX("enroll.selfUnitId", "=", unitId);
lineCnd.andEX("line.id", "=", takePartInLineId);
lineCnd.andEX("line.regionalNature", "=", regionalNature);
lineCnd.andEX("lineu.signUpMode", "=", signUpMode);
lineCnd.andEX("enroll.selfUnionId", "=", unionId);
lineCnd.and("enroll.takePartInLineId", "is not", null);
lineCnd.and("enroll.takePartInLineId", "!=", "");
if (StrUtil.isNotBlank(lotId)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("line.lotId", "=", lotId);
seg.or("ma.lotId", "=", lotId);
lineCnd.and(seg);
}
lineCnd.asc("lineName").asc("playStartTime").asc("unionName");
lineSql.setCondition(lineCnd);
List<NutMap> lineEnroll = baseService.listMap(lineSql);
lineEnroll.forEach(item -> {
String remark = TherapyRecuperationCommon.getRemarkBySchoolTime(item.getString("schoolTime"));
item.put("remark", remark);
});
//自由组团的查询
Sql travelSql = Sqls.create("""
SELECT
enroll.*,
lxs.travelAgencyName,
u.schoolTime
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN `user` u on enroll.loginName = u.loginname
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = enroll.takePartInTravelAgencyId
$condition
""");
Cnd travelCnd = commonCnd.clone();
travelCnd.andEX("enroll.selfUnionId", "=", unionId);
travelCnd.andEX("lxs.`year`", ">=", startYear);
travelCnd.andEX("lxs.`year`", "<=", endYear);
travelCnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
travelCnd.and("enroll.takePartInTravelAgencyId", "is not", null);
travelCnd.and("enroll.takePartInTravelAgencyId", "!=", "");
travelCnd.asc("travelAgencyName").desc("enroll.unionName");
travelSql.setCondition(travelCnd);
List<NutMap> travelEnroll = baseService.listMap(travelSql);
travelEnroll.forEach(item -> {
String remark = TherapyRecuperationCommon.getRemarkBySchoolTime(item.getString("schoolTime"));
item.put("remark", remark);
});
//公共的导出表头
ArrayList<ExcelExportEntity> commonEntities = new ArrayList<>();
commonEntities.add(new ExcelExportEntity("姓名", "userName", 20));
commonEntities.add(new ExcelExportEntity("工号", "loginName", 20));
commonEntities.add(new ExcelExportEntity("性别", "sex", 10));
commonEntities.add(new ExcelExportEntity("所属单位", "unitName", 20));
commonEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
commonEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
commonEntities.add(new ExcelExportEntity("手机号", "mobile", 15));
ExcelExportEntity entity = new ExcelExportEntity("报名时间", "signingUptime", 15);
entity.setFormat("yyyy-MM-dd HH:mm:ss");
commonEntities.add(entity);
//线路表头
ArrayList<ExcelExportEntity> lineEntities = new ArrayList<>(commonEntities);
lineEntities.add(new ExcelExportEntity("出行时间", "playStartTime", 20));
lineEntities.add(new ExcelExportEntity("线路名称", "lineName", 20));
lineEntities.add(new ExcelExportEntity("旅行社", "travelAgencyName", 20));
lineEntities.add(new ExcelExportEntity("家属人数", "familyCount", 20));
//自由组团表头
ArrayList<ExcelExportEntity> travelEntities = new ArrayList<>(commonEntities);
travelEntities.add(new ExcelExportEntity("旅行社", "travelAgencyName", 20));
commonEntities.add(new ExcelExportEntity("备注", "remark", 30));
try {
ViTool.excelResponse(response, "人员名单.xlsx");
if(Arrays.asList(types).contains("line")) {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, lineEntities, lineEnroll);
workbook.write(response.getOutputStream());
}
if(Arrays.asList(types).contains("travel")) {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, travelEntities, travelEnroll);
workbook.write(response.getOutputStream());
}
} catch (Exception e) {
log.error(e.getMessage());
}
}
@At @At
@Ok("void") @Ok("void")
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public void doExport(@Param(value = "regionalNature", required = false) String regionalNature, public void doExport(String regionalNature, Integer state,String searchName,String searchKeyword,
@Param(value = "state", required = false) Integer state,
@Param(value = "searchName", required = false) String searchName,
@Param(value = "searchKeyword", required = false) String searchKeyword,
@Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@Param(value = "takePartInLineId", required = false) String takePartInLineId,
@Param(value = "agencyId", required = false) String agencyId,
@Param(value = "lotId", required = false) String lotId,
@Param(value = "takePartInBaseManagementId", required = false) String takePartInBaseManagementId,
@Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "types", required = false) String[] types,
@Param(value = "satisfyPeople", required = false) Boolean satisfyPeople,
HttpServletResponse response) throws IOException {
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode("疗休养报名人员名单.zip", StandardCharsets.UTF_8));
Cnd commonCnd = Cnd.NEW();
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
commonCnd.and(Cnd.likeEX(searchName, searchKeyword));
}
if (!ShiroUtil.hasAnyRoles("sysadmin, A06")) {
commonCnd.and(Cnd.exps("enroll.takePartInUnionId", "=", Vi.getUnionId()).or("enroll.selfUnionId", "=", Vi.getUnionId()));
}
commonCnd.and("enroll.isNormal", "=", true);
commonCnd.and("enroll.stateId", "=", TheRapyRecuperationState.PASS);
//线路的查询
Sql lineSql = Sqls.create("""
SELECT
line.regionalNature,
lxs.travelAgencyName,
line.lineName,
enroll.*,
date_format( enroll.signingUptime, '%Y-%m-%d %H:%i:%s' ) signingUptimeFormat,
date_format( lineu.playStartTime, '%Y-%m-%d' ) playStartTime,
lineu.lineId,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id) familyCount,
u.schoolTime
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN `user` u on enroll.loginName = u.loginname
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = lineu.travelAgencyId
$condition
""");
Cnd lineCnd = commonCnd.clone();
lineCnd.andEX("YEAR(enroll.signingUptime)", ">=", startYear);
lineCnd.andEX("YEAR(enroll.signingUptime)", "<=", endYear);
lineCnd.andEX("enroll.selfUnitId", "=", unitId);
lineCnd.andEX("line.id", "=", takePartInLineId);
lineCnd.andEX("line.regionalNature", "=", regionalNature);
lineCnd.andEX("lineu.signUpMode", "=", signUpMode);
lineCnd.andEX("enroll.selfUnionId", "=", unionId);
lineCnd.and("enroll.takePartInLineId", "is not", null);
lineCnd.and("enroll.takePartInLineId", "!=", "");
if (StrUtil.isNotBlank(lotId)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("line.lotId", "=", lotId);
seg.or("ma.lotId", "=", lotId);
lineCnd.and(seg);
}
lineCnd.asc("playStartTime").asc("unionName");
lineSql.setCondition(lineCnd);
List<NutMap> lineEnroll = baseService.listMap(lineSql);
if (satisfyPeople) {
//按照选择线路id分组,便于判断是否成团
Map<String, List<NutMap>> enrollGroup = lineEnroll.stream().collect(Collectors.groupingBy(o -> o.getString("takePartInLineId")));
List<TheRapyRecuperationLineUnionSelect> unionSelects =
baseService.dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("enable", "=", true));
Map<String, TheRapyRecuperationLineUnionSelect> selectMap = unionSelects.stream().collect(Collectors.toMap(TheRapyRecuperationLineUnionSelect::getId, o -> o));
lineEnroll = enrollGroup.entrySet().stream()
.filter(entry -> selectMap.containsKey(entry.getKey()) && (entry.getValue().size() + entry.getValue().stream().mapToInt(o -> o.getInt("familyCount")).sum()) >= selectMap.get(entry.getKey()).getEstimatedFamilyNumbers())
.flatMap(entry -> entry.getValue().stream())
.collect(Collectors.toList());
}
Map<String, List<NutMap>> lineGroupMap = lineEnroll.stream().collect(Collectors.groupingBy(o -> o.getString("lineId")));
//查询所有的线路
List<TheRapyRecuperationLine> lineList = baseService.dao().query(TheRapyRecuperationLine.class, Cnd.NEW());
Map<String, String> lineMap = lineList.stream().collect(Collectors.toMap(TheRapyRecuperationLine::getId, TheRapyRecuperationLine::getLineName));
//自由组团的查询
Sql travelSql = Sqls.create("""
SELECT
enroll.*,
lxs.travelAgencyName,
u.schoolTime
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN `user` u on enroll.loginName = u.loginname
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = enroll.takePartInTravelAgencyId
$condition
""");
Cnd travelCnd = commonCnd.clone();
travelCnd.andEX("enroll.selfUnionId", "=", unionId);
travelCnd.andEX("lxs.`year`", ">=", startYear);
travelCnd.andEX("lxs.`year`", "<=", endYear);
travelCnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
travelCnd.and("enroll.takePartInTravelAgencyId", "is not", null);
travelCnd.and("enroll.takePartInTravelAgencyId", "!=", "");
travelCnd.desc("enroll.unionName");
travelSql.setCondition(travelCnd);
List<NutMap> travelEnroll = baseService.listMap(travelSql);
Map<String, List<NutMap>> travelGroupMap = travelEnroll.stream().collect(Collectors.groupingBy(o -> o.getString("takePartInTravelAgencyId")));
//查询所有的旅行社
List<TheRapyRecuperationTravelAgency> travelList = baseService.dao().query(TheRapyRecuperationTravelAgency.class, Cnd.NEW());
Map<String, String> travelMap = travelList.stream().collect(Collectors.toMap(TheRapyRecuperationTravelAgency::getId, TheRapyRecuperationTravelAgency::getTravelAgencyName));
//公共的导出表头
ArrayList<ExcelExportEntity> commonEntities = new ArrayList<>();
commonEntities.add(new ExcelExportEntity("姓名", "userName", 20));
commonEntities.add(new ExcelExportEntity("工号", "loginName", 20));
commonEntities.add(new ExcelExportEntity("性别", "sex", 10));
commonEntities.add(new ExcelExportEntity("所属单位", "unitName", 20));
commonEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
commonEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
commonEntities.add(new ExcelExportEntity("手机号", "mobile", 15));
ExcelExportEntity entity = new ExcelExportEntity("报名时间", "signingUptime", 15);
entity.setFormat("yyyy-MM-dd HH:mm:ss");
commonEntities.add(entity);
//线路表头
ArrayList<ExcelExportEntity> lineEntities = new ArrayList<>(commonEntities);
lineEntities.add(new ExcelExportEntity("出行时间", "playStartTime", 20));
lineEntities.add(new ExcelExportEntity("线路名称", "lineName", 20));
lineEntities.add(new ExcelExportEntity("旅行社", "travelAgencyName", 20));
lineEntities.add(new ExcelExportEntity("家属人数", "familyCount", 20));
//自由组团表头
ArrayList<ExcelExportEntity> travelEntities = new ArrayList<>(commonEntities);
travelEntities.add(new ExcelExportEntity("旅行社", "travelAgencyName", 20));
commonEntities.add(new ExcelExportEntity("备注", "remark", 30));
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
try {
if(Arrays.asList(types).contains("line")) {
for (String key : lineGroupMap.keySet()) {
List<NutMap> enrollList = lineGroupMap.get(key);
enrollList.forEach(item -> {
String remark = TherapyRecuperationCommon.getRemarkBySchoolTime(item.getString("schoolTime"));
item.put("remark", remark);
});
String fileName = "线路报名人员/" + lineMap.get(key) + ".xlsx";
zipOutputStream.putNextEntry(new ZipEntry(fileName));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, lineEntities, enrollList);
workbook.write(zipOutputStream);
zipOutputStream.closeEntry();
response.flushBuffer();
}
}
if(Arrays.asList(types).contains("travel")) {
for (String key : travelGroupMap.keySet()) {
List<NutMap> enrollList = travelGroupMap.get(key);
enrollList.forEach(item -> {
String remark = TherapyRecuperationCommon.getRemarkBySchoolTime(item.getString("schoolTime"));
item.put("remark", remark);
});
String fileName = "自由组团报名人员/" + travelMap.get(key) + ".xlsx";
zipOutputStream.putNextEntry(new ZipEntry(fileName));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, travelEntities, enrollList);
workbook.write(zipOutputStream);
zipOutputStream.closeEntry();
response.flushBuffer();
}
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@Ok("void")
@ViReturn
@RequiresAuthentication
public void doExport1(String regionalNature, Integer state, String searchName, String searchKeyword,
Integer startYear, Integer endYear, String unionId, Integer startYear, Integer endYear, String unionId,
String unitId, String takePartInLineId, String agencyId, String lotId, String unitId, String takePartInLineId, String agencyId, String lotId,
String takePartInBaseManagementId, String signUpMode, String takePartInBaseManagementId,String signUpMode,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) { if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
cnd.and(Cnd.likeEX(searchName, searchKeyword)); cnd.and(Cnd.likeEX(searchName,searchKeyword));
} }
Sql sql; Sql sql;
@@ -714,8 +335,6 @@ public class TheRapyRecuperationUserQueryController {
cnd.andEX("lxs.`year`", ">=", startYear); cnd.andEX("lxs.`year`", ">=", startYear);
cnd.andEX("lxs.`year`", "<=", endYear); cnd.andEX("lxs.`year`", "<=", endYear);
cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId); cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
cnd.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd.and("enroll.takePartInTravelAgencyId", "!=", "");
} else { } else {
sql = Sqls.create(""" sql = Sqls.create("""
SELECT SELECT
@@ -727,7 +346,7 @@ public class TheRapyRecuperationUserQueryController {
enroll.*, enroll.*,
lineu.lineId, lineu.lineId,
lineu.playStartTime, lineu.playStartTime,
lineu.playEndTime, lineu.playEndTime,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
@@ -743,9 +362,7 @@ public class TheRapyRecuperationUserQueryController {
cnd.andEX("enroll.selfUnitId", "=", unitId); cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("line.id", "=", takePartInLineId); cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("line.regionalNature", "=", regionalNature); cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.andEX("lineu.signUpMode", "=", signUpMode); cnd.andEX("lineu.signUpMode","=",signUpMode);
cnd.and("enroll.takePartInLineId", "is not", null);
cnd.and("enroll.takePartInLineId", "!=", "");
if (state == 3) { if (state == 3) {
sql.setVar("lotSql", "(select lotName from the_rapy_recuperation_lot where id = ma.lotId) as lotName"); sql.setVar("lotSql", "(select lotName from the_rapy_recuperation_lot where id = ma.lotId) as lotName");
cnd.and("enroll.takePartInBaseManagementId", "is not", null); cnd.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -764,9 +381,9 @@ public class TheRapyRecuperationUserQueryController {
if (StrUtil.isNotBlank(unionId)) { if (StrUtil.isNotBlank(unionId)) {
cnd.and("enroll.selfUnionId", "=", unionId); cnd.and("enroll.selfUnionId", "=", unionId);
} }
cnd.and("enroll.stateId", "=", TheRapyRecuperationState.PASS);
} }
cnd.and("enroll.isNormal", "=", true); cnd.and("enroll.isNormal", "=", true);
cnd.and("enroll.stateId", "=", TheRapyRecuperationState.PASS);
cnd.desc("enroll.unionName"); cnd.desc("enroll.unionName");
sql.setCondition(cnd); sql.setCondition(cnd);
@@ -779,10 +396,8 @@ public class TheRapyRecuperationUserQueryController {
baseService.dao().fetchLinks(v, "companionList"); baseService.dao().fetchLinks(v, "companionList");
baseService.dao().fetchLinks(v, "bedInfo"); baseService.dao().fetchLinks(v, "bedInfo");
baseService.dao().fetchLinks(v, "managementInfo"); baseService.dao().fetchLinks(v, "managementInfo");
if (StrUtil.isNotBlank(v.getLineId())) { TheRapyRecuperationLine line = baseService.dao().fetch(TheRapyRecuperationLine.class, v.getLineId());
TheRapyRecuperationLine line = baseService.dao().fetch(TheRapyRecuperationLine.class, v.getLineId()); v.setLineInfo(line);
v.setLineInfo(line);
}
}); });
List<NutMap> arrayList = new ArrayList<>(); List<NutMap> arrayList = new ArrayList<>();
String takePartInLineId2 = ""; String takePartInLineId2 = "";
@@ -792,9 +407,8 @@ public class TheRapyRecuperationUserQueryController {
for (TheRapyRecuperationEnroll v : enrollList) { for (TheRapyRecuperationEnroll v : enrollList) {
if (StrUtil.isNotBlank(v.getTakePartInLineId()) && !v.getTakePartInLineId().equals(takePartInLineId2)) { if (StrUtil.isNotBlank(v.getTakePartInLineId()) && !v.getTakePartInLineId().equals(takePartInLineId2)) {
TheRapyRecuperationLine line = baseService.dao().fetch(TheRapyRecuperationLine.class, v.getLineId()); TheRapyRecuperationLine line = baseService.dao().fetch(TheRapyRecuperationLine.class, v.getLineId());
TheRapyRecuperationLineUnionSelect unionSelect = baseService.dao().fetch(TheRapyRecuperationLineUnionSelect.class, v.getTakePartInLineId());
TheRapyRecuperationLot lot = baseService.dao().fetch(TheRapyRecuperationLot.class, line.getLotId()); TheRapyRecuperationLot lot = baseService.dao().fetch(TheRapyRecuperationLot.class, line.getLotId());
TheRapyRecuperationTravelAgency agency = baseService.dao().fetch(TheRapyRecuperationTravelAgency.class, unionSelect.getTravelAgencyId()); TheRapyRecuperationTravelAgency agency = baseService.dao().fetch(TheRapyRecuperationTravelAgency.class, line.getTravelAgencyId());
agencyName = agency.getTravelAgencyName(); agencyName = agency.getTravelAgencyName();
lotName = lot.getLotName(); lotName = lot.getLotName();
} else { } else {
@@ -823,6 +437,7 @@ public class TheRapyRecuperationUserQueryController {
addv("otherSleepUser", Lang.isNotEmpty(v.getBedInfo()) ? v.getBedInfo().getOtherSleepUser() : null); addv("otherSleepUser", Lang.isNotEmpty(v.getBedInfo()) ? v.getBedInfo().getOtherSleepUser() : null);
addv("baseName", Lang.isNotEmpty(v.getManagementInfo()) ? v.getManagementInfo().getBaseName() : v.getLineInfo().getLineName()); addv("baseName", Lang.isNotEmpty(v.getManagementInfo()) ? v.getManagementInfo().getBaseName() : v.getLineInfo().getLineName());
addv("signingUptime", DateUtil.formatDateTime(v.getSigningUptime())); addv("signingUptime", DateUtil.formatDateTime(v.getSigningUptime()));
addv("cxsj", DateUtil.formatDateTime(v.getPlayStartTime()) + "" + DateUtil.formatDateTime(v.getPlayEndTime()));
addv("agencyName", finalAgencyName); addv("agencyName", finalAgencyName);
addv("lotName", finalLotName); addv("lotName", finalLotName);
addv("bz", v.getUserName()); addv("bz", v.getUserName());
@@ -843,6 +458,7 @@ public class TheRapyRecuperationUserQueryController {
addv("otherSleepUser", Lang.isNotEmpty(c.getBedInfo()) ? c.getBedInfo().getOtherSleepUser() : null); addv("otherSleepUser", Lang.isNotEmpty(c.getBedInfo()) ? c.getBedInfo().getOtherSleepUser() : null);
addv("baseName", Lang.isNotEmpty(v.getManagementInfo()) ? v.getManagementInfo().getBaseName() : v.getLineInfo().getLineName()); addv("baseName", Lang.isNotEmpty(v.getManagementInfo()) ? v.getManagementInfo().getBaseName() : v.getLineInfo().getLineName());
addv("signingUptime", DateUtil.formatDateTime(v.getSigningUptime())); addv("signingUptime", DateUtil.formatDateTime(v.getSigningUptime()));
addv("cxsj", DateUtil.formatDateTime(v.getPlayStartTime()) + "" + DateUtil.formatDateTime(v.getPlayEndTime()));
addv("agencyName", finalAgencyName); addv("agencyName", finalAgencyName);
addv("lotName", finalLotName); addv("lotName", finalLotName);
addv("bz", v.getUserName()); addv("bz", v.getUserName());
@@ -871,6 +487,7 @@ public class TheRapyRecuperationUserQueryController {
exportEntities.add(new ExcelExportEntity("旅行社", "agencyName", 20)); exportEntities.add(new ExcelExportEntity("旅行社", "agencyName", 20));
exportEntities.add(new ExcelExportEntity("报名时间", "signingUptime", 20)); exportEntities.add(new ExcelExportEntity("报名时间", "signingUptime", 20));
exportEntities.add(new ExcelExportEntity("备注", "bz", 20)); exportEntities.add(new ExcelExportEntity("备注", "bz", 20));
exportEntities.add(new ExcelExportEntity("出行时间", "cxsj", 50));
try { try {
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
@@ -882,17 +499,4 @@ public class TheRapyRecuperationUserQueryController {
e.printStackTrace(); e.printStackTrace();
} }
} }
@At
@ViReturn
@RequiresAuthentication
public Object doReimbursement(@Param("data") String data) {
JSONArray objects = JSONUtil.parseArray(data);
List<String> enrollIds = objects.toList(String.class);
if (Lang.isNotEmpty(enrollIds)) {
baseService.dao().update(TheRapyRecuperationEnroll.class, Chain.make("isReimbursement", 1), Cnd.where("id", "in", enrollIds));
}
return null;
}
} }
@@ -0,0 +1,409 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.query;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
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.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollBed;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollCompanion;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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;
/**
* 分工会人员信息查询
*/
@IocBean
@At("/platform/theRapyRecuperation/branchUnionUserQuery")
@Ok("json:full")
public class TheRapyRecuperationBranchUnionUserQueryController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private TheRapyRecuperationEnrollService enrollService;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/branchUnionUserQuery/index.html")
@RequiresPermissions("theRapyRecuperation.branchUnionUserQuery")
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
@RequiresPermissions("theRapyRecuperation.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
state.stateName,
state.stateColor,
line.regionalNature,
line.lineName,
agency.travelAgencyName,
ma.baseName,
enroll.*,
lineu.lineId,
lineu.playStartTime,
lineu.playEndTime,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
$lotSql
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
LEFT JOIN the_rapy_recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
$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(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "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", "=", Vi.getUnionId());
// 报名模式
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", "=", TheRapyRecuperationState.PASS);
cnd.andEX("enroll.isNormal", "=", true);
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
list.forEach(v -> {
List<TheRapyRecuperationEnrollCompanion> companionList = baseService.dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
for (TheRapyRecuperationEnrollCompanion enrollCompanion : companionList) {
baseService.fetchLinks(enrollCompanion, "bedInfo");
}
v.setv("companionList", companionList);
});
return Result.success(pagination);
}
/**
* 设置出行人员
*
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.branchUnionUserQuery")
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);
baseService.update("the_rapy_recuperation_enroll", chain, Cnd.where("id", "=", map.getString("id")));
}
return Result.success();
}
/**
* 删除报名信息
*/
@At
public Result deleteMyEnrollInfoById(String id) {
enrollService.deleteMyEnrollInfoById(id);
return Result.success();
}
/**
* 编辑查询详细信息
*/
@At
@RequiresPermissions("theRapyRecuperation.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 the_rapy_recuperation_enroll_companion WHERE trreId=enroll.id and relation='亲属') isFamily
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_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<TheRapyRecuperationEnrollCompanion> companionList = dao.query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
companionList.forEach(v -> {
v.setBedInfo(dao.fetch(TheRapyRecuperationEnrollBed.class, v.getBedInfoId()));
});
data.put("companionList", companionList);
return Result.success(data);
}
/**
* 获取线路
*
* @param year 年度
* @param signUpMode 报名模式
* @param regionalNature 区域
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.branchUnionUserQuery")
public Result listLine(Integer year, String signUpMode, String regionalNature) {
Sql sql = Sqls.create("""
SELECT
t1.takePartInLineId,
t3.lineName,
t4.unionname as unionName
FROM
the_rapy_recuperation_enroll t1
LEFT JOIN the_rapy_recuperation_line_union_select t2 ON t2.id = t1.takePartInLineId
LEFT JOIN the_rapy_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", "=", Vi.getUnionId());
cnd.andEX("YEAR(t2.selectTime)", "=", year);
cnd.andEX("t3.regionalNature", "=", regionalNature);
if (signUpMode.equals("1")) {
cnd.andEX("t3.signUpMode", "=", 2);
} else if (signUpMode.equals("2")) {
cnd.andEX("t2.unionId", "=", Vi.getUnionId());
cnd.and("t3.signUpMode", "=", 1);
} else if (signUpMode.equals("3")) {
cnd.andEX("t2.unionId", "!=", Vi.getUnionId());
cnd.and("t3.signUpMode", "=", 1);
} else if (signUpMode.equals("4")) {
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")
@RequiresPermissions("theRapyRecuperation.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
state.stateName,
state.stateColor,
line.regionalNature,
line.lineName,
agency.travelAgencyName,
ma.baseName,
enroll.*,
lineu.lineId,
lineu.playStartTime,
lineu.playEndTime,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
$lotSql
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
LEFT JOIN the_rapy_recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
$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", "=", Vi.getUnionId());
// 报名模式
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", "=", TheRapyRecuperationState.PASS);
cnd.andEX("enroll.isNormal", "=", true);
sql.setCondition(cnd);
List<NutMap> list = enrollService.listMap(sql);
list.forEach(v -> {
List<TheRapyRecuperationEnrollCompanion> companionList = baseService.dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
for (TheRapyRecuperationEnrollCompanion enrollCompanion : companionList) {
baseService.fetchLinks(enrollCompanion, "bedInfo");
}
v.setv("companionList", companionList);
});
// 配置
TheRapyRecuperationConfig config = baseService.dao().fetch(TheRapyRecuperationConfig.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();
}
}
}
@@ -0,0 +1,122 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.query;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
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.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @author zhf
* @date 2025/5/23 09:04
* @description 线路查询
*/
@IocBean
@At("/platform/theRapyRecuperation/lineQuery")
@Ok("json:full")
public class TheRapyRecuperationLineQueryController {
@Inject
private TheRapyRecuperationEnrollService enrollService;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/lineQuery/index.html")
@RequiresPermissions("theRapyRecuperation.lineQuery")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("theRapyRecuperation.statistics")
public Object pageData(PageForm pageForm,
@Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "takePartInLineId") String takePartInLineId,
@Param(value = "lotId", required = false) String lotId,
@Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "selectId", required = false) String selectId,
@Param(value = "travelAgencyPlace", required = false) String travelAgencyPlace,
@Param(value = "travelAgencyId", required = false) String travelAgencyId,
@Param(value = "regionalNature", required = false) String regionalNature) {
Sql sql = Sqls.create("""
SELECT
u.username,
st.stateName,
line.id,
line.lineName,
line.regionalNature,
line.travelAgencyPlace,
lineu.auditState,
lineu.lineId,
lineu.id as lineUId,
lineu.signUpMode,
lineu.minimumGroupSize,
lineu.estimatedFamilyNumbers,
YEAR(lineu.selectTime) as `year`,
CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime,
lineu.playStartTime as playStartTime1,
lineu.playEndTime as playEndTime2,
lxs.travelAgencyName,
lxs.contact,
lxs.contactMobileNumber,
enroll.takePartInUnionId AS usUnionId,
un.unionname as unionname,
lot.lotName,
lot.lotValue,
enroll.familyNumber,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE takePartInLineId = lineu.id and stateId=2750 and isNormal = true $unionCnd) lineNum,
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where stateId=2750 and takePartInLineId = lineu.id and isNormal = true $unionCnd)) as signUpUserFamilyNum
FROM
the_rapy_recuperation_line_union_select lineu
LEFT JOIN `the_rapy_recuperation_enroll` enroll ON lineu.id = enroll.takePartInLineId
left join `user` u on u.id=lineu.selectUserId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
LEFT JOIN sys_union un ON un.id = lineu.unionId
left join audit_state st on st.stateId=lineu.auditState
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
cnd.andEX("lineu.signUpMode", "=", signUpMode);
cnd.andEX("lineu.unionId", "=", unionId);
cnd.andEX("line.travelAgencyId", "=", travelAgencyId);
cnd.andEX("line.travelAgencyPlace", "=", travelAgencyPlace);
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
if (ShiroUtil.hasAnyRoles("gh01")) {
cnd.andEX("lineu.unionId", "=", Vi.getUnionId());
} else {
cnd.and("lineu.selectUserId", "=", ShiroUtil.getUserId());
}
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())){
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("u.username", pageForm.getSearchKeyword());
group.orLike("u.loginname", pageForm.getSearchKeyword());
cnd.and(group);
}
cnd.andEX("line.lotId", "=", lotId);
cnd.andEX("line.id", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
cnd.andEX("line.regionalNature", "=", regionalNature);
cnd.groupBy("lineu.id");
cnd.asc("line.serialNumber").asc("lineu.playStartTime");
sql.setCondition(cnd);
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
}
@@ -0,0 +1,397 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.query;
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.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollBed;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollCompanion;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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;
/**
* 校工会人员信息查询
*/
@IocBean
@At("/platform/theRapyRecuperation/schoolUnionUserQuery")
@Ok("json:full")
public class TheRapyRecuperationSchoolUnionUserQueryController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private TheRapyRecuperationEnrollService enrollService;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/schoolUnionUserQuery/index.html")
@RequiresPermissions("theRapyRecuperation.schoolUnionUserQuery")
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
@RequiresPermissions("theRapyRecuperation.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
state.stateName,
state.stateColor,
line.regionalNature,
line.lineName,
agency.travelAgencyName,
ma.baseName,
enroll.*,
lineu.lineId,
lineu.playStartTime,
lineu.playEndTime,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
$lotSql
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
LEFT JOIN the_rapy_recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
$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(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
}
// 年度
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", "=", TheRapyRecuperationState.PASS);
cnd.andEX("enroll.isNormal", "=", true);
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
list.forEach(v -> {
List<TheRapyRecuperationEnrollCompanion> companionList = baseService.dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
for (TheRapyRecuperationEnrollCompanion enrollCompanion : companionList) {
baseService.fetchLinks(enrollCompanion, "bedInfo");
}
v.setv("companionList", companionList);
});
return Result.success(pagination);
}
/**
* 设置出行人员
*
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("theRapyRecuperation.schoolUnionUserQuery")
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);
baseService.update("the_rapy_recuperation_enroll", chain, Cnd.where("id", "=", map.getString("id")));
}
return Result.success();
}
/**
* 删除报名信息
*/
@At
@RequiresPermissions("theRapyRecuperation.schoolUnionUserQuery")
public Result deleteMyEnrollInfoById(String id) {
enrollService.deleteMyEnrollInfoById(id);
return Result.success();
}
/**
* 编辑查询详细信息
*/
@At
@RequiresPermissions("theRapyRecuperation.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 the_rapy_recuperation_enroll_companion WHERE trreId=enroll.id and relation='亲属') isFamily
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_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<TheRapyRecuperationEnrollCompanion> companionList = dao.query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
companionList.forEach(v -> {
v.setBedInfo(dao.fetch(TheRapyRecuperationEnrollBed.class, v.getBedInfoId()));
});
data.put("companionList", companionList);
return Result.success(data);
}
/**
* 获取线路
*
* @param year 年度
* @param signUpMode 报名模式
* @param unionId 分工会id
* @param regionalNature 区域
* @return
*/
@At
@RequiresPermissions("theRapyRecuperation.schoolUnionUserQuery")
public Result listLine(Integer year, String signUpMode, String unionId, String regionalNature) {
Sql sql = Sqls.create("""
SELECT
t1.takePartInLineId,
t3.lineName,
t4.unionname as unionName
FROM
the_rapy_recuperation_enroll t1
LEFT JOIN the_rapy_recuperation_line_union_select t2 ON t2.id = t1.takePartInLineId
LEFT JOIN the_rapy_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")
@RequiresPermissions("theRapyRecuperation.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
state.stateName,
state.stateColor,
line.regionalNature,
line.lineName,
agency.travelAgencyName,
ma.baseName,
enroll.*,
lineu.lineId,
lineu.playStartTime,
lineu.playEndTime,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily
$lotSql
FROM
`the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
LEFT JOIN the_rapy_recuperation_base_management ma on ma.id = enroll.takePartInBaseManagementId
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
$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.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", "=", TheRapyRecuperationState.PASS);
cnd.andEX("enroll.isNormal", "=", true);
sql.setCondition(cnd);
List<NutMap> list = enrollService.listMap(sql);
list.forEach(v -> {
List<TheRapyRecuperationEnrollCompanion> companionList = baseService.dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", v.getString("id")));
for (TheRapyRecuperationEnrollCompanion enrollCompanion : companionList) {
baseService.fetchLinks(enrollCompanion, "bedInfo");
}
v.setv("companionList", companionList);
});
// 配置
TheRapyRecuperationConfig config = baseService.dao().fetch(TheRapyRecuperationConfig.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();
}
}
}
@@ -49,10 +49,8 @@ public class TheRapyRecuperationLineStatisticsController {
@Inject @Inject
private TheRapyRecuperationEnrollService enrollService; private TheRapyRecuperationEnrollService enrollService;
@Inject @Inject
private MsgApi msgApi; private MsgApi msgApi;
@Inject @Inject
private Dao dao; private Dao dao;
@@ -69,16 +67,19 @@ public class TheRapyRecuperationLineStatisticsController {
@Param(value = "startYear", required = false) Integer startYear, @Param(value = "startYear", required = false) Integer startYear,
@Param(value = "endYear", required = false) Integer endYear, @Param(value = "endYear", required = false) Integer endYear,
@Param(value = "unionId", required = false) String unionId, @Param(value = "unionId", required = false) String unionId,
@Param("takePartInLineId") String takePartInLineId, @Param(value = "takePartInLineId") String takePartInLineId,
@Param(value = "lotId", required = false) String lotId, @Param(value = "lotId", required = false) String lotId,
@Param(value = "signUpMode", required = false) String signUpMode, @Param(value = "signUpMode", required = false) String signUpMode,
@Param(value = "selectId",required = false) String selectId, @Param(value = "selectId",required = false) String selectId,
@Param(value = "regionalNature", required = false) String regionalNature) { @Param(value = "regionalNature", required = false) String regionalNature) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
u.username,
st.stateName,
line.id, line.id,
line.lineName, line.lineName,
line.regionalNature, line.regionalNature,
lineu.auditState,
lineu.lineId, lineu.lineId,
lineu.id as lineUId, lineu.id as lineUId,
lineu.signUpMode, lineu.signUpMode,
@@ -92,7 +93,7 @@ public class TheRapyRecuperationLineStatisticsController {
lxs.contact, lxs.contact,
lxs.contactMobileNumber, lxs.contactMobileNumber,
enroll.takePartInUnionId AS usUnionId, enroll.takePartInUnionId AS usUnionId,
if(lineu.signUpMode = 2, '校工会', un.unionname) as unionname, un.unionname as unionname,
lot.lotName, lot.lotName,
lot.lotValue, lot.lotValue,
enroll.familyNumber, enroll.familyNumber,
@@ -101,17 +102,19 @@ public class TheRapyRecuperationLineStatisticsController {
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
left join `user` u on u.id=lineu.selectUserId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lineu.travelAgencyId = lxs.id LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
LEFT JOIN sys_union un ON un.id = lineu.unionId LEFT JOIN sys_union un ON un.id = lineu.unionId
left join audit_state st on st.stateId=lineu.auditState
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear); cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear); cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
cnd.andEX("lineu.signUpMode","=",signUpMode); cnd.andEX("lineu.signUpMode","=",signUpMode);
if (!ShiroUtil.hasAnyRoles("sysadmin,H06")){ /*if (!ShiroUtil.hasAnyRoles("sysadmin,H06")){
String unionCndSql = "and (selfUnionId='%s' or takePartInUnionId = '%s')".formatted(Vi.getUnionId(), Vi.getUnionId()); String unionCndSql = "and (selfUnionId='%s' or takePartInUnionId = '%s')".formatted(Vi.getUnionId(), Vi.getUnionId());
sql.setVar("unionCnd", unionCndSql); sql.setVar("unionCnd", unionCndSql);
cnd.and("lineu.unionId", "=", Vi.getUnionId()); cnd.and("lineu.unionId", "=", Vi.getUnionId());
@@ -119,6 +122,9 @@ public class TheRapyRecuperationLineStatisticsController {
if (Strings.isNotBlank(unionId)) { if (Strings.isNotBlank(unionId)) {
cnd.and("lineu.unionId", "=", unionId); cnd.and("lineu.unionId", "=", unionId);
} }
}*/
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
cnd.and("lineu.selectUserId", "=", ShiroUtil.getUserId());
} }
cnd.andEX("line.lotId", "=", lotId); cnd.andEX("line.lotId", "=", lotId);
@@ -131,7 +137,6 @@ public class TheRapyRecuperationLineStatisticsController {
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
} }
/** /**
* 根据线路查询报名详情 * 根据线路查询报名详情
* @param searchKeyword * @param searchKeyword
@@ -187,28 +192,54 @@ public class TheRapyRecuperationLineStatisticsController {
@At @At
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object sendSuccess(String id) { public Object sendSuccess(String id, Boolean type) {
TheRapyRecuperationLineUnionSelect unionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, id); TheRapyRecuperationLineUnionSelect unionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, id);
TheRapyRecuperationLine line = dao.fetch(TheRapyRecuperationLine.class, unionSelect.getLineId()); TheRapyRecuperationLine line = dao.fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
if (DateUtil.compare(new Date(), unionSelect.getSignUpEndTime()) < 0) { if (DateUtil.compare(new Date(), unionSelect.getSignUpEndTime()) < 0) {
return Result.error("报名还未结束,不能发送"); return Result.error("报名还未结束");
} }
//找出报名人员
List<TheRapyRecuperationEnroll> enrolls = dao.query(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id) unionSelect.setGroupSuccess(true);
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear()) unionSelect.setGroupTime(DateUtil.now());
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL))); switch (unionSelect.getSignUpMode()) {
case 1 -> unionSelect.setAuditState(7707);
case 2 -> unionSelect.setAuditState(7712);
case 3 -> unionSelect.setAuditState(7700);
}
dao.update(unionSelect);
//发短信 //发短信
enrolls.forEach(item -> { if(type) {
String content = "%s老师,您好!您报名的%s线路,出行时间为%s,达到成团条件,请准时参加疗休养活动。".formatted( //找出报名人员
item.getUserName(), List<TheRapyRecuperationEnroll> enrolls = dao.query(
line.getLineName(), TheRapyRecuperationEnroll.class,
DateUtil.format(unionSelect.getPlayStartTime(), "yyyy-MM-dd") Cnd.where("takePartInLineId", "=", id)
); .and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear())
List list = List.of(Map.of("type", "User", "userId", item.getLoginName(), "name", item.getUserName())); .and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
//msgApi.sendMsg(content, list, "疗休养", " IntelligenceMode", MsgApi.sendMode.normal.name()); enrolls.forEach(item -> {
}); String content = "%s老师,您好!您报名的%s线路,出行时间为%s,达到成团条件,请准时参加疗休养活动。".formatted(
item.getUserName(),
line.getLineName(),
DateUtil.format(unionSelect.getPlayStartTime(), "yyyy-MM-dd")
);
msgApi.sendTextMsg(content, item.getLoginName());
});
}
return null;
}
@At
@ViReturn
@RequiresAuthentication
@Aop(TransAop.READ_COMMITTED)
public Object deleteJoinUser(String id) {
if (StrUtil.isBlank(id)) {
return Result.error("需要的删除的信息为空");
}
TheRapyRecuperationEnroll enroll = dao.fetch(TheRapyRecuperationEnroll.class, id);
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("id", "=", id));
dao.clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
dao.clear(TheRapyRecuperationEnrollBed.class, Cnd.where("id", "=", enroll.getBedInfo().getId()));
return null; return null;
} }
@@ -217,16 +248,22 @@ public class TheRapyRecuperationLineStatisticsController {
@RequiresAuthentication @RequiresAuthentication
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public Object sendFail(String id, Boolean type) { public Object sendFail(String id, Boolean type) {
TheRapyRecuperationLineUnionSelect unionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, id); TheRapyRecuperationLineUnionSelect unionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, id);
TheRapyRecuperationLine line = dao.fetch(TheRapyRecuperationLine.class, unionSelect.getLineId()); TheRapyRecuperationLine line = dao.fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
if (DateUtil.compare(new Date(), unionSelect.getSignUpEndTime()) < 0) { if (DateUtil.compare(new Date(), unionSelect.getSignUpEndTime()) < 0) {
return Result.error("报名还未结束,不能发送"); return Result.error("报名还未结束");
} }
unionSelect.setGroupSuccess(false);
unionSelect.setGroupTime(null);
dao.update(unionSelect);
//找出报名人员 //找出报名人员
List<TheRapyRecuperationEnroll> enrolls = dao.query(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id) List<TheRapyRecuperationEnroll> enrolls = dao.query(
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear()) TheRapyRecuperationEnroll.class,
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL))); Cnd.where("takePartInLineId", "=", id)
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear())
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
//发短信 //发短信
enrolls.forEach(item -> { enrolls.forEach(item -> {
@@ -235,13 +272,12 @@ public class TheRapyRecuperationLineStatisticsController {
line.getLineName(), line.getLineName(),
DateUtil.format(unionSelect.getPlayStartTime(), "yyyy-MM-dd") DateUtil.format(unionSelect.getPlayStartTime(), "yyyy-MM-dd")
); );
List list = List.of(Map.of("type", "User", "userId", item.getLoginName(), "name", item.getUserName())); msgApi.sendTextMsg(content, item.getLoginName());
//msgApi.sendMsg(content, list, "疗休养", " IntelligenceMode", MsgApi.sendMode.normal.name());
}); });
if(!type) { if(!type) {
List<String> enrollIds = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList()); List<String> enrollIds = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
List<TheRapyRecuperationEnrollBed> bedIds = enrolls.stream().map(TheRapyRecuperationEnroll::getBedInfo).collect(Collectors.toList()); List<String> bedIds = enrolls.stream().map(TheRapyRecuperationEnroll::getBedInfoId).collect(Collectors.toList());
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id)); dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id));
dao.clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", enrollIds)); dao.clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", enrollIds));
dao.clear(TheRapyRecuperationEnrollBed.class, Cnd.where("id", "in", bedIds)); dao.clear(TheRapyRecuperationEnrollBed.class, Cnd.where("id", "in", bedIds));
@@ -0,0 +1,182 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.summary;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import io.v.nutz.base.utils.ViTool;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@IocBean
@Ok("json:full")
@At("/platform/therapyRecuperation/evaluate/statistics")
public class TherapyRecuperationEvaluateStatisticsController {
@Inject
private TheRapyRecuperationEnrollService enrollService;
@Inject
private Dao dao;
@At("")
@Ok("beetl:/platform/theRapyRecuperation/summary/evaluateStatistics.html")
@RequiresPermissions("theRapyRecuperation.evaluate.statistics")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("theRapyRecuperation.evaluate.statistics")
public Object pageData(PageForm pageForm,
String lineId,
String unionId,
String unitId,
String personType,
String userState,
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
`the_rapy_recuperation_evaluate` we
LEFT JOIN `user` u ON u.id = we.userId
LEFT JOIN the_rapy_recuperation_enroll en ON en.takePartInLineId = we.lineId
LEFT JOIN the_rapy_recuperation_line_union_select us ON us.id = en.takePartInLineId
LEFT JOIN the_rapy_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.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().equals("ascending") ? "asc" : "desc");
} else {
cnd.desc("we.evaluateScore");
}
if(StrUtil.isNotBlank(lineId)) {
cnd.andEX("we.lineId", "in", lineId.split(","));
}
cnd.andEX("u.unionid", "=", unionId);
cnd.andEX("u.unitid", "=", unitId);
cnd.andEX("u.personType", "=", personType);
cnd.andEX("u.userState", "=", userState);
cnd.andEX("we.evaluateScore", "=", evaluateScore);
cnd.groupBy("we.lineId");
sql.setCondition(cnd);
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@At
@ViReturn
@RequiresPermissions("theRapyRecuperation.evaluate.statistics")
public Object lineList(Integer year) {
Sql sql = Sqls.create("""
SELECT
GROUP_CONCAT(us.id) as id,
line.lineName,
if(us.signUpMode = 2, '校工会', un.unionname) as unionName
FROM
the_rapy_recuperation_line_union_select us
LEFT JOIN the_rapy_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 enrollService.listMap(sql);
}
@At
@Ok("void")
@RequiresPermissions("theRapyRecuperation.evaluate.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
`the_rapy_recuperation_evaluate` we
LEFT JOIN `user` u ON u.id = we.userId
LEFT JOIN the_rapy_recuperation_enroll en ON en.takePartInLineId = we.lineId
LEFT JOIN the_rapy_recuperation_line_union_select us ON us.id = en.takePartInLineId
LEFT JOIN the_rapy_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 {
ViTool.excelResponse(response, "评价人员名单.xls");
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, listMap);
workbook.write(response.getOutputStream());
} catch (Exception ignored) {}
}
}
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.theRapyConfig; package io.v.nutz.zhgh.therapyRecuperation.controller.theRapyConfig;
import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationBaseManagement; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationBaseManagement;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
@@ -1,7 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.model; package io.v.nutz.zhgh.therapyRecuperation.model;
import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.Excel;
import io.v.nutz.sys.models.Sys_file; import io.v.nutz.sys.models.Sys_file;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -1,5 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.model; package io.v.nutz.zhgh.therapyRecuperation.model;
import io.v.nutz.sys.models.Sys_file;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
@@ -67,21 +68,13 @@ public class TheRapyRecuperationConfig {
@Column @Column
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
@Comment("省内线路是否审核") @Comment("省内线路是否审核")
@Default(value = "0")
private Boolean isSnLine; private Boolean isSnLine;
@Column @Column
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
@Comment("省外线路是否审核") @Comment("省外线路是否审核")
@Default(value = "0")
private Boolean isSwLine; private Boolean isSwLine;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("旅行社是否审核")
@Default(value = "0")
private Boolean travelAudit;
@Column @Column
@ColDefine(type = ColType.MYSQL_JSON) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("标段") @Comment("标段")
@@ -109,12 +102,15 @@ public class TheRapyRecuperationConfig {
@Column @Column
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
@Comment("床位信息") @Comment("床位信息")
@Default(value = "0")
private Boolean bedInfo; private Boolean bedInfo;
@Column @Column
@ColDefine(type = ColType.INT) @ColDefine(type = ColType.INT)
@Comment("家属信息") @Comment("家属信息")
@Default(value = "0")
private Integer familyInfo; private Integer familyInfo;
@Column
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("承诺书")
private List<Sys_file> files;
} }
@@ -157,6 +157,10 @@ public class TheRapyRecuperationEnroll extends BaseModel {
private String lineId; private String lineId;
private Date playStartTime;
private Date playEndTime;
/** /**
* 床位信息 * 床位信息
*/ */
@@ -199,9 +203,8 @@ public class TheRapyRecuperationEnroll extends BaseModel {
private Integer familyNumber; private Integer familyNumber;
@Column @Column
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.VARCHAR, width = 100)
@Comment("是否报销") @Comment("签字")
private Boolean isReimbursement; private String sign;
private String firstLetter;
} }
@@ -0,0 +1,58 @@
package io.v.nutz.zhgh.therapyRecuperation.model;
import io.v.nutz.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;
@Data
@EqualsAndHashCode(callSuper = true)
@Table
public class TheRapyRecuperationEvaluate extends BaseModel implements Serializable {
@Name
@Column
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@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;
}
@@ -1,6 +1,7 @@
package io.v.nutz.zhgh.therapyRecuperation.model; package io.v.nutz.zhgh.therapyRecuperation.model;
import cn.wizzer.framework.base.model.BaseModel; import cn.wizzer.framework.base.model.BaseModel;
import io.v.nutz.sys.models.Sys_file;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -8,6 +9,7 @@ import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert; import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @FileName io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine * @FileName io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine
@@ -120,11 +122,11 @@ public class TheRapyRecuperationLine extends BaseModel {
@Column @Column
@ColDefine(type = ColType.MYSQL_JSON) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("缩略图") @Comment("缩略图")
private String files; private List<Sys_file> files;
@Column @Column
@ColDefine(type = ColType.INT) @ColDefine(type = ColType.INT)
@Comment("报名模式(1.分工会 2.自由)") @Comment("报名模式(1.分工会 2.自由 3.个人)")
private Integer signUpMode; private Integer signUpMode;
@Column @Column
@@ -147,7 +149,18 @@ public class TheRapyRecuperationLine extends BaseModel {
@Comment("联系电话") @Comment("联系电话")
private String lineContactPhone; private String lineContactPhone;
@Column
@ColDefine(type = ColType.VARCHAR)
@Comment("旅行社地点")
private String travelAgencyPlace;
@One(field = "travelAgencyId") @One(field = "travelAgencyId")
private TheRapyRecuperationTravelAgency travelAgency; private TheRapyRecuperationTravelAgency travelAgency;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("开放选择")
@Default("0")
private boolean openChoose;
} }
@@ -6,8 +6,10 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert; import org.nutz.dao.interceptor.annotation.PrevInsert;
import org.nutz.lang.util.NutMap;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
@@ -117,7 +119,7 @@ public class TheRapyRecuperationLineUnionSelect extends BaseModel {
@Column @Column
@ColDefine(type = ColType.INT) @ColDefine(type = ColType.INT)
@Comment("报名模式、组织形式(1.分工会 2.校工会)") @Comment("报名模式、组织形式(1.分工会 2.校工会 3.个人)")
private Integer signUpMode; private Integer signUpMode;
@Column @Column
@@ -126,7 +128,43 @@ public class TheRapyRecuperationLineUnionSelect extends BaseModel {
private Boolean enable; private Boolean enable;
@Column @Column
@ColDefine(type = ColType.VARCHAR, width = 32) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("旅行社id") @Comment("报名范围(1.自己选择 2.分工会 3.全校)")
private String travelAgencyId; private List<Integer> signScope;
@Column
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("人员名单")
private List<NutMap> chooseUserList;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否成团")
private Boolean groupSuccess;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("成团时间")
private String groupTime;
@Column
@ColDefine(type = ColType.INT)
@Comment("审核状态")
private Integer auditState;
@Column
@ColDefine(type = ColType.VARCHAR,width = 32)
@Comment("分工会审核id")
private String unionAuditId;
@Column
@ColDefine(type = ColType.VARCHAR,width = 32)
@Comment("单位领导审核id")
private String unitLeaderAuditId;
@Column
@ColDefine(type = ColType.VARCHAR,width = 32)
@Comment("校工会审核id")
private String schoolAuditId;
} }
@@ -1,12 +1,15 @@
package io.v.nutz.zhgh.therapyRecuperation.model; package io.v.nutz.zhgh.therapyRecuperation.model;
import cn.wizzer.framework.base.model.BaseModel; import cn.wizzer.framework.base.model.BaseModel;
import io.v.nutz.sys.models.Sys_file;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert; import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.List;
/** /**
* @FileName io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency * @FileName io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency
* @Description: 疗休养旅行社管理 * @Description: 疗休养旅行社管理
@@ -74,10 +77,10 @@ public class TheRapyRecuperationTravelAgency extends BaseModel {
@Column @Column
@ColDefine(type = ColType.MYSQL_JSON) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("缩略图") @Comment("缩略图")
private String files; private List<Sys_file> files;
@Column @Column
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("是否自由组团") @Comment("旅行社地点")
private Boolean signUpTravelAgency; private List<String> travelAgencyPlaces;
} }
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import io.v.nutz.base.model.Audit; import io.v.nutz.base.model.Audit;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType;
@@ -1,6 +1,5 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
@@ -1,10 +1,8 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.sys.models.Sys_union; import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
@@ -33,8 +31,6 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType); List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType);
Object openSignUser(String usId, String travelId, String searchKeyWord);
/** /**
* 线路报名 * 线路报名
* *
@@ -73,19 +69,8 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
*/ */
void updateSignUpTravelAgency(TheRapyRecuperationEnroll enrollInfo); void updateSignUpTravelAgency(TheRapyRecuperationEnroll enrollInfo);
/**
* 验证报名登记信息
*
* @param enrollInfo 登记信息
* @param loginName 用户名
* @return {@link Map}<{@link Boolean}, {@link String}>
*/
Map<Boolean, String> validSignUpInfo(String loginName, TheRapyRecuperationEnroll enrollInfo); Map<Boolean, String> validSignUpInfo(String loginName, TheRapyRecuperationEnroll enrollInfo);
Map<Boolean, String> validSignUpInfoForZJXU(String loginName, TheRapyRecuperationEnroll enrollInfo);
Map<Boolean, String> validSignUpInfoForZJNU(String loginName, TheRapyRecuperationEnroll enrollInfo);
/** /**
* 我报名的页面数据 * 我报名的页面数据
* *
@@ -120,7 +105,7 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
* @param usUnionId usUnionId * @param usUnionId usUnionId
* @return {@link NutMap} * @return {@link NutMap}
*/ */
NutMap selectLineAllInfo(String usId, String usUnionId, String year); NutMap selectLineAllInfo(String usId, String usUnionId);
List<Sys_union> getTheRapyUnions(Integer year, int theRapyRecuperationType); List<Sys_union> getTheRapyUnions(Integer year);
} }
@@ -1,11 +1,9 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import java.util.List; import java.util.List;
public interface TheRapyRecuperationLineAdjustmentService extends ViService { public interface TheRapyRecuperationLineAdjustmentService extends ViService {
@@ -1,7 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationCluster; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationCluster;
@@ -1,7 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
@@ -1,7 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
@@ -25,7 +24,7 @@ public interface TheRapyRecuperationLineUnionSelectService extends ViService<The
* @param cnd cnd * @param cnd cnd
* @return {@link Pagination} * @return {@link Pagination}
*/ */
Pagination pageData(PageForm pageForm, Cnd cnd, Integer year); Pagination pageData(PageForm pageForm, Cnd cnd, Integer year , Integer mode);
/** /**
@@ -41,7 +40,7 @@ public interface TheRapyRecuperationLineUnionSelectService extends ViService<The
* *
* @return {@link List}<{@link String}> * @return {@link List}<{@link String}>
*/ */
List<String> getHasSelectLineIds(); List<String> getHasSelectLineIds(Integer mode);
/** /**
@@ -1,7 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.service; package io.v.nutz.zhgh.therapyRecuperation.service;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
@@ -2,9 +2,9 @@ package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.model.Audit; import io.v.nutz.base.model.Audit;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollBed; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollBed;
@@ -22,7 +22,6 @@ import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import java.util.List; import java.util.List;
import java.util.Map;
@IocBean(args = {"refer:dao"}) @IocBean(args = {"refer:dao"})
public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> implements TheRapyRecuperationAuditService { public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> implements TheRapyRecuperationAuditService {
@@ -83,7 +82,6 @@ public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> im
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
lxs.travelAgencyName, lxs.travelAgencyName,
ta.travelAgencyName as joinTravelAgencyName,
enroll.*, enroll.*,
line.lineName, line.lineName,
if(enroll.takePartInUnionId!=enroll.selfUnionId,true,false) isTransferIn, if(enroll.takePartInUnionId!=enroll.selfUnionId,true,false) isTransferIn,
@@ -92,8 +90,7 @@ public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> im
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = lineu.travelAgencyId LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = line.travelAgencyId
LEFT JOIN the_rapy_recuperation_travel_agency ta ON ta.id = enroll.takePartInTravelAgencyId
where enroll.id=@id where enroll.id=@id
""").setParam("id", id); """).setParam("id", id);
@@ -117,7 +114,9 @@ public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> im
} }
List<TheRapyRecuperationEnrollCompanion> companionList = dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id)); List<TheRapyRecuperationEnrollCompanion> companionList = dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
companionList.forEach(v -> { companionList.forEach(v -> {
v.setBedInfo(dao().fetch(TheRapyRecuperationEnrollBed.class, v.getBedInfoId())); if(StrUtil.isNotBlank(v.getBedInfoId())) {
v.setBedInfo(dao().fetch(TheRapyRecuperationEnrollBed.class, v.getBedInfoId()));
}
}); });
map.addv("viewData", fetch.setv("companionList", companionList)); map.addv("viewData", fetch.setv("companionList", companionList));
@@ -135,11 +134,10 @@ public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> im
String content = "【智慧工会】%s老师您好,您报名的%s线路因报名人数不足已取消,请尽快进入智慧工会重新选择线路。" String content = "【智慧工会】%s老师您好,您报名的%s线路因报名人数不足已取消,请尽快进入智慧工会重新选择线路。"
.formatted(user.getUsername(),theRapyRecuperationLine.getLineName()); .formatted(user.getUsername(),theRapyRecuperationLine.getLineName());
List list = List.of(Map.of("type", "User", "userId", user.getLoginname(), "name", user.getUsername()));
if (stateId.equals(TheRapyRecuperationState.PASS)) { if (stateId.equals(TheRapyRecuperationState.PASS)) {
content = "【智慧工会】%s老师您好,您报名的%s线路已组团成功,请按约定出行。" content = "【智慧工会】%s老师您好,您报名的%s线路已组团成功,请按约定出行。"
.formatted(user.getUsername(), theRapyRecuperationLine.getLineName()); .formatted(user.getUsername(), theRapyRecuperationLine.getLineName());
} }
//msgApi.sendMsg(content, list, "疗休养", " IntelligenceMode", MsgApi.sendMode.normal.name()); msgApi.sendTextMsg(content,user.getLoginname());
} }
} }
@@ -1,8 +1,7 @@
package io.v.nutz.zhgh.therapyRecuperation.service.impl; package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationType;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
@@ -1,8 +1,7 @@
package io.v.nutz.zhgh.therapyRecuperation.service.impl; package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollJoinUserImportService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollJoinUserImportService;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
@@ -2,10 +2,9 @@ package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl; import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineAdjustmentService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineAdjustmentService;
@@ -55,7 +54,8 @@ public class TheRapyRecuperationLineAdjustmentServiceImpl extends ViServiceImpl
us.id as usId, us.id as usId,
us.playStartTime, us.playStartTime,
us.playEndTime, us.playEndTime,
line.files AS fileId, line.files,
cast( line.files ->> '$[0].id' AS CHAR ) AS fileId,
create_gh.unionname AS createUnionName, create_gh.unionname AS createUnionName,
ta.travelAgencyName, ta.travelAgencyName,
us.unionId, us.unionId,
@@ -81,7 +81,7 @@ public class TheRapyRecuperationLineAdjustmentServiceImpl extends ViServiceImpl
cnd.and("us.playStartTime", "is not", null); cnd.and("us.playStartTime", "is not", null);
//cnd.andEX("line.year", "=", year); //cnd.andEX("line.year", "=", year);
cnd.andEX("line.id", "=", lineId); cnd.andEX("line.id", "=", lineId);
if (ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")) {
cnd.andEX("us.unionId", "=", unionId); cnd.andEX("us.unionId", "=", unionId);
cnd.andEX("us.signUpMode", "=", Strings.isNotBlank(unionId) ? 1 : 2); cnd.andEX("us.signUpMode", "=", Strings.isNotBlank(unionId) ? 1 : 2);
} else { } else {
@@ -2,9 +2,8 @@ package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationCluster; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationCluster;
@@ -122,7 +121,7 @@ public class TheRapyRecuperationLineClusterServiceImpl extends ViServiceImpl<The
// Cnd lineCnd = Cnd.NEW(); // Cnd lineCnd = Cnd.NEW();
// //如果是超管 前端传工会id 就不查自由模式的线路 只查线路归属分工会的线路 // //如果是超管 前端传工会id 就不查自由模式的线路 只查线路归属分工会的线路
// //如果是分工会管理员 不查不查自由模式的线路 由校工会去组团 // //如果是分工会管理员 不查不查自由模式的线路 由校工会去组团
// if (ShiroUtil.hasAnyRoles("sysadmin,A06")) { // if (ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")) {
// if (StrUtil.isNotBlank(unionId)) { // if (StrUtil.isNotBlank(unionId)) {
// sql.setVar("lineCnd", Cnd.where("1", "!=", "1")); // sql.setVar("lineCnd", Cnd.where("1", "!=", "1"));
// } else { // } else {
@@ -181,11 +180,10 @@ public class TheRapyRecuperationLineClusterServiceImpl extends ViServiceImpl<The
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
Cnd summaryCnd = Cnd.NEW(); Cnd summaryCnd = Cnd.NEW();
summaryCnd.and("isNormal", "=", true);
summaryCnd.and("takePartInLineId", "=", "us.id"); summaryCnd.and("takePartInLineId", "=", "us.id");
summaryCnd.and("stateId", "=", TheRapyRecuperationState.PASS); summaryCnd.and("stateId", "=", TheRapyRecuperationState.PASS);
//如果是超级管理和校工会管理员,查看校工会线路 //如果是超级管理和校工会管理员,查看校工会线路
if (ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")) {
cnd.andEX("us.unionId", "=", unionId); cnd.andEX("us.unionId", "=", unionId);
cnd.andEX("us.signUpMode", "=", Strings.isNotBlank(unionId) ? 1 : 2); cnd.andEX("us.signUpMode", "=", Strings.isNotBlank(unionId) ? 1 : 2);
}else{ }else{
@@ -2,11 +2,12 @@ package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl; import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationLineCreateMode; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationLineCreateMode;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationSignUpMode;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState; import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollCompanion; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollCompanion;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
@@ -23,6 +24,7 @@ import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.plugins.wkcache.annotation.CacheRemove; import org.nutz.plugins.wkcache.annotation.CacheRemove;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@@ -60,33 +62,10 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
@Override @Override
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public void addLine(TheRapyRecuperationLine line) { public void addLine(TheRapyRecuperationLine line) {
boolean hasSchoolAdminRole = ShiroUtil.hasAnyRoles(List.of("sysadmin", "A06")); if(line.getSignUpMode() == TheRapyRecuperationSignUpMode.UNION.getValue()) {
if (hasSchoolAdminRole) {
line.setCreateUnionId(null);
line.setCreateMode(TheRapyRecuperationLineCreateMode.SCHOOL.getValue());
insert(line);
} else if (ShiroUtil.hasRole("H04")) {
line.setCreateUnionId(Vi.getUnionId()); line.setCreateUnionId(Vi.getUnionId());
line.setCreateMode(TheRapyRecuperationLineCreateMode.UNION.getValue());
insert(line);
/*if (line.getSignUpMode() == TheRapyRecuperationSignUpMode.UNION.getValue()) {
TheRapyRecuperationLineUnionSelect unionSelect = new TheRapyRecuperationLineUnionSelect();
unionSelect.setUnionId(line.getCreateUnionId());
unionSelect.setLineId(line.getId());
unionSelect.setSelectTime(new Date());
unionSelect.setSelectUserId((String) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("id"));
unionSelect.setSignUpStartTime(line.getSignUpStartTime());
unionSelect.setSignUpEndTime(line.getSignUpEndTime());
unionSelect.setChangeEndTime(line.getChangeEndTime());
unionSelect.setPlayStartTime(line.getPlayStartTime());
unionSelect.setPlayEndTime(line.getPlayEndTime());
insert(unionSelect);
}*/
} }
insert(line);
} }
/** /**
@@ -98,34 +77,7 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public void editLine(TheRapyRecuperationLine line) { public void editLine(TheRapyRecuperationLine line) {
update(line); update(line);
/*if (line.getSignUpMode() == TheRapyRecuperationSignUpMode.UNION.getValue()) { deleteLineInfoCache(line.getId());
TheRapyRecuperationLineUnionSelect unionSelect = dao().fetch(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", line.getId()));
if (unionSelect != null) {
unionSelect.setSignUpStartTime(line.getSignUpStartTime());
unionSelect.setSignUpEndTime(line.getSignUpEndTime());
unionSelect.setChangeEndTime(line.getChangeEndTime());
unionSelect.setPlayStartTime(line.getPlayStartTime());
unionSelect.setPlayEndTime(line.getPlayEndTime());
updateIgnoreNull(unionSelect);
} else {
TheRapyRecuperationLineUnionSelect insertUnionSelect = new TheRapyRecuperationLineUnionSelect();
insertUnionSelect.setUnionId(line.getCreateUnionId());
insertUnionSelect.setLineId(line.getId());
insertUnionSelect.setSelectTime(new Date());
insertUnionSelect.setSelectUserId((String) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("id"));
insertUnionSelect.setSignUpStartTime(line.getSignUpStartTime());
insertUnionSelect.setSignUpEndTime(line.getSignUpEndTime());
insertUnionSelect.setChangeEndTime(line.getChangeEndTime());
insertUnionSelect.setPlayStartTime(line.getPlayStartTime());
insertUnionSelect.setPlayEndTime(line.getPlayEndTime());
insert(insertUnionSelect);
}
}
deleteLineInfoCache(line.getId());*/
} }
/** /**
@@ -161,8 +113,10 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
line.createUnionId, line.createUnionId,
line.signUpMode, line.signUpMode,
line.createMode, line.createMode,
line.files AS fileId, line.files,
ifnull(gh.unionname, '校工会') AS createUnionName, line.travelAgencyPlace,
cast( line.files ->> '$[0].id' AS CHAR ) AS fileId,
gh.unionname AS createUnionName,
u.username AS createUserName, u.username AS createUserName,
ta.travelAgencyName, ta.travelAgencyName,
ta.contact, ta.contact,
@@ -209,19 +163,20 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
enroll.userName, enroll.userName,
enroll.unionName, enroll.unionName,
enroll.unitName, enroll.unitName,
enroll.familyNumber,
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id) isFamily ( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id) isFamily
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
WHERE WHERE
enroll.takePartInLineId = @takePartInLineId lineu.id = @takePartInLineId
and enroll.stateId=@stateId and enroll.stateId=@stateId
$unionCnd $unionCnd
""").setParam("takePartInLineId", lineId).setParam("stateId", TheRapyRecuperationState.PASS); """).setParam("takePartInLineId", lineId).setParam("stateId", TheRapyRecuperationState.PASS);
if (StrUtil.isNotBlank(unionId) && !ShiroUtil.hasAnyRoles("sysadmin")) { if (StrUtil.isNotBlank(unionId) && !ShiroUtil.hasAnyRoles("sysadmin")) {
sql.setVar("unionCnd", "and (enroll.takePartInUnionId='%s' or enroll.selfUnionId='%s')".formatted(unionId, unionId)); // sql.setVar("unionCnd", "and (enroll.takePartInUnionId='%s' or enroll.selfUnionId='%s')".formatted(unionId, unionId));
//sql.setVar("unionCnd", "and enroll.selfUnionId='%s'".formatted(unionId)); sql.setVar("unionCnd", "and enroll.selfUnionId='%s'".formatted(unionId));
} }
Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList(); List<NutMap> list = pagination.getList();
@@ -3,10 +3,12 @@ package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl; import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi; import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
@@ -21,9 +23,11 @@ import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* @FileName io.v.nutz.zhgh.therapyRecuperation.service.impl.TheRapyRecuperationLineUnionSelectServiceImpl * @FileName io.v.nutz.zhgh.therapyRecuperation.service.impl.TheRapyRecuperationLineUnionSelectServiceImpl
@@ -48,7 +52,7 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
* @return {@link Pagination} * @return {@link Pagination}
*/ */
@Override @Override
public Pagination pageData(PageForm pageForm, Cnd cnd, Integer year) { public Pagination pageData(PageForm pageForm, Cnd cnd, Integer year, Integer mode) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
select select
line.id, line.id,
@@ -60,14 +64,14 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
line.isDisabled, line.isDisabled,
line.playNumberOfDays, line.playNumberOfDays,
line.createUnionId, line.createUnionId,
GROUP_CONCAT(us.playStartTime,'至',us.playEndTime,ifnull(concat('', ta.travelAgencyName, ''), '') order by us.playStartTime) as playTimes, GROUP_CONCAT(us.playStartTime,'至',us.playEndTime) as playTimes,
us.signUpStartTime, us.signUpStartTime,
us.signUpEndTime, us.signUpEndTime,
us.playStartTime, us.playStartTime,
us.playEndTime, us.playEndTime,
us.changeEndTime, us.changeEndTime,
us.isOpen, us.isOpen,
us.signUpMode, line.signUpMode,
line.createMode, line.createMode,
gh.unionname AS createUnionName, gh.unionname AS createUnionName,
u.username AS createUserName, u.username AS createUserName,
@@ -79,35 +83,27 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
us.unionId as usUnionId, us.unionId as usUnionId,
us.id as usId, us.id as usId,
usUnion.unionname as belongUnionName, usUnion.unionname as belongUnionName,
(SELECT COUNT(*) FROM the_rapy_recuperation_enroll WHERE takePartInLineId=us.id and isNormal=true) applyCount su.username as selectUserName,
(SELECT COUNT(*) FROM the_rapy_recuperation_enroll WHERE takePartInLineId=line.id AND takePartInUnionId=@unionId) applyCount
from from
the_rapy_recuperation_line line the_rapy_recuperation_line line
LEFT JOIN the_rapy_recuperation_travel_agency ta on ta.id = line.travelAgencyId
LEFT JOIN sys_union gh ON gh.id = line.createUnionid LEFT JOIN sys_union gh ON gh.id = line.createUnionid
LEFT JOIN sys_user u ON u.id = line.opBy LEFT JOIN sys_user u ON u.id = line.opBy
LEFT JOIN the_rapy_recuperation_line_union_select us on us.lineId = line.id AND year(selectTime) = @year $us LEFT JOIN the_rapy_recuperation_line_union_select us on us.lineId = line.id and year(selectTime) = @year $us
LEFT JOIN the_rapy_recuperation_travel_agency ta on ta.id = us.travelAgencyId
LEFT JOIN sys_union usUnion on usUnion.id = us.unionId LEFT JOIN sys_union usUnion on usUnion.id = us.unionId
LEFT JOIN sys_user su on us.selectUserId = su.id
LEFT JOIN the_rapy_recuperation_lot lot on lot.id = line.lotId LEFT JOIN the_rapy_recuperation_lot lot on lot.id = line.lotId
$condition $condition
"""); """);
if(!ShiroUtil.hasAnyRoles("sysadmin, A06")) { //sql.setVar("us", "AND us.selectUserId = '%s'".formatted(ShiroUtil.getPlatformUid()));
sql.setVar("us", "AND us.unionId = '%s' AND us.selectUserId = '%s'".formatted(Vi.getUnionId(), ShiroUtil.getPlatformUid()));
}
//sql.setParam("unionId", Vi.getUnionId());
//sql.setParam("userId", io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("id"));
sql.setParam("year", year == null ? DateUtil.thisYear() : year); sql.setParam("year", year == null ? DateUtil.thisYear() : year);
/*SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("line.createUnionId", "=", Vi.getUnionId());
seg.or("line.createMode", "=", TheRapyRecuperationLineCreateMode.SCHOOL.getValue());
cnd.and(seg);*/
cnd.groupBy("line.id"); cnd.groupBy("line.id");
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination pagination = list(pageForm, sql); Pagination pagination = list(pageForm, sql);
List<NutMap> list = pagination.getList(); List<NutMap> list = pagination.getList();
List<String> hasSelectLineIds = getHasSelectLineIds(); List<String> hasSelectLineIds = getHasSelectLineIds(mode);
for (NutMap m : list) { for (NutMap m : list) {
m.setv("isSelect", hasSelectLineIds.contains(m.getString("id"))); m.setv("isSelect", hasSelectLineIds.contains(m.getString("id")));
@@ -140,12 +136,26 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
* @return {@link List}<{@link String}> * @return {@link List}<{@link String}>
*/ */
@Override @Override
public List<String> getHasSelectLineIds() { public List<String> getHasSelectLineIds(Integer mode) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
select lineId from the_rapy_recuperation_line_union_select select lineId from the_rapy_recuperation_line_union_select $condition
where selectUserId = @userId
"""); """);
sql.setParam("userId", ShiroUtil.getPrincipalProperty("id")); Cnd cnd = Cnd.NEW();
cnd.and("signUpMode", "=", mode);
if(mode == 1) {
cnd.and("unionId", "=", Vi.getUnionId());
} else if(mode == 2) {
//既然你想校工会组织的线路,校工会的人都可以看,那就又根据角色查又根据部门查,可以吧
//想得多
List<Sys_user_role> userRoles = dao().query(Sys_user_role.class, Cnd.where("roleId", "=", "9b01918f873645048f8a85a4fc06d135"));
List<String> list = userRoles.stream().map(Sys_user_role::getUserId).distinct().toList();
List<User> userList = dao().query(User.class, Cnd.where("unitId", "=", "100414"));
List<String> idListByUnit = userList.stream().map(User::getId).toList();
cnd.and("selectUserId", "in", Stream.concat(list.stream(), idListByUnit.stream()).toList());
} else {
cnd.and("selectUserId", "=", ShiroUtil.getUserId());
}
sql.setCondition(cnd);
List<NutMap> lineIdsMap = (List<NutMap>) Daos.query(dao(), sql.toString(), Sqls.callback.maps()); List<NutMap> lineIdsMap = (List<NutMap>) Daos.query(dao(), sql.toString(), Sqls.callback.maps());
return lineIdsMap.stream().map(v -> v.getString("lineId")).collect(Collectors.toList()); return lineIdsMap.stream().map(v -> v.getString("lineId")).collect(Collectors.toList());
} }
@@ -159,34 +169,16 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
@Override @Override
public Object selectLineInfo(String lineId, String unionId, Integer mode, Integer year) { public Object selectLineInfo(String lineId, String unionId, Integer mode, Integer year) {
Sql sql; Sql sql;
sql = Sqls.create(""" sql = Sqls.create("""
select select
us.id, *
lineId,
signUpStartTime,
signUpEndTime,
changeEndTime,
playStartTime,
playEndTime,
us.contact,
us.contactPhone,
minimumGroupSize,
trafficTools,
estimatedCost,
estimatedFamilyNumbers,
us.travelAgencyId,
signUpMode,
enable,
ta.travelAgencyName
from from
the_rapy_recuperation_line_union_select us the_rapy_recuperation_line_union_select
left join the_rapy_recuperation_travel_agency ta on ta.id = us.travelAgencyId
where unionId = @unionId where unionId = @unionId
and lineId = @lineId and lineId = @lineId
and signUpMode = @mode and signUpMode = @mode
and year(selectTime) = @year and year(selectTime) = @year
ORDER BY signUpStartTime,playStartTime ASC ORDER BY signUpStartTime ASC
"""); """);
sql.setParam("unionId", unionId); sql.setParam("unionId", unionId);
sql.setParam("lineId", lineId); sql.setParam("lineId", lineId);
@@ -194,7 +186,6 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
sql.setParam("year", year == null ? DateUtil.thisYear() : year); sql.setParam("year", year == null ? DateUtil.thisYear() : year);
return listMap(sql); return listMap(sql);
// TheRapyRecuperationLine line = dao().fetch(TheRapyRecuperationLine.class, lineId); // TheRapyRecuperationLine line = dao().fetch(TheRapyRecuperationLine.class, lineId);
// if (line.getSignUpMode() == TheRapyRecuperationSignUpMode.UNION.getValue()) { // if (line.getSignUpMode() == TheRapyRecuperationSignUpMode.UNION.getValue()) {
// sql = Sqls.create(""" // sql = Sqls.create("""
@@ -3,9 +3,6 @@ package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.wizzer.framework.page.Pagination; import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.impl.ViServiceImpl; import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService; import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgencyService;
import org.nutz.dao.Chain; import org.nutz.dao.Chain;
@@ -84,7 +81,7 @@ public class TheRapyRecuperationTravelAgencyServiceImpl extends ViServiceImpl<Th
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
select select
*, *,
files as fileId cast(files ->> '$[0].id' as char) as fileId
from from
the_rapy_recuperation_travel_agency $condition the_rapy_recuperation_travel_agency $condition
"""); """);
@@ -119,8 +116,7 @@ public class TheRapyRecuperationTravelAgencyServiceImpl extends ViServiceImpl<Th
LEFT JOIN the_rapy_recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId LEFT JOIN the_rapy_recuperation_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
WHERE WHERE
enroll.takePartInTravelAgencyId = @takePartInTravelAgencyId enroll.takePartInTravelAgencyId = @takePartInTravelAgencyId
and enroll.selfUnionId = @unionId """).setParam("takePartInTravelAgencyId", id);
""").setParam("takePartInTravelAgencyId", id).setParam("unionId", Vi.getUnionId());
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
} }
} }
@@ -10,7 +10,7 @@
</h3> </h3>
</div> </div>
<el-descriptions :column="2" border class="viewTable"> <el-descriptions :column="2" border class="viewTable">
<el-descriptions-item label="号">{{ viewData.loginName }}</el-descriptions-item> <el-descriptions-item label="一卡通号">{{ viewData.loginName }}</el-descriptions-item>
<el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item> <el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item> <el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item> <el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item>
@@ -42,19 +42,21 @@
{{ viewData.isFamily ? '携带' : '未携带' }} {{ viewData.isFamily ? '携带' : '未携带' }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="床型">{{ viewData.bedInfo.bedType }}</el-descriptions-item> <template v-if="modifyConfig.bedInfo">
<el-descriptions-item label="床">{{ <el-descriptions-item label="床">{{ viewData.bedInfo.bedType }}</el-descriptions-item>
viewData.bedInfo.bedNum ? viewData.bedInfo.bedNum : '暂无' <el-descriptions-item label="床位">{{
}} viewData.bedInfo.bedNum ? viewData.bedInfo.bedNum : '暂无'
</el-descriptions-item> }}
</el-descriptions-item>
<el-descriptions-item label="意向拼床人"> <el-descriptions-item label="意向拼床人">
{{ viewData.bedInfo.otherSleepUser ? viewData.bedInfo.otherSleepUser : '暂无' }} {{ viewData.bedInfo.otherSleepUser ? viewData.bedInfo.otherSleepUser : '暂无' }}
</el-descriptions-item> </el-descriptions-item>
</template>
</el-descriptions> </el-descriptions>
</div> </div>
<div class="panel panel-default mt20" style="border: none"> <div v-if="modifyConfig.familyInfo == 2" class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> <div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title"> <h3 class="panel-title">
同伴信息 同伴信息
@@ -86,7 +88,7 @@
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="所属分工会审核信息" name="2" v-if="viewData.selfUnionAuditId"> <el-tab-pane label="所属分工会审核信息" name="2" v-if="viewData.selfUnionAuditId && viewData.selfUnionAudit">
<div class="panel panel-default mt20" style="border: none"> <div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> <div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title"> <h3 class="panel-title">
@@ -104,7 +106,7 @@
</el-descriptions> </el-descriptions>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="意向线路分工会审核信息" name="3" v-if="viewData.joinLineUnionAuditId"> <el-tab-pane label="意向线路分工会审核信息" name="3" v-if="viewData.joinLineUnionAuditId && viewData.joinLineUnionAudit">
<div class="panel panel-default mt20" style="border: none"> <div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> <div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title"> <h3 class="panel-title">
@@ -147,6 +149,7 @@ module.exports = {
bedInfo: {}, bedInfo: {},
}, },
loading: false, loading: false,
modifyConfig:{}
} }
}, },
methods: { methods: {
@@ -169,9 +172,16 @@ module.exports = {
openAudit(id, activeName) { openAudit(id, activeName) {
this.findOne(id) this.findOne(id)
this.activeName = activeName this.activeName = activeName
} },
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
}, },
created() { async created() {
await this.getModifyConfig();
} }
} }
</script> </script>
@@ -10,7 +10,7 @@
</h3> </h3>
</div> </div>
<el-descriptions :column="2" border class="viewTable"> <el-descriptions :column="2" border class="viewTable">
<el-descriptions-item label="号">{{ viewData.loginName }}</el-descriptions-item> <el-descriptions-item label="一卡通号">{{ viewData.loginName }}</el-descriptions-item>
<el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item> <el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item> <el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item> <el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item>
@@ -42,19 +42,22 @@
{{ viewData.isFamily ? '携带' : '未携带' }} {{ viewData.isFamily ? '携带' : '未携带' }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="床型">{{ viewData.bedInfo.bedType }}</el-descriptions-item>
<el-descriptions-item label="床位">{{
viewData.bedInfo.bedNum ? viewData.bedInfo.bedNum : '暂无'
}}
</el-descriptions-item>
<el-descriptions-item label="意向拼床人"> <template v-if="modifyConfig.bedInfo">
{{ viewData.bedInfo.otherSleepUser ? viewData.bedInfo.otherSleepUser : '暂无' }} <el-descriptions-item label="床型">{{ viewData.bedInfo.bedType }}</el-descriptions-item>
</el-descriptions-item> <el-descriptions-item label="床位">{{
viewData.bedInfo.bedNum ? viewData.bedInfo.bedNum : '暂无'
}}
</el-descriptions-item>
<el-descriptions-item label="意向拼床人">
{{ viewData.bedInfo.otherSleepUser ? viewData.bedInfo.otherSleepUser : '暂无' }}
</el-descriptions-item>
</template>
</el-descriptions> </el-descriptions>
</div> </div>
<div class="panel panel-default mt20" style="border: none"> <div v-if="modifyConfig.familyInfo == 2" class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> <div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title"> <h3 class="panel-title">
同伴信息 同伴信息
@@ -129,6 +132,7 @@ module.exports = {
bedInfo: {}, bedInfo: {},
}, },
loading: false, loading: false,
modifyConfig:{}
} }
}, },
methods: { methods: {
@@ -149,9 +153,16 @@ module.exports = {
openAudit(id, activeName) { openAudit(id, activeName) {
this.findOne(id) this.findOne(id)
this.activeName = activeName this.activeName = activeName
} },
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
}, },
created() { async created() {
await this.getModifyConfig();
} }
} }
</script> </script>
@@ -279,9 +279,9 @@ layout("/mobile/platform.html"){
</div> </div>
<div class="van-card-body"> <div class="van-card-body">
<van-field label="姓名" readonly v-model="formData.userName"></van-field> <van-field label="姓名" readonly v-model="formData.userName"></van-field>
<van-field label="号" readonly v-model="formData.loginName"></van-field> <van-field label="一卡通号" readonly v-model="formData.loginName"></van-field>
<van-field label="身份证" name="idCard" :rules="[{ required: true }]" <van-field label="身份证" name="idCard" :rules="[{ required: true }]"
placeholder="请填写身份证号" v-model="formData.idCard"></van-field> placeholder="请填写身份证号、护照、台胞证等" v-model="formData.idCard"></van-field>
<van-field label="手机号" name="mobile" :rules="[{ required: true }]" <van-field label="手机号" name="mobile" :rules="[{ required: true }]"
placeholder="请填写手机号" v-model="formData.mobile"></van-field> placeholder="请填写手机号" v-model="formData.mobile"></van-field>
<van-field label="所属工会" readonly v-model="formData.unionName"></van-field> <van-field label="所属工会" readonly v-model="formData.unionName"></van-field>
@@ -335,7 +335,7 @@ layout("/mobile/platform.html"){
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)"> <van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName" <van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName"
:rules="[{ required: true }]"></van-field> :rules="[{ required: true }]"></van-field>
<!--<van-field label="号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>--> <!--<van-field label="一卡通号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>-->
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age" <van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]"></van-field> type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator"> <van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
@@ -346,7 +346,7 @@ layout("/mobile/platform.html"){
</van-radio-group> </van-radio-group>
</template> </template>
</van-field> </van-field>
<van-field label="身份证" name="idCard" placeholder="请填写身份证号" <van-field label="身份证" name="idCard" placeholder="请填写身份证号、护照、台胞证等"
:rules="[{ required: true }]" type="digit" :rules="[{ required: true }]" type="digit"
v-model="item.idCard"></van-field> v-model="item.idCard"></van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号" <van-field label="手机号" name="mobile" placeholder="请填写手机号"
@@ -445,7 +445,7 @@ layout("/mobile/platform.html"){
active: 0, active: 0,
roomColumns: ['大床房', '标准间'], roomColumns: ['大床房', '标准间'],
bedColumns: ['1', '2'], bedColumns: ['1', '2'],
companionColumns: ['亲属', '朋友'], companionColumns: ['配偶', '子女'],
bedVisible: false, bedVisible: false,
roomVisible: false, roomVisible: false,
companionVisible: false, companionVisible: false,
@@ -36,16 +36,16 @@ layout("/mobile/platform.html"){
<div id="app" v-cloak> <div id="app" v-cloak>
<van-sticky> <van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder title="职工疗休养"></van-nav-bar> <van-nav-bar @click-left="pjaxReplace('/mobile/index')" fixed left-arrow placeholder title="职工疗休养"></van-nav-bar>
</van-sticky> </van-sticky>
<!--顶部轮播图--> <!--顶部轮播图-->
<van-swipe class="my-swipe" :autoplay="3000" indicator-color="white"> <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
<van-swipe-item> <van-swipe-item>
<van-image width="100%" height="180" src="/assets/mobile/img/therapyRecuperation/index1.jpg"></van-image> <van-image width="100%" height="180" src="/assets/mobile/img/therapyRecuperation/index1.jpeg"></van-image>
</van-swipe-item> </van-swipe-item>
<van-swipe-item> <van-swipe-item>
<van-image height="180" src="/assets/mobile/img/therapyRecuperation/index2.jpg"></van-image> <van-image height="180" src="/assets/mobile/img/therapyRecuperation/index1.jpeg"></van-image>
</van-swipe-item> </van-swipe-item>
</van-swipe> </van-swipe>
@@ -60,20 +60,11 @@ layout("/mobile/platform.html"){
</div> </div>
<!--疗休养描述--> <!--疗休养描述-->
<div class="van-doc-card" style="margin-top: 20px;margin-bottom: 60px"> <div class="van-doc-card" style="margin-top: 20px">
<van-image width="190" height="43" src="/assets/mobile/img/therapyRecuperation/title.png"></van-image> <van-image width="190" height="43" src="/assets/mobile/img/therapyRecuperation/title.png"></van-image>
<div class="pre_text" v-html="configData.notice"></div> <div class="pre_text" v-html="configData.notice"></div>
</div> </div>
<div>
<van-tabbar v-model="tarBarActive">
<van-tabbar-item icon="home-o" replace url="/platform/mobile/theRapyRecuperation/index">疗休养报名
</van-tabbar-item>
<van-tabbar-item icon="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的疗休养
</van-tabbar-item>
</van-tabbar>
</div>
</div> </div>
<script> <script>
const vue = new Vue({ const vue = new Vue({
@@ -83,7 +74,6 @@ layout("/mobile/platform.html"){
return { return {
chooseButton: [], chooseButton: [],
configData: {}, configData: {},
tarBarActive: 0,
} }
}, },
methods: { methods: {
@@ -98,7 +88,7 @@ layout("/mobile/platform.html"){
return return
} }
localStorage.setItem("clickIndex", JSON.stringify({clickIndex: index})) localStorage.setItem("clickIndex", JSON.stringify({clickIndex: index}))
location.href = '/platform/mobile/theRapyRecuperation/mobileLineListPage' pjaxReplace('/platform/mobile/theRapyRecuperation/mobileLineListPage')
}, },
async getConfigData() { async getConfigData() {
const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne') const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne')
@@ -3,6 +3,10 @@ layout("/mobile/platform.html"){
#--> #-->
<style> <style>
#app {
font-family: ,serif;
}
.container img { .container img {
background-size: contain; background-size: contain;
width: 100%; width: 100%;
@@ -11,13 +15,22 @@ layout("/mobile/platform.html"){
display: block; display: block;
} }
.backTop {
display: none !important;
}
.header { .header {
padding: 20px; padding: 20px;
} }
.content { .content {
line-height: 26px; line-height: 26px;
padding: 0px 20px 56px 20px; padding: 0px 10px 56px 10px;
}
.pdf_div {
padding-bottom: 70px;
height: 800px;
} }
.title { .title {
@@ -179,10 +192,11 @@ layout("/mobile/platform.html"){
.submitButton { .submitButton {
background-color: white !important; background-color: white !important;
width: 100%; width: 100%;
height: 60px; /*height: 60px;
display: flex; display: flex;
justify-content: space-evenly; justify-content: space-evenly;
align-items: center; align-items: center;*/
text-align: center;
} }
.submitButton .van-button { .submitButton .van-button {
@@ -195,84 +209,133 @@ layout("/mobile/platform.html"){
background-color: white; background-color: white;
} }
.van-tag {
color: white !important;
}
.viewerContainer {
overflow: unset !important;
}
.sign_div {
background-color: white;
margin-bottom: 16px;
padding: 18px;
border-radius: 6px;
box-shadow: 0 8px 12px #ebedf0;
}
.van-action-sheet {
max-height: 90%;
}
</style> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
<van-sticky> <van-sticky>
<van-nav-bar @click-left="history.go(-1)" fixed left-arrow placeholder title="职工疗休养-线路介绍"></van-nav-bar> <van-nav-bar @click-left="history.go(-1)" fixed left-arrow placeholder
title="职工疗休养-线路介绍"></van-nav-bar>
</van-sticky> </van-sticky>
<!--线路详情--> <template v-if="isLoad">
<van-skeleton title :loading="skeLoading" :row="12"> <!--线路详情-->
<div class="container"> <van-skeleton title :loading="skeLoading" :row="12">
<div class="header"> <div class="container">
<div class="title"> <div class="header">
<van-tag size="large" color="#1867b0" style="color: white;position: relative; top: -2px"> <div class="title">
{{lineData.lotName}} <van-tag size="large" color="#1867b0" style="position: relative; top: -2px">
</van-tag> {{lineData.lotName}}
{{lineData.lineName}} </van-tag>
</div> {{lineData.lineName}}
<div style="margin-top: 10px">
<div>
<span class="line_label">成团人数:</span>
{{lineData.minimumGroupSize ? lineData.minimumGroupSize : 0}}人(最少)
</div> </div>
<div> <div style="margin-top: 10px">
<span>当前报名:</span> <div v-if="lineData.regionalNature == '省内'">
{{lineData.signUpUserNum + lineData.signUpUserFamilyNum + '(家属' + lineData.signUpUserFamilyNum + <div>
'人)'}} <span class="line_label">成团人数包括家属:</span>
</div> <label v-if="lineData.estimatedFamilyNumbers">{{lineData.estimatedFamilyNumbers}}人</label>
<div> <label v-else>不限制</label>
<span>报名时间:</span> </div>
{{moment(lineData.signUpStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' + <div v-if="configData.familyInfo == 2">
moment(lineData.signUpEndTime).format('YYYY-MM-DD HH:mm')}} <span>当前报名:</span>
</div> {{lineData.signUpUserNum + lineData.signUpUserFamilyNum + '(家属' + lineData.signUpUserFamilyNum + '人)'}}
<div> </div>
<span>出行时间:</span> <div v-else>
{{moment(lineData.playStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' + <span>当前报名:</span>
moment(lineData.playEndTime).format('YYYY-MM-DD HH:mm')}} {{lineData.signUpUserNum + lineData.familyNumber + '(家属' + lineData.familyNumber + '人)'}}
</div> </div>
<div> </div>
<span>&ensp;&ensp;社:</span>
{{lineData.travelAgencyName}} <div v-else>
</div> <div>
<div> <span class="line_label">最多成团人数:</span>
<span>联系方式:</span> <label>{{configData.outsideQuota}}人</label>
{{lineData.contactMobileNumber}} </div>
<div v-if="configData.familyInfo == 2">
<span>当前报名:</span>
{{lineData.signUpUserNum + '(家属' + lineData.signUpUserFamilyNum + '人)'}}
</div>
<div v-else>
<span>当前报名:</span>
{{lineData.signUpUserNum + '(家属' + lineData.familyNumber + '人)'}}
</div>
</div>
<div>
<span>报名时间:</span>
{{moment(lineData.signUpStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(lineData.signUpEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>出行时间:</span>
{{moment(lineData.playStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(lineData.playEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>&ensp;&ensp;社:</span>
{{lineData.travelAgencyName}}
</div>
<div>
<span>联系方式:</span>
{{lineData.contactMobileNumber}}
</div>
</div> </div>
</div> </div>
<van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看,再单击返回</van-divider>
<!--<div v-if="lineData.content" v-html="lineData.content" class="content"></div>
<div v-else v-html="configData.notice" class="content"></div>-->
<div v-if="isPdf" v-html="lineData.content" class="content"></div>
<div v-else id="demo" class="pdf_div"></div>
<!--<van-empty
v-else class="custom-image"
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
description="暂无详细信息"
></van-empty>-->
</div> </div>
<van-divider></van-divider> </van-skeleton>
<div v-if="lineData.content" v-html="lineData.content" class="content"></div>
<div v-else v-html="configData.notice" class="content"></div> <!--置顶图标-->
<!--<van-empty <image v-if="btnFlag" @click="backTop" src="/assets/mobile/svg/therapyRecuperation/top.svg"
v-else class="custom-image" class="top_icon"></image>
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
description="暂无详细信息" <!--底部报名按钮-->
></van-empty>--> <div class="footer" v-if="fromUrlByMy != 'edit'">
<template v-if="lineData.isNormal==0&&lineData.isNormalFalse>0">
<van-button @click="join"
class="join">我要报名
</van-button>
</template>
<template v-else>
<van-button v-if="moment().unix() <= moment(lineData.changeEndTime).unix()" @click="join"
class="join">我要报名
</van-button>
<van-button v-if="moment().unix() > moment(lineData.changeEndTime).unix()" class="join">报名结束
</van-button>
</template>
</div> </div>
</van-skeleton> </template>
<!--置顶图标-->
<image v-if="btnFlag" @click="backTop" src="/assets/mobile/svg/therapyRecuperation/top.svg"
class="top_icon"></image>
<!--底部报名按钮-->
<div class="footer" v-if="fromUrlByMy != 'edit'">
<template v-if="lineData.isNormal==0&&lineData.isNormalFalse>0">
<van-button @click="join"
class="join">我要报名
</van-button>
</template>
<template v-else>
<van-button v-if="moment().unix() <= moment(lineData.signUpEndTime).unix()" @click="join"
class="join">我要报名
</van-button>
<van-button v-if="moment().unix() > moment(lineData.signUpEndTime).unix()" class="join">报名结束</van-button>
</template>
</div>
<!--报名弹出框--> <!--报名弹出框-->
<van-popup v-model:show="joinPopup" position="right" class="joinPopup"> <van-popup v-model:show="joinPopup" position="right" class="joinPopup">
<van-nav-bar @click-left="joinPopup = false" fixed left-arrow placeholder title="疗休养报名"></van-nav-bar> <van-nav-bar @click-left="joinPopup = false" fixed left-arrow placeholder title="疗休养报名"></van-nav-bar>
@@ -288,9 +351,9 @@ layout("/mobile/platform.html"){
</div> </div>
<div class="van-card-body"> <div class="van-card-body">
<van-field label="姓名" readonly v-model="formData.userName"></van-field> <van-field label="姓名" readonly v-model="formData.userName"></van-field>
<van-field label="号" readonly v-model="formData.loginName"></van-field> <van-field label="一卡通号" readonly v-model="formData.loginName"></van-field>
<van-field label="身份证" name="idCard" :rules="[{ required: true }]" <van-field label="身份证" name="idCard" :rules="[{ required: true }]"
placeholder="请填写身份证号" v-model="formData.idCard"></van-field> placeholder="请填写身份证号、护照、台胞证等" v-model="formData.idCard"></van-field>
<van-field label="手机号" name="mobile" :rules="[{ required: true }]" <van-field label="手机号" name="mobile" :rules="[{ required: true }]"
placeholder="请填写手机号" v-model="formData.mobile"></van-field> placeholder="请填写手机号" v-model="formData.mobile"></van-field>
<van-field label="所属工会" readonly v-model="formData.unionName"></van-field> <van-field label="所属工会" readonly v-model="formData.unionName"></van-field>
@@ -299,7 +362,7 @@ layout("/mobile/platform.html"){
</div> </div>
<!--床位信息--> <!--床位信息-->
<div class="van-doc-card" style="margin-bottom: 16px"> <div v-if="configData.bedInfo === true" class="van-doc-card" style="margin-bottom: 16px">
<div></div> <div></div>
<div class="van-card-header"> <div class="van-card-header">
床位信息 床位信息
@@ -312,7 +375,8 @@ layout("/mobile/platform.html"){
readonly is-link label="床位" readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="formData.bedInfo.bedNum" name="bedNum" placeholder="请选择床位" v-model="formData.bedInfo.bedNum"
:rules="[{ required: true }]"></van-field> :rules="[{ required: true }]"></van-field>
<van-field v-if="formData.bedInfo.bedType == '标准间'" :rules="[{ validator, message: '请选择是否拼房' }]" <van-field v-if="formData.bedInfo.bedType == '标准间'"
:rules="[{ validator, message: '请选择是否拼房' }]"
label="是否拼房" name="validator"> label="是否拼房" name="validator">
<template #input> <template #input>
<van-radio-group direction="horizontal" v-model="formData.bedInfo.isSleepTogether"> <van-radio-group direction="horizontal" v-model="formData.bedInfo.isSleepTogether">
@@ -321,10 +385,11 @@ layout("/mobile/platform.html"){
</van-radio-group> </van-radio-group>
</template> </template>
</van-field> </van-field>
<van-field v-if="formData.bedInfo.bedType == '标准间' && formData.bedInfo.isSleepTogether == true" <van-field
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开" v-if="formData.bedInfo.bedType == '标准间' && formData.bedInfo.isSleepTogether == true"
v-model="formData.bedInfo.otherSleepUser" label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
:rules="[{ required: true }]"></van-field> v-model="formData.bedInfo.otherSleepUser"
:rules="[{ required: true }]"></van-field>
</div> </div>
</div> </div>
@@ -334,71 +399,97 @@ layout("/mobile/platform.html"){
<div class="van-card-header" <div class="van-card-header"
style="display: flex; justify-content: space-between; align-items: center"> style="display: flex; justify-content: space-between; align-items: center">
<span style="float:left;">随行人信息</span> <span style="float:left;">随行人信息</span>
<div> <div v-if="configData.familyInfo === 2">
<van-tag @click="delCompanion" size="large" type="primary" color="lightgrey">删除随行人</van-tag> <van-tag @click="delCompanion" size="large" type="primary" color="lightgrey">删除随行人
<van-tag @click="addCompanion" size="large" type="primary" color="#1867b0">添加随行人</van-tag> </van-tag>
<van-tag @click="addCompanion" size="large" type="primary" color="#1867b0">添加随行人
</van-tag>
</div> </div>
</div> </div>
<div v-if="formData.companionList.length > 0" class="van-card-body"> <template v-if="configData.familyInfo === 2">
<van-tabs v-model="active" type="card" color="#0e78c5" animated> <div v-if="formData.companionList.length > 0" class="van-card-body">
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)"> <van-tabs v-model="active" type="card" color="#0e78c5" animated>
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName" <van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
:rules="[{ required: true }]"></van-field> <van-field label="姓名" name="userName" placeholder="请填写姓名"
<!--<van-field label="工号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>--> v-model="item.userName"
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age" :rules="[{ required: true }]"></van-field>
type="digit" :rules="[{ required: true }]"></van-field> <!--<van-field label="一卡通号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>-->
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator"> <van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
<template #input> type="digit" :rules="[{ required: true }]"></van-field>
<van-radio-group direction="horizontal" v-model="item.sex"> <van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别"
<van-radio name="男" shape="square"></van-radio> name="validator">
<van-radio name="女" shape="square"></van-radio> <template #input>
</van-radio-group> <van-radio-group direction="horizontal" v-model="item.sex">
</template> <van-radio name="男" shape="square"></van-radio>
</van-field> <van-radio name="女" shape="square"></van-radio>
<van-field label="身份证号" name="idCard" placeholder="请填写身份证号" </van-radio-group>
:rules="[{ required: true }]" type="digit" </template>
v-model="item.idCard"></van-field> </van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号" <van-field label="身份证件" name="idCard" placeholder="请填写身份证号、护照、台胞证等"
:rules="[{ required: true }]" type="digit" :rules="[{ required: true }]"
v-model="item.mobile"></van-field> v-model="item.idCard"></van-field>
<van-field @click="companionVisible = true" readonly is-link label="与本人关系" <van-field label="手机号" name="mobile" placeholder="请填写手机号"
name="relation" :rules="[{ required: true }]" type="digit"
placeholder="随行人与本人关系" v-model="item.relation" v-model="item.mobile"></van-field>
:rules="[{ required: true }]"></van-field> <van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation"
placeholder="随行人与本人关系" v-model="item.relation"
:rules="[{ required: true }]"></van-field>
<van-field @click="self = false; roomVisible = true" readonly is-link label="房间" <van-field @click="self = false; roomVisible = true" readonly is-link label="房间"
name="bedType" placeholder="请选择房间" name="bedType" placeholder="请选择房间"
v-model="item.bedInfo.bedType"></van-field> v-model="item.bedInfo.bedType"></van-field>
<div style="font-size: 12px; color:orangered; padding-left: 16px; padding-bottom: 4px"> <div style="font-size: 12px; color:orangered; padding-left: 16px; padding-bottom: 4px">
提醒:如果跟报名人员同一房间,无须选择! 提醒:如果跟报名人员同一房间,无须选择!
</div> </div>
<van-field v-if="item.bedInfo.bedType == '标准间'" @click="self = false; bedVisible = true" <van-field v-if="item.bedInfo.bedType == '标准间'"
readonly is-link label="床位" @click="self = false; bedVisible = true"
name="bedNum" placeholder="请选择床位" v-model="item.bedInfo.bedNum"></van-field> readonly is-link label="床位"
<van-field v-if="item.bedInfo.bedType == '标准间'" name="bedNum" placeholder="请选择床位"
:rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房"> v-model="item.bedInfo.bedNum"></van-field>
<template #input> <van-field v-if="item.bedInfo.bedType == '标准间'"
<van-radio-group direction="horizontal" v-model="item.bedInfo.isSleepTogether"> :rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房">
<van-radio :name="true" shape="square"></van-radio> <template #input>
<van-radio :name="false" shape="square"></van-radio> <van-radio-group direction="horizontal"
</van-radio-group> v-model="item.bedInfo.isSleepTogether">
</template> <van-radio :name="true" shape="square"></van-radio>
</van-field> <van-radio :name="false" shape="square"></van-radio>
<van-field v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true" </van-radio-group>
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开" </template>
v-model="item.bedInfo.otherSleepUser"></van-field> </van-field>
</van-tab> <van-field
</van-tabs> v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true"
</div> label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
<div v-if="formData.companionList.length == 0" class="companionList_empty_text"> v-model="item.bedInfo.otherSleepUser"></van-field>
<span> </van-tab>
如有随行人出行,请添加随行人 </van-tabs>
</div>
<div v-if="formData.companionList.length == 0" class="companionList_empty_text">
<span>
如有随行人出行,请添加随行人
</span>
</div>
</template>
<template v-else>
<van-field label="家属数量" name="familyNumber" placeholder="请填写家属数量" v-model="formData.familyNumber"
type="digit" :rules="[{ required: true }]"></van-field>
</template>
</div>
<div class="sign_div" v-if="formData.companionList.length > 0">
<div style="display: flex">
<van-checkbox v-model="hasRead" shape="square" @change="readChange" class="mr10"></van-checkbox>
我已查看
<span @click="openRead" style="color: #0e5996; text-decoration: underline">
《{{configData.files[0].filename.replace(/\.[^/.]+$/, '')}}》
</span> </span>
<van-tag @click="openRead" size="large" type="primary" color="#1867b0">查看</van-tag>
</div> </div>
<mobile-sign v-if="hasRead" class="mt10" ref="signature" v-model="formData.sign" :is_value_base64="false"></mobile-sign>
</div> </div>
<div class="submitButton"> <div class="submitButton">
<van-button class="join join_submit">提交报名</van-button> <van-button class="join join_submit" style="margin: 10px 0">提交报名</van-button>
</div> </div>
</van-form> </van-form>
@@ -437,6 +528,14 @@ layout("/mobile/platform.html"){
</van-picker> </van-picker>
</van-popup> </van-popup>
<van-action-sheet v-model="readVisible" title="请仔细阅读确认后签字">
<van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看,再单击返回</van-divider>
<div id="readFile" style="height: 530px; overflow-y: auto"></div>
<div class="submitButton">
<van-button @click="onRead" class="join join_submit" style="margin: 10px 0">我已阅读确认</van-button>
</div>
</van-action-sheet>
</div> </div>
<script> <script>
function getQueryString(name) { function getQueryString(name) {
@@ -446,15 +545,21 @@ layout("/mobile/platform.html"){
return null; return null;
} }
let pdfh5 = null
const vue = new Vue({ const vue = new Vue({
el: '#app', el: '#app',
mixins: [mobileMixins], mixins: [mobileMixins],
data() { data() {
return { return {
readVisible: false,
hasRead: false,
clickRead: false,
isPdf: false,
isLoad: false,
active: 0, active: 0,
roomColumns: ['大床房', '标准间'], roomColumns: ['大床房', '标准间'],
bedColumns: ['1', '2'], bedColumns: ['1', '2'],
companionColumns: ['亲属', '朋友'], companionColumns: ['配偶', '子女'],
bedVisible: false, bedVisible: false,
roomVisible: false, roomVisible: false,
companionVisible: false, companionVisible: false,
@@ -483,7 +588,32 @@ layout("/mobile/platform.html"){
configData: {}, configData: {},
} }
}, },
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue?v=' + new Date().getTime()),
},
methods: { methods: {
openRead() {
this.readVisible = true
this.$nextTick(() => {
if(this.configData.files && this.configData.files.length > 0) {
const pdf = new Pdfh5('#readFile', {
pdfurl: CREATE_PREVIEW_URL(this.configData.files[0].id),
})
this.readPDFPicture(pdf)
}
})
},
onRead() {
this.clickRead = true
this.hasRead = true
this.readVisible = false
},
readChange() {
if(this.clickRead === false) {
this.$toast('请先阅读携带家属须知')
this.hasRead = false
}
},
roomCancel() { roomCancel() {
if (!this.self) { if (!this.self) {
this.formData.companionList[this.active].bedInfo.bedType = '' this.formData.companionList[this.active].bedInfo.bedType = ''
@@ -510,36 +640,51 @@ layout("/mobile/platform.html"){
return value != null return value != null
}, },
async joinSubmit() { async joinSubmit() {
const toast = vant.Toast.loading({ if(this.formData.companionList.length > 0) {
duration: 0, if(this.hasRead === false) {
forbidClick: true, this.$toast('请先阅读携带家属须知')
overlay: true, return
message: '努力提交中',
})
const cloneData = clone(this.formData)
cloneData.companionList.forEach((item, index) => {
if (item.userName === '') {
cloneData.companionList.splice(index, 1)
} }
}) if(!this.formData.sign) {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForLine', { this.$toast('请签字')
enroll: JSON.stringify(cloneData), return
})
setTimeout(() => {
if (resp.code === 0) {
toast.message = '提交成功'
toast.type = 'success'
} else {
toast.message = resp.msg
toast.type = 'fail'
} }
}
vant.Dialog.confirm({
title: '温馨提示',
message: '确定要报名吗?',
}).then(async () => {
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
const cloneData = clone(this.formData)
cloneData.companionList.forEach((item, index) => {
if (item.userName === '') {
cloneData.companionList.splice(index, 1)
}
})
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForLine', {
enroll: JSON.stringify(cloneData),
})
setTimeout(() => { setTimeout(() => {
toast.clear() if (resp.code === 0) {
}, 500) toast.message = '提交成功'
if (resp.code === 0) { toast.type = 'success'
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index } else {
} toast.message = resp.msg
}, 1000) toast.type = 'fail'
}
setTimeout(() => {
toast.clear()
}, 500)
if (resp.code === 0) {
pjaxReplace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index)
}
}, 1000)
})
}, },
addCompanion() { addCompanion() {
this.formData.companionList.push({userName: '', loginName: '', sex: '', relation: '', bedInfo: {}}) this.formData.companionList.push({userName: '', loginName: '', sex: '', relation: '', bedInfo: {}})
@@ -557,19 +702,21 @@ layout("/mobile/platform.html"){
}), }),
}) })
if (re.code !== 0) { if (re.code !== 0) {
if(re.msg === '您今年已报名,如要继续报名请进入我的疗休养,取消已选择') { if (re.msg === '您今年已报名,如要继续报名请进入我的疗休养,取消已选择') {
vant.Dialog.confirm({ vant.Dialog.confirm({
title: '温馨提示', title: '温馨提示',
message: re.msg, message: re.msg,
confirmButtonText: '跳转页面', confirmButtonText: '跳转页面',
}).then(() => { }).then(() => {
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index
}).catch(() => {}); }).catch(() => {
});
} else { } else {
vant.Dialog.alert({ vant.Dialog.alert({
title: '温馨提示', title: '温馨提示',
message: re.msg, message: re.msg,
}).then(() => {}) }).then(() => {
})
} }
return return
} }
@@ -641,6 +788,34 @@ layout("/mobile/platform.html"){
const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne') const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne')
this.configData = resp.data this.configData = resp.data
}, },
readPDFPicture(pdf) {
if(pdf != null) {
pdf.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
})
}
},
}, },
async created() { async created() {
this.id = getQueryString('id') ? getQueryString('id') : '' this.id = getQueryString('id') ? getQueryString('id') : ''
@@ -653,16 +828,37 @@ layout("/mobile/platform.html"){
if (this.enrollId) { if (this.enrollId) {
await this.findSignUpInfoById() await this.findSignUpInfoById()
} }
this.getData() await this.getData()
this.isLoad = true
try {
const parser = new DOMParser();
const doc = parser.parseFromString(this.lineData.content, 'text/html');
const link = doc.querySelector('a');
const href = link.getAttribute('href');
this.$nextTick(() => {
pdfh5 = new Pdfh5('#demo', {
pdfurl: href,
});
})
}catch (e) {
this.isPdf = true
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview({
images: [event.target.src],
closeable: true,
})
}
})
}
this.$nextTick(() => {
this.readPDFPicture(pdfh5)
})
}, },
mounted() { mounted() {
window.addEventListener('scroll', this.scrollToTop) window.addEventListener('scroll', this.scrollToTop)
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview([event.target.src])
}
})
}, },
destroyed() { destroyed() {
window.removeEventListener('scroll', this.scrollToTop) window.removeEventListener('scroll', this.scrollToTop)
@@ -3,6 +3,10 @@ layout("/mobile/platform.html"){
#--> #-->
<style> <style>
#app {
font-family: , serif;
}
.van-doc-card { .van-doc-card {
margin: 10px; margin: 10px;
padding: 12px 12px 12px 12px; padding: 12px 12px 12px 12px;
@@ -29,7 +33,6 @@ layout("/mobile/platform.html"){
.list-card > .content { .list-card > .content {
padding: 16px 10px; padding: 16px 10px;
display: flex; display: flex;
max-height: 100px;
} }
.content-right { .content-right {
@@ -77,19 +80,21 @@ layout("/mobile/platform.html"){
.footer { .footer {
background-color: white; background-color: white;
position: fixed;
bottom: 0;
width: 100%; width: 100%;
height: 60px;
display: flex; display: flex;
justify-content: space-evenly; justify-content: space-evenly;
align-items: center; align-items: center;
left: 0;
} }
.footer .van-button { .footer .van-button {
height: 34px; height: 30px;
font-size: 12px;
border-radius: 6px; border-radius: 6px;
padding: 0 8px;
}
.van-divider {
margin: 8px 0;
} }
.active { .active {
@@ -122,6 +127,20 @@ layout("/mobile/platform.html"){
font-size: 12px; font-size: 12px;
} }
.sign_button .van-button {
width: 74px;
height: 28px;
color: white;
background: rgb(24, 103, 176);
border-color: rgb(24, 103, 176);
font-size: 12px;
border-radius: 6px;
}
[v-cloak] {
display: none;
}
</style> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
@@ -129,10 +148,10 @@ layout("/mobile/platform.html"){
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder title="疗休养线路"></van-nav-bar> <van-nav-bar @click-left="history.back()" fixed left-arrow placeholder title="疗休养线路"></van-nav-bar>
</van-sticky> </van-sticky>
<van-dropdown-menu> <!--<van-dropdown-menu>
<van-dropdown-item v-model="pageForm.year" :options="yearArray" <van-dropdown-item v-model="pageForm.year" :options="yearArray"
@change="doSearch"></van-dropdown-item> @change="doSearch"></van-dropdown-item>
</van-dropdown-menu> </van-dropdown-menu>-->
<!--按钮导航--> <!--按钮导航-->
<div class="choose_button van-doc-card"> <div class="choose_button van-doc-card">
@@ -145,20 +164,42 @@ layout("/mobile/platform.html"){
</div> </div>
</van-grid-item> </van-grid-item>
</van-grid> </van-grid>
<van-divider></van-divider>
<div class="footer" v-if="['0', '1', 0 , 1].includes(pageForm.theRapyRecuperationType)">
<van-button :class="pageForm.lineUnionType == 3 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 3; getData()">
校工会组织
</van-button>
<van-button :class="pageForm.lineUnionType == 1 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 1; getData()">
本分工会
</van-button>
<van-button :class="pageForm.lineUnionType == 2 ? 'active' : 'no_active'"
@click="otherUnionClick">
其他分工会
</van-button>
<van-button :class="pageForm.lineUnionType == 4 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 4; getData()">
个人组织
</van-button>
</div>
</div> </div>
<van-list <van-list
:finished="finished" :finished="finished"
:immediate-check="true" :immediate-check="true"
@load="onLoad"
finished-text="没有更多了" finished-text="没有更多了"
@load="onLoad"
v-model="loading"> v-model="loading">
<div @click.stop="findOne(o)" class="list-card" v-for="o in tableData"> <div @click.stop="clickLineRow(o)" class="list-card" v-for="o in tableData">
<div class="content"> <div class="content">
<van-image <van-image
height="100" height="100"
radius="8" radius="8"
:src="APP_DOMAIN + '/file_server/fileStreamPreview?id=' + o.fileId" :src="CREATE_PREVIEW_URL(o.fileId)"
width="150"> width="150">
</van-image> </van-image>
<div v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'" <div v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'"
@@ -166,22 +207,30 @@ layout("/mobile/platform.html"){
<div class="cr-title"> <div class="cr-title">
<span>{{o.lineName}}</span> <span>{{o.lineName}}</span>
<div> <div>
<van-tag color="#1867b0">{{o.lotName}}</van-tag> <van-tag color="#1867b0">{{o.travelAgencyPlace}}</van-tag>
<van-tag color="#1867b0">{{o.signUpMode === 2 ? '校工会' : <van-tag v-if="o.signUpMode === 1" color="#1867b0">{{o.usUnionName}}</van-tag>
o.usUnionName}} <van-tag v-if="o.signUpMode === 2" color="#1867b0">{{'校工会'}}</van-tag>
</van-tag> <van-tag v-if="o.signUpMode === 3" color="#1867b0">{{o.selectUserName}}</van-tag>
</div> </div>
</div> </div>
<div class="desc_info"> <div class="desc_info">
<!--<div class="union"> <!--<div class="union">
<span>组织形式:</span>{{o.createMode === 2 && o.signUpMode === 2 ? '校工会' : o.usUnionName}} <span>组织形式:</span>{{o.createMode === 2 && o.signUpMode === 2 ? '校工会' : o.usUnionName}}
</div>--> </div>-->
<div class="concat"> <div class="concat" v-if="modifyConfig.familyInfo == 2">
<span>已报人数:</span>{{o.signUpUserNum + o.signUpUserFamilyNum + '(家属' + <span>已报人数:</span>{{o.signUpUserNum + o.signUpUserFamilyNum + '(家属' +
o.signUpUserFamilyNum + '人)'}} o.signUpUserFamilyNum + '人)'}}
</div> </div>
<div class="mobile" style="color: red">
<span>出行时间:</span>{{moment(o.playStartTime).format('YYYY-MM-DD')}} <div class="concat" v-else>
<!--<span>已报人数:</span>{{o.signUpUserNum + o.familyNumber + '(家属' +
o.familyNumber + '人)'}}-->
<span>&ensp;&ensp;人:</span>{{o.contact}}
</div>
<div class="mobile">
<!--<span>出行时间:</span>{{moment(o.playStartTime).format('YYYY-MM-DD')}}-->
<span>联系方式:</span>{{o.contactMobileNumber}}
</div> </div>
<div class="mobile"> <div class="mobile">
<span>&ensp;&ensp;社:</span>{{o.travelAgencyName}} <span>&ensp;&ensp;社:</span>{{o.travelAgencyName}}
@@ -244,22 +293,6 @@ layout("/mobile/platform.html"){
</div> </div>
</van-list> </van-list>
<div class="footer"
v-if="['0', '1', 0 , 1].includes(pageForm.theRapyRecuperationType)">
<van-button :class="pageForm.lineUnionType == 2 ? 'active' : 'no_active'"
@click="otherUnionClick">
其他工会
</van-button>
<van-button :class="pageForm.lineUnionType == 1 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 1; getData()">
本工会
</van-button>
<van-button :class="pageForm.lineUnionType == 3 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 3; getData()">
校工会
</van-button>
</div>
<van-popup position="bottom" round v-model:show="unionPop"> <van-popup position="bottom" round v-model:show="unionPop">
<van-picker <van-picker
title="选择分工会" show-toolbar title="选择分工会" show-toolbar
@@ -268,6 +301,30 @@ layout("/mobile/platform.html"){
@cancel="unionPop = false" @cancel="unionPop = false"
></van-picker> ></van-picker>
</van-popup> </van-popup>
<van-action-sheet
v-model="selectLinePopup"
cancel-text="取消"
:description="clickRow.lineName"
close-on-click-action>
<button @click="onSelect(item)" v-for="(item,index) in selectLineList" type="button"
class="van-action-sheet__item">
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<div class="van-action-sheet__name">{{item.name}}</div>
<div class="van-action-sheet__name">{{item.playTime}}</div>
<div class="van-action-sheet__subname">{{item.subname}}</div>
</div>
<div class="sign_button">
<van-button @click.stop="onSelect(item)" size="mini" type="info"
style="margin-right: 8px">
点击报名
</van-button>
</div>
</div>
</button>
</van-action-sheet>
</div> </div>
<script> <script>
@@ -279,7 +336,6 @@ layout("/mobile/platform.html"){
} }
const vue = new Vue({ const vue = new Vue({
el: '#app', el: '#app',
mixins: [mobileMixins], mixins: [mobileMixins],
@@ -291,20 +347,52 @@ layout("/mobile/platform.html"){
chooseButton: [], chooseButton: [],
pageForm: { pageForm: {
theRapyRecuperationType: 0, theRapyRecuperationType: 0,
lineUnionType: 1, //lineUnionType: 1,
unionId: "${@shiro.getPrincipalProperty('union').getId()}", unionId: "${@shiro.getPrincipalProperty('union').getId()}",
year: new Date().getFullYear() year: null
}, },
loading: false, loading: false,
finished: false, finished: false,
refreshing: false, refreshing: false,
lineData: {}, lineData: {},
modifyConfig: {},
clickRow: {},
selectLineList: [],
selectLinePopup: false,
} }
}, },
methods: { methods: {
async clickLineRow(o) {
this.clickRow = o
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/getSelectLineById',
{
lineId: o.lineId,
unionId: this.pageForm.unionId,
theRapyRecuperationType: this.pageForm.theRapyRecuperationType,
lineUnionType: this.pageForm.lineUnionType,
}
)
this.selectLineList = resp.data
this.selectLineList.forEach((item, index) => {
item.name = '出行时间' + (index + 1) + ' ' + item.playStartTime
if (this.modifyConfig.familyInfo == 2) {
item.subname = '已报人数:'
+ (item.signUpUserNum + item.signUpUserFamilyNum)
+ '(家属' + item.signUpUserFamilyNum + '人)'
} else {
item.subname = '已报人数:'
+ (item.signUpUserNum + item.signUpUserFamilyNum)
+ '(家属' + item.familyNumber + '人)'
}
})
this.selectLinePopup = true
},
onSelect(item) {
this.findOne(item)
},
otherUnionClick() { otherUnionClick() {
if(this.unionColumns.length === 0) { if (this.unionColumns.length === 0) {
vant.Toast('暂时没有工会公开线路') vant.Toast('暂时没有其他分工会公开线路')
return return
} }
this.pageForm.lineUnionType = 2 this.pageForm.lineUnionType = 2
@@ -349,7 +437,7 @@ layout("/mobile/platform.html"){
toast.clear() toast.clear()
}, 500) }, 500)
if (resp.code === 0) { if (resp.code === 0) {
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.pageForm.theRapyRecuperationType pjaxReplace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.pageForm.theRapyRecuperationType)
} }
}, 1000) }, 1000)
}, },
@@ -362,20 +450,20 @@ layout("/mobile/platform.html"){
const type = Number(this.pageForm.theRapyRecuperationType) const type = Number(this.pageForm.theRapyRecuperationType)
localStorage.setItem("clickIndex", JSON.stringify({clickIndex: type})) localStorage.setItem("clickIndex", JSON.stringify({clickIndex: type}))
if (type !== 2 && type !== 3) { if (type !== 2 && type !== 3) {
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType pjaxReplace('/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType
+ '&takePartInUnionId=' + o.takePartInUnionId + '&takePartInUnionId=' + o.takePartInUnionId)
} else if (type === 3) { } else if (type === 3) {
location.href = '/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType pjaxReplace('/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType)
} }
}, },
getData() { async getData() {
this.loading = true this.loading = true
if (this.pageForm.lineUnionType === 1) { if (this.pageForm.lineUnionType === 1) {
this.pageForm.unionId = "${@shiro.getPrincipalProperty('union').getId()}" this.pageForm.unionId = "${@shiro.getPrincipalProperty('union').getId()}"
} }
this.pageForm.pageNumber = 1 this.pageForm.pageNumber = 1
this.tableData = [] this.tableData = []
this.onLoad() await this.onLoad()
}, },
async onLoad() { async onLoad() {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/pageData', this.pageForm) const res = await $.post('/platform/theRapyRecuperation/line/enroll/pageData', this.pageForm)
@@ -385,6 +473,7 @@ layout("/mobile/platform.html"){
if (this.tableData.length === res.data.totalCount) { if (this.tableData.length === res.data.totalCount) {
this.finished = true this.finished = true
} else { } else {
this.finished = false
this.pageForm.pageNumber++ this.pageForm.pageNumber++
} }
} }
@@ -394,6 +483,7 @@ layout("/mobile/platform.html"){
for (let i = 2023; i <= 2043; i++) { for (let i = 2023; i <= 2043; i++) {
this.yearArray.push({value: i, text: i + '年'}) this.yearArray.push({value: i, text: i + '年'})
} }
this.yearArray.unshift({value: null, text: '全部'})
}, },
async getTheRapyUnions() { async getTheRapyUnions() {
const resp = await $.get('/platform/theRapyRecuperation/line/enroll/getTheRapyUnions', { const resp = await $.get('/platform/theRapyRecuperation/line/enroll/getTheRapyUnions', {
@@ -401,18 +491,31 @@ layout("/mobile/platform.html"){
}) })
return resp.data return resp.data
}, },
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
},
mounted() {
if (localStorage.getItem('clickIndex') !== null) {
const clickIndex = localStorage.getItem('clickIndex')
this.pageForm.theRapyRecuperationType = JSON.parse(clickIndex).clickIndex
}
/*if(this.pageForm.theRapyRecuperationType == 1){
this.$set(this.pageForm, 'lineUnionType', 3)
}*/
}, },
async created() { async created() {
this.createYear() this.createYear()
const clickIndex = localStorage.getItem('clickIndex') await this.getModifyConfig()
this.pageForm.theRapyRecuperationType = JSON.parse(clickIndex).clickIndex
this.chooseButton = await getEnumOptions('TheRapyRecuperationType') this.chooseButton = await getEnumOptions('TheRapyRecuperationType')
this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3) this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3)
const unions = await this.getTheRapyUnions() const unions = await this.getTheRapyUnions()
unions.forEach(item => { unions.forEach(item => {
this.unionColumns.push({text: item.unionname, value: item.id}) this.unionColumns.push({text: item.unionname, value: item.id})
}) })
} }
}) })
</script> </script>
@@ -29,7 +29,6 @@ layout("/mobile/platform.html"){
.list-card > .content { .list-card > .content {
padding: 16px 10px 8px; padding: 16px 10px 8px;
display: flex; display: flex;
max-height: 100px;
} }
.content-right { .content-right {
@@ -72,21 +71,28 @@ layout("/mobile/platform.html"){
.footer { .footer {
background-color: white; background-color: white;
position: fixed;
bottom: 0;
width: 100%; width: 100%;
height: 60px;
display: flex; display: flex;
justify-content: space-evenly; justify-content: space-evenly;
align-items: center; align-items: center;
left: 0;
} }
.footer .van-button { .footer .van-button {
height: 34px; height: 30px;
font-size: 12px;
border-radius: 6px; border-radius: 6px;
} }
.evaluateVisible .van-button {
height: 30px;
font-size: 12px;
border-radius: 6px;
}
.van-divider {
margin: 8px 0;
}
.active { .active {
background-color: #1867b0; background-color: #1867b0;
color: white; color: white;
@@ -172,11 +178,59 @@ layout("/mobile/platform.html"){
margin-left: 4px; margin-left: 4px;
} }
.evaluateVisible {
width: 100%;
height: 80%;
}
.title_container {
display: flex;
justify-content: flex-end;
align-items: center;
position: relative;
padding: 9px;
}
.title {
position: absolute;
left: 0;
right: 0;
margin: auto;
text-align: center;
}
.content {
padding: 10px 20px;
}
.line_info {
display: flex;
align-items: center;
}
.evaluate_item_content {
display: flex;
gap: 20px;
}
.evaluate_item {
padding: 6px 20px;
border: 1px grey solid;
text-align: center;
border-radius: 10px;
}
.evaluate_active {
background-color: #07C160;
color: white;
border-color: #07C160;
}
</style> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
<van-sticky> <van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder <van-nav-bar @click-left="pjaxReplace('/mobile/index')" fixed left-arrow placeholder
title="我的疗休养"></van-nav-bar> title="我的疗休养"></van-nav-bar>
</van-sticky> </van-sticky>
@@ -188,7 +242,7 @@ layout("/mobile/platform.html"){
<!--按钮导航--> <!--按钮导航-->
<div class="choose_button van-doc-card"> <div class="choose_button van-doc-card">
<van-grid :column-num="chooseButton.length" :border="false"> <van-grid :column-num="chooseButton.length" :border="false">
<van-grid-item @click="pageForm.theRapyRecuperationType = item.value; doSearch()" <van-grid-item @click="pageForm.theRapyRecuperationType = item.value;doSearch()"
v-for="item in chooseButton"> v-for="item in chooseButton">
<van-image width="46" height="46" :src="item.imgUrl"></van-image> <van-image width="46" height="46" :src="item.imgUrl"></van-image>
<div :style="pageForm.theRapyRecuperationType == item.value ? 'color: #1867b0; font-weight: bold' : 'color: black; font-weight: normal'" <div :style="pageForm.theRapyRecuperationType == item.value ? 'color: #1867b0; font-weight: bold' : 'color: black; font-weight: normal'"
@@ -196,6 +250,14 @@ layout("/mobile/platform.html"){
</div> </div>
</van-grid-item> </van-grid-item>
</van-grid> </van-grid>
<van-divider></van-divider>
<div class="footer">
<van-button @click="pageForm.signUpStateId = 1; getData()" :class="pageForm.signUpStateId == 1 ? 'active' : 'no_active'">已报名</van-button>
<van-button @click="pageForm.signUpStateId = 2; getData()" :class="pageForm.signUpStateId == 2 ? 'active' : 'no_active'">已参加</van-button>
<van-button @click="pageForm.signUpStateId = 3; getData()" :class="pageForm.signUpStateId == 3 ? 'active' : 'no_active'">未参加</van-button>
</div>
</div> </div>
<van-list <van-list
@@ -209,7 +271,7 @@ layout("/mobile/platform.html"){
<van-image <van-image
height="100" height="100"
radius="8" radius="8"
:src="APP_DOMAIN + '/file_server/fileStreamPreview?id=' + o.fileId" :src="CREATE_PREVIEW_URL(o.fileId)"
width="150" width="150"
></van-image> ></van-image>
@@ -241,7 +303,8 @@ layout("/mobile/platform.html"){
<span>联系方式:</span>{{o.contactMobileNumber}} <span>联系方式:</span>{{o.contactMobileNumber}}
</div> </div>
<div class="mobile" v-if="![2715,2725,2735].includes(o.stateId)"> <div class="mobile" v-if="![2715,2725,2735].includes(o.stateId)">
<span>随行家属:</span>{{o.companionUserNames ? o.companionUserNames : '无'}} <span v-if="configData.familyInfo === 1">随行家属:</span>{{o.companionUserNames ? o.companionUserNames : '无'}}
<span v-else>随行家属:</span>{{o.familyNumber}}人
</div> </div>
<div class="mobile" v-else> <div class="mobile" v-else>
<span>审核状态:</span><span :style="'color: ' + o.stateColor">{{o.stateName}}</span> <span>审核状态:</span><span :style="'color: ' + o.stateColor">{{o.stateName}}</span>
@@ -295,6 +358,9 @@ layout("/mobile/platform.html"){
</div> </div>
<div class="operateDiv"> <div class="operateDiv">
<van-button v-if="pageForm.signUpStateId == 2" @click="openEvaluate(o)" type="info" size="small" color="#1867b0">
&ensp;
</van-button>
<van-button v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix() <van-button v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()
&& ![2715,2725,2735].includes(o.stateId)" @click="edit(o)" && ![2715,2725,2735].includes(o.stateId)" @click="edit(o)"
type="info" size="small" color="#1867b0" :disabled="o.isTakePartIn == true || getDisabled(o)"> type="info" size="small" color="#1867b0" :disabled="o.isTakePartIn == true || getDisabled(o)">
@@ -302,21 +368,15 @@ layout("/mobile/platform.html"){
</van-button> </van-button>
<van-button type="info" size="small" color="#1867b0" @click="cancel(o)" <van-button type="info" size="small" color="#1867b0" @click="cancel(o)"
:disabled="getDisabled(o)"> :disabled="getDisabled(o)">
&ensp; &ensp;
</van-button> </van-button>
<van-button v-if="o.isTakePartIn == true" type="info" size="small" color="#1867b0" <!--<van-button v-if="o.isTakePartIn == true" type="info" size="small" color="#1867b0"
@click="satisfaction(o)">满意度反馈</van-button> @click="satisfaction(o)">满意度反馈</van-button>-->
</div> </div>
</div> </div>
</van-list> </van-list>
<div class="footer">
<van-button @click="pageForm.signUpStateId = 1; getData()" :class="pageForm.signUpStateId == 1 ? 'active' : 'no_active'">已报名</van-button>
<van-button @click="pageForm.signUpStateId = 2; getData()" :class="pageForm.signUpStateId == 2 ? 'active' : 'no_active'">已参加</van-button>
<van-button @click="pageForm.signUpStateId = 3; getData()" :class="pageForm.signUpStateId == 3 ? 'active' : 'no_active'">未参加</van-button>
</div>
<van-popup class="popVisible" position="right" v-model="popVisible"> <van-popup class="popVisible" position="right" v-model="popVisible">
<van-nav-bar @click-left="popVisible = false" fixed left-arrow placeholder title="满意度评分"></van-nav-bar> <van-nav-bar @click-left="popVisible = false" fixed left-arrow placeholder title="满意度评分"></van-nav-bar>
<div class="cus_content"> <div class="cus_content">
@@ -352,14 +412,45 @@ layout("/mobile/platform.html"){
</div> </div>
</van-popup> </van-popup>
<div> <van-action-sheet title="参加体验评价" v-model="evaluatePopup">
<van-tabbar v-model="tarBarActive"> <div class="evaluateForm">
<van-tabbar-item icon="home-o" replace url="/platform/mobile/theRapyRecuperation/index">疗休养报名
</van-tabbar-item> <div style="text-align: center;margin: 20px 0;font-size: 20px;color: #f18d8d;font-weight: bold;">
<van-tabbar-item icon="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的疗休养 您的评价让我们做的更好
</van-tabbar-item> </div>
</van-tabbar>
</div> <div style="display: flex;justify-content: center;flex-direction: column;align-items: center">
<div style="text-align: center;font-size: 13px;color: rgb(139 134 134); margin-bottom: 10px">为本次疗休养打分
</div>
<div class="evaluate_item_content">
<div class="evaluate_item" @click="evaluateClick('满意', 1)">满意</div>
<div class="evaluate_item" @click="evaluateClick('一般', 2)">一般</div>
<div class="evaluate_item" @click="evaluateClick('不满意', 3)">不满意</div>
</div>
</div>
<van-field
autosize
class="evaluateTextField"
label="评价"
label-width="0"
maxlength="100"
placeholder="请输入评价"
rows="5"
type="textarea"
v-model="evaluateFormData.evaluateText"
>
<div slot="label"></div>
</van-field>
</div>
<div style="padding: 10px 16px">
<van-button @click="doSubmitEvaluate"
block
type="primary"
>提交
</van-button>
</div>
</van-action-sheet>
</div> </div>
<script> <script>
@@ -376,23 +467,81 @@ layout("/mobile/platform.html"){
mixins: [mobileMixins], mixins: [mobileMixins],
data() { data() {
return { return {
evaluateFormData: {},
evaluatePopup: false,
yearArray: [], yearArray: [],
popVisible: false, popVisible: false,
chooseButton: [], chooseButton: [],
pageForm: { pageForm: {
theRapyRecuperationType: null, theRapyRecuperationType: null,
signUpStateId: 1, signUpStateId: 1,
year: null, year: new Date().getFullYear(),
}, },
loading: false, loading: false,
finished: false, finished: false,
refreshing: false, refreshing: false,
satisfactionForm: {}, satisfactionForm: {},
configData: {}, configData: {},
tarBarActive: 1
} }
}, },
methods: { methods: {
async openEvaluate(o) {
if(o.isTakePartIn === false) {
this.$modal.msg("参加后才能评价")
return
}
await this.finOneEvaluate(o.takePartInLineId)
this.evaluatePopup = true
this.$nextTick(() => {
let score = 1
if (this.evaluateFormData.evaluateScore === '满意') {
score = 1
} else if (this.evaluateFormData.evaluateScore === '一般') {
score = 2
} else if (this.evaluateFormData.evaluateScore === '不满意') {
score = 3
}
this.evaluateClick(this.evaluateFormData.evaluateScore, score)
})
},
evaluateClick(value, index) {
this.evaluateFormData.evaluateScore = value
const elements = document.querySelectorAll('.evaluate_item')
for (let i = 0; i < elements.length; i++) {
if(index === (i + 1)) {
elements[i].classList.add('evaluate_active')
} else {
elements[i].classList.remove('evaluate_active')
}
}
},
async finOneEvaluate(lineId) {
const {data, code, msg} = await $.post("/platform/theRapyRecuperation/line/enroll/finOneEvaluate", {
lineId: lineId,
})
if (code === 0) {
if (data) {
this.evaluateFormData = data
} else {
this.evaluateFormData = {lineId: lineId}
}
} else {
this.$message.warning(msg)
}
},
async doSubmitEvaluate() {
if (!this.evaluateFormData.evaluateScore) {
this.$modal.msg("请为本次疗休养评分")
return
}
const {code, data, msg} = await $.post('/platform/theRapyRecuperation/line/enroll/doEvaluate', this.evaluateFormData)
if (code === 0) {
this.$modal.msgSuccess("评价成功")
this.evaluatePopup = false
} else {
this.$modal.msgError(msg)
}
},
getDisabled(o) { getDisabled(o) {
if(o.regionalNature === '省内') { if(o.regionalNature === '省内') {
return this.configData.isSnLine && o.stateId === 2750 return this.configData.isSnLine && o.stateId === 2750
@@ -465,11 +614,11 @@ layout("/mobile/platform.html"){
} }
vant.Dialog.confirm({ vant.Dialog.confirm({
title: '温馨提醒', title: '温馨提醒',
message: '您确定要取消此报名吗?', message: '您确定要撤销此报名吗?',
}).then(async () => { }).then(async () => {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + o.id) const res = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + o.id)
if(res.code === 0) { if(res.code === 0) {
vant.Toast('取消成功') vant.Toast('撤销成功')
this.getData() this.getData()
}else { }else {
vant.Toast(res.msg) vant.Toast(res.msg)
@@ -516,8 +665,7 @@ layout("/mobile/platform.html"){
}, },
async created() { async created() {
this.createYear() this.createYear()
this.yearArray.unshift({value: null, text: '全部'}) this.yearArray.unshift({value: null, text: '所有年度'})
this.pageForm.year = new Date().getFullYear()
this.pageForm.theRapyRecuperationType = getQueryString('index') ? getQueryString('index') : await this.getType() this.pageForm.theRapyRecuperationType = getQueryString('index') ? getQueryString('index') : await this.getType()
this.chooseButton = await getEnumOptions('TheRapyRecuperationType') this.chooseButton = await getEnumOptions('TheRapyRecuperationType')
this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3) this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3)
@@ -0,0 +1,372 @@
<!--#
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">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">年度</div>
<div class="search-item-option">
<el-date-picker
style="width: 100%"
@change="doSearch"
:clearable="false"
value-format="yyyy"
v-model="pageForm.year"
type="year"
placeholder="选择年">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路类型</div>
<div class="search-item-option">
<el-select v-model="pageForm.lineType" placeholder="线路类型" clearable style="width: 100%">
<el-option v-for="item in regionalNatureList" :key="item.value" :label="item.label" :value="item.value">{{item.label}}</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch()">搜索</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<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-row style="padding: 30px 0;border-bottom: 10px solid rgb(240, 240, 240)">-->
<!-- <el-col :span="24" style="padding: 0 20px">-->
<!-- <div class="chartTitle">线路出行年龄统计</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-card>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return{
pageForm: {
year: moment().format('YYYY') + "",
lineType: ''
},
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,
chartData: [
{ "lineName": "03-15", "takePartInLineNum": 10, "underThirtyFive": 5, "thirtyFiveToFortyFive": 3, "aboveFortyFive": 2 },
{ "lineName": "04-10", "takePartInLineNum": 15, "underThirtyFive": 7, "thirtyFiveToFortyFive": 6, "aboveFortyFive": 2 }
]
}
},
methods: {
async getNumData(){
const resp = await $.post('/platform/theRapyRecuperation/annualAnalysis/getNumData', this.pageForm)
if (resp.code === 0) {
this.numData = resp.data
}
},
async getLotNumData(){
this.lotLoading = true
const resp = await $.post('/platform/theRapyRecuperation/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 $.post('/platform/theRapyRecuperation/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 $.post('/platform/theRapyRecuperation/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 pageData(){
await this.getNumData()
await this.getLotNumData()
await this.getAgeData()
await this.getLineTravelData()
}
},
async created() {
this.regionalNatureList.push(...await getEnumOptions('TheRapyRecuperationProvinceType'))
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -143,9 +143,9 @@ layout("/layouts/platform.html"){
style="width: 80%" style="width: 80%"
@change="lineChange(pageForm.takePartInLineId);doSearch()"> @change="lineChange(pageForm.takePartInLineId);doSearch()">
<el-option v-for="item in takePartInLines" <el-option v-for="item in takePartInLines"
:key="item.id" :key="item.selectId"
:label="item.lineName" :label="item.lineName"
:value="item.id"> :value="item.selectId">
</el-option> </el-option>
</el-select> </el-select>
</el-col> </el-col>
@@ -259,7 +259,7 @@ layout("/layouts/platform.html"){
</el-link> </el-link>
</template> </template>
<template scope="{row}" v-else-if="column.prop=='isFamily'"> <template scope="{row}" v-else-if="column.prop=='isFamily'">
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)"> <el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.isFamily?'携带':'未携带'}}{{row.isFamily}} {{row.isFamily?'携带':'未携带'}}{{row.isFamily}}
</el-link> </el-link>
<el-link v-else type="primary"> <el-link v-else type="primary">
@@ -471,22 +471,22 @@ layout("/layouts/platform.html"){
<el-table :data="editFormData.companionList"> <el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column> <el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column> <el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard" show-overflow-tooltip></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="age"></el-table-column>
<el-table-column label="床型" prop="bedType"> <el-table-column label="床型" prop="bedType">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedType }} {{ row.bedInfo.bedType }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="床位" prop="bedNum"> <el-table-column label="床位" prop="bedNum">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedNum }} {{ row.bedInfo.bedNum }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser"> <el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.otherSleepUser ? {{ row.bedInfo.otherSleepUser ?
row.bedInfo?.otherSleepUser : '暂无' }} row.bedInfo.otherSleepUser : '暂无' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column> <el-table-column label="关系" prop="relation"></el-table-column>
@@ -667,7 +667,6 @@ layout("/layouts/platform.html"){
}) })
}, },
async openModify(row) { async openModify(row) {
this.getUnionSelectLine(row.takePartInLineId)
this.editFormData = {}; this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id}) const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) { if (resp.code === 0) {
@@ -713,7 +712,7 @@ layout("/layouts/platform.html"){
}, },
async lineChange(val) { async lineChange(val) {
this.pageForm.selectId = ''; this.pageForm.selectId = '';
const data = this.takePartInLines.find(v => v.id === val) const data = this.takePartInLines.find(v => v.selectId === val)
if (!data) { if (!data) {
return return
} }
@@ -951,11 +950,10 @@ layout("/layouts/platform.html"){
this.modifyConfig = res.data this.modifyConfig = res.data
} }
}, },
async getUnionSelectLine(disPlayUnionSelectId = null) { async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', { const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
startYear: this.pageForm.year, year: this.pageForm.year,
signUpMode: 1, signUpMode: 1,
disPlayUnionSelectId: disPlayUnionSelectId
}) })
if (resp.code === 0) { if (resp.code === 0) {
this.unionSelectLines = resp.data this.unionSelectLines = resp.data
@@ -42,7 +42,7 @@ layout("/layouts/platform.html"){
type="year" type="year"
value-format="yyyy" value-format="yyyy"
placeholder="选择年" placeholder="选择年"
style="width: 80%" @change="getLineSignNumber(); doSearch()"> style="width: 80%" @change="doSearch">
</el-date-picker> </el-date-picker>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@@ -253,7 +253,7 @@ layout("/layouts/platform.html"){
</el-link> </el-link>
</template> </template>
<template scope="{row}" v-else-if="column.prop=='isFamily'"> <template scope="{row}" v-else-if="column.prop=='isFamily'">
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)"> <el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.isFamily?'携带':'未携带'}}{{row.isFamily}} {{row.isFamily?'携带':'未携带'}}{{row.isFamily}}
</el-link> </el-link>
<el-link v-else type="primary"> <el-link v-else type="primary">
@@ -361,8 +361,8 @@ layout("/layouts/platform.html"){
<el-row style="margin: 40px 0;text-align: right"> <el-row style="margin: 40px 0;text-align: right">
<el-button @click="$refs.guava.index()">返回 <el-button @click="$refs.guava.index()">返回
</el-button> </el-button>
<!--<el-button @click="doAudit(false,true)" type="warning">调整 <el-button @click="doAudit(false,true)" type="warning">调整
</el-button>--> </el-button>
<el-button @click="doAudit(false,false)" type="danger">拒绝 <el-button @click="doAudit(false,false)" type="danger">拒绝
</el-button> </el-button>
<el-button @click="doAudit(true,false)" type="primary">通过 <el-button @click="doAudit(true,false)" type="primary">通过
@@ -465,22 +465,22 @@ layout("/layouts/platform.html"){
<el-table :data="editFormData.companionList"> <el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column> <el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column> <el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard" show-overflow-tooltip></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="age"></el-table-column>
<el-table-column label="床型" prop="bedType"> <el-table-column label="床型" prop="bedType">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedType }} {{ row.bedInfo.bedType }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="床位" prop="bedNum"> <el-table-column label="床位" prop="bedNum">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedNum }} {{ row.bedInfo.bedNum }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser"> <el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.otherSleepUser ? {{ row.bedInfo.otherSleepUser ?
row.bedInfo?.otherSleepUser : '暂无' }} row.bedInfo.otherSleepUser : '暂无' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column> <el-table-column label="关系" prop="relation"></el-table-column>
@@ -619,6 +619,10 @@ layout("/layouts/platform.html"){
}, },
methods: { methods: {
async playChange() {
await this.getLineSignNumber()
await this.doSearch()
},
async validateLine() { async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo' const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
, {enroll: JSON.stringify(this.editFormData)}) , {enroll: JSON.stringify(this.editFormData)})
@@ -662,7 +666,6 @@ layout("/layouts/platform.html"){
}) })
}, },
async openModify(row) { async openModify(row) {
this.getUnionSelectLine(row.takePartInLineId)
this.editFormData = {}; this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id}) const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) { if (resp.code === 0) {
@@ -719,10 +722,6 @@ layout("/layouts/platform.html"){
await this.getLineSignNumber() await this.getLineSignNumber()
await this.doSearch() await this.doSearch()
}, },
async playChange() {
await this.getLineSignNumber()
await this.doSearch()
},
async getLinePlayTimeByLineId(id) { async getLinePlayTimeByLineId(id) {
const resp = await $.get(loc() + '/getLinePlayTimeByLineId', { const resp = await $.get(loc() + '/getLinePlayTimeByLineId', {
lineId: id, lineId: id,
@@ -946,11 +945,10 @@ layout("/layouts/platform.html"){
this.modifyConfig = res.data this.modifyConfig = res.data
} }
}, },
async getUnionSelectLine(disPlayUnionSelectId = null) { async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', { const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
startYear: this.pageForm.year, year: this.pageForm.year,
//signUpMode: 1, signUpMode: 1,
disPlayUnionSelectId: disPlayUnionSelectId
}) })
if (resp.code === 0) { if (resp.code === 0) {
this.unionSelectLines = resp.data this.unionSelectLines = resp.data
@@ -304,7 +304,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24"> <el-col :md="24" :sm="24" :xs="24">
<el-form-item label="详细信息" prop="content"> <el-form-item label="详细信息" prop="content">
<div id="lineContent"></div> <text-editor v-model="formData.content"></text-editor>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -44,18 +44,9 @@ layout("/layouts/platform.html"){
@change="handleChangeYear" @change="handleChangeYear"
> >
</el-date-picker> </el-date-picker>
<!--<el-date-picker
style="width: 100%"
@change="doSearch"
placeholder="选择年度"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>-->
</div> </div>
</div> </div>
<!--<div class="search-item"> <div class="search-item">
<div class="search-item-label">旅行社:</div> <div class="search-item-label">旅行社:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select @change="doSearch" <el-select @change="doSearch"
@@ -69,7 +60,7 @@ layout("/layouts/platform.html"){
v-for="item in travelAgencyOptions"></el-option> v-for="item in travelAgencyOptions"></el-option>
</el-select> </el-select>
</div> </div>
</div>--> </div>
<div class="search-item"> <div class="search-item">
<div class="search-item-label">线路名称:</div> <div class="search-item-label">线路名称:</div>
<div class="search-item-option"> <div class="search-item-option">
@@ -95,7 +86,7 @@ layout("/layouts/platform.html"){
</div> </div>
</div> </div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"> <div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
<div class="search-item-label">分工会:</div> <div class="search-item-label">分工会:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select @change="doSearch" <el-select @change="doSearch"
@@ -111,6 +102,22 @@ layout("/layouts/platform.html"){
</div> </div>
</div> </div>
<div class="search-item">
<div class="search-item-label">组织形式:</div>
<div class="search-item-option">
<el-select @change="doSearch"
clearable
filterable
style="width: 100%"
v-model="pageForm.signUpMode">
<el-option :key="item.value"
:label="item.label"
:value="item.value"
v-for="item in signUpModeList"></el-option>
</el-select>
</div>
</div>
<div class="search-query"> <div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button> <el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div> </div>
@@ -120,7 +127,7 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never"> <el-card class="mt10" shadow="never">
<table-tool :app="this" label="线路列表"> <table-tool :app="this" label="线路列表">
<template #func> <template #func>
<el-button @click="openImport" size="medium" type="primary">导入线路</el-button> <!-- <el-button @click="openImport" size="medium" type="primary">导入线路</el-button>-->
<el-button @click="openAdd" size="medium" type="primary">新建线路</el-button> <el-button @click="openAdd" size="medium" type="primary">新建线路</el-button>
</template> </template>
</table-tool> </table-tool>
@@ -155,15 +162,12 @@ layout("/layouts/platform.html"){
<template scope="{row:{createMode}}" v-else-if="column.prop==='createMode'"> <template scope="{row:{createMode}}" v-else-if="column.prop==='createMode'">
{{createModeName(createMode)}} {{createModeName(createMode)}}
</template> </template>
<template scope="{row}" v-else-if="column.prop==='createUserName'">
{{row.createUserName + '' + row.createUnionName + ''}}
</template>
<template scope="{row}" v-else-if="column.prop==='playTime'"> <template scope="{row}" v-else-if="column.prop==='playTime'">
<el-button @click="viewUnionSelectTimeInfo(row.id)" <el-button @click="viewUnionSelectTimeInfo(row.id)"
type="text"> type="text">
查看详情 查看详情
</el-button> </el-button>
<!-- v-if="row.createMode===2 && row.signUpMode===1"--> <!-- v-if="row.createMode===2 && row.signUpMode===1"-->
<!--<span v-else> <!--<span v-else>
{{row.playStartTime + '至' + row.playEndTime}} {{row.playStartTime + '至' + row.playEndTime}}
</span>--> </span>-->
@@ -187,7 +191,7 @@ layout("/layouts/platform.html"){
<el-form-item label=""> <el-form-item label="">
<span class="text-primary"> <span class="text-primary">
<i class="el-icon-warning"></i> <i class="el-icon-warning"></i>
温馨提醒:工会组织的线路,可以自行设置出行时间。 温馨提醒:工会可以为基层工会或个人创建线路,基层工会或个人自行选择并设置活动相关时间。
</span> </span>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -199,37 +203,29 @@ layout("/layouts/platform.html"){
<el-date-picker style="width: 100%" <el-date-picker style="width: 100%"
@change="yearChange" @change="yearChange"
type="year" type="year"
placeholder="请选择年度"
v-model="formData.year" v-model="formData.year"
value-format="yyyy"></el-date-picker> value-format="yyyy"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="排序号" prop="serialNumber"> <el-form-item label="排序号" prop="serialNumber">
<el-input type="number" maxlength="50" v-model="formData.serialNumber"></el-input> <el-input maxlength="50" v-model="formData.serialNumber"
placeholder="请输入排序号"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="线路名称" prop="lineName"> <el-form-item label="线路名称" prop="lineName">
<el-input maxlength="50" v-model="formData.lineName"></el-input> <el-input maxlength="50" v-model="formData.lineName"
placeholder="请输入线路名称"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="时间标段" prop="lotId">
<el-select clearable filterable style="width: 100%"
v-model="formData.lotId">
<el-option :key="item.id"
:label="item.lotName"
:value="item.id"
v-for="item in lotList"
></el-option>
</el-select>
</el-form-item>
</el-col>
<!--<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="旅行社名称" prop="travelAgencyId"> <el-form-item label="旅行社名称" prop="travelAgencyId">
<el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyId"> <el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyId"
placeholder="请选择旅行社" @change="$set(formData,'travelAgencyPlace','')">
<el-option :key="item.id" <el-option :key="item.id"
:label="item.travelAgencyName+'('+ item.year +'年)'" :label="item.travelAgencyName+'('+ item.year +'年)'"
:value="item.id" :value="item.id"
@@ -237,24 +233,37 @@ layout("/layouts/platform.html"){
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>--> </el-col>
</el-row> <el-col :md="12" :sm="24" :xs="24">
<!--<el-row :gutter="20"> <el-form-item label="旅行社地点" prop="travelAgencyPlace">
<el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyPlace"
placeholder="请选择旅行社地点">
<el-option :key="index"
:label="item"
:value="item"
v-for="(item,index) in (travelAgencyList.find(v => v.id === formData.travelAgencyId) ?? {}).travelAgencyPlaces"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="旅行社联系人"> <el-form-item label="旅行社联系人">
<el-input <el-input
placeholder="请输入旅行社联系人"
:value="(travelAgencyList.find(v => v.id === formData.travelAgencyId) ?? {}).contact" :value="(travelAgencyList.find(v => v.id === formData.travelAgencyId) ?? {}).contact"
readonly></el-input> readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="联系方式"> <el-form-item label="旅行社联系方式">
<el-input <el-input
placeholder="请输入旅行社联系方式"
:value="(travelAgencyList.find(v => v.id === formData.travelAgencyId) ?? {}).contactMobileNumber" :value="(travelAgencyList.find(v => v.id === formData.travelAgencyId) ?? {}).contactMobileNumber"
readonly></el-input> readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>--> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
@@ -269,11 +278,25 @@ layout("/layouts/platform.html"){
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col span="12" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
<el-form-item label="开放选择" prop="openChoose">
<el-radio-group class="mr0-radio" size="small" v-model="formData.openChoose">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-col> </el-col>
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="交通工具" prop="trafficTools"> <el-form-item label="组织形式" prop="signUpMode">
<el-input clearable maxlength="50" v-model="formData.trafficTools"></el-input> <el-radio-group class="mr0-radio" size="small" v-model="formData.signUpMode">
<el-radio :label="item.value" v-if="isShow(item.roles)"
size="small"
border v-for="item in signUpModeList">
{{item.label}}
</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -281,7 +304,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-row :gutter="20"> <el-row :gutter="20">
<!--<el-col :span="12"> <el-col :span="12">
<el-form-item label="最少参与教工" prop="minimumGroupSize"> <el-form-item label="最少参与教工" prop="minimumGroupSize">
<el-input-number :max="1000" <el-input-number :max="1000"
:min="config.groupNumber" :min="config.groupNumber"
@@ -289,9 +312,9 @@ layout("/layouts/platform.html"){
style="width: 100%" style="width: 100%"
v-model="formData.minimumGroupSize"></el-input-number> v-model="formData.minimumGroupSize"></el-input-number>
</el-form-item> </el-form-item>
</el-col>--> </el-col>
<el-col :span="24"> <el-col :span="12">
<el-form-item label="最少成团人数包括家属" prop="estimatedFamilyNumbers"> <el-form-item label="成团人数包括家属" prop="estimatedFamilyNumbers">
<el-input-number :max="1000" <el-input-number :max="1000"
:min="1" :min="1"
:precision="0" :precision="0"
@@ -303,32 +326,32 @@ layout("/layouts/platform.html"){
</el-col> </el-col>
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-form-item label="预计费用(元/人次)" prop="estimatedCost"> <el-form-item label="预计费用(元/人次)" prop="estimatedCost">
<el-input clearable maxlength="50" v-model="formData.estimatedCost"></el-input> <el-input clearable maxlength="50" v-model="formData.estimatedCost"
placeholder="请输入预计费用"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24"> <el-col :span="12">
<el-form-item label="组织形式" prop="signUpMode"> <el-form-item label="时间标段" prop="lotId">
<el-radio-group class="mr0-radio" size="small" v-model="formData.signUpMode"> <el-select clearable filterable style="width: 100%"
<el-radio :label="item.value" v-if="isShow(item.roles)" placeholder="请选择时间标段"
size="small" v-model="formData.lotId">
border v-for="item in signUpModeList"> <el-option :key="item.id"
{{item.label}} :label="item.lotName"
</el-radio> :value="item.id"
</el-radio-group> v-for="item in lotList"
<div class="text-primary"> ></el-option>
<i class="el-icon-warning"></i> </el-select>
温馨提醒:校工会可以为基层工会创建线路,分工会自行选择并设置活动相关时间。
</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24" :xs="24"> <el-col :md="12" :sm="24" :xs="24">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="联系人" prop="lineContact"> <el-form-item label="联系人" prop="lineContact">
<el-input clearable max="50" v-model="formData.lineContact"></el-input> <el-input clearable max="50" v-model="formData.lineContact"
placeholder="请输入联系人"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@@ -336,88 +359,89 @@ layout("/layouts/platform.html"){
{ required: false, message: '手机号码不能为空', trigger: 'blur' }, { required: false, message: '手机号码不能为空', trigger: 'blur' },
{ pattern: /^1[34578]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' } { pattern: /^1[34578]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
]" label="联系方式" prop="lineContactPhone"> ]" label="联系方式" prop="lineContactPhone">
<el-input clearable v-model="formData.lineContactPhone"></el-input> <el-input clearable v-model="formData.lineContactPhone"
placeholder="请输入联系方式"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-col> </el-col>
</el-row> </el-row>
<!-- <template v-if="formData.signUpMode===2 || formData.createMode===1">--> <!-- <template v-if="formData.signUpMode===2 || formData.createMode===1">-->
<!-- <el-row :gutter="20">--> <!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">--> <!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="报名开始时间" prop="signUpStartTime">--> <!-- <el-form-item label="报名开始时间" prop="signUpStartTime">-->
<!-- <el-date-picker style="width: 100%"--> <!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"--> <!-- type="datetime"-->
<!-- v-model="formData.signUpStartTime"--> <!-- v-model="formData.signUpStartTime"-->
<!-- format="yyyy-MM-dd HH:mm"--> <!-- format="yyyy-MM-dd HH:mm"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">--> <!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>--> <!-- </el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">--> <!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="报名截至时间" prop="signUpEndTime">--> <!-- <el-form-item label="报名截至时间" prop="signUpEndTime">-->
<!-- <el-date-picker style="width: 100%"--> <!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"--> <!-- type="datetime"-->
<!-- v-model="formData.signUpEndTime"--> <!-- v-model="formData.signUpEndTime"-->
<!-- format="yyyy-MM-dd HH:mm"--> <!-- format="yyyy-MM-dd HH:mm"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">--> <!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>--> <!-- </el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<!-- </el-row>--> <!-- </el-row>-->
<!-- <el-row :gutter="20">--> <!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">--> <!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="变更截至时间" prop="changeEndTime">--> <!-- <el-form-item label="变更截至时间" prop="changeEndTime">-->
<!-- <el-date-picker style="width: 100%"--> <!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"--> <!-- type="datetime"-->
<!-- v-model="formData.changeEndTime"--> <!-- v-model="formData.changeEndTime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">--> <!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>--> <!-- </el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">--> <!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item>--> <!-- <el-form-item>-->
<!-- <template #label>--> <!-- <template #label>-->
<!-- <span class="text-primary">--> <!-- <span class="text-primary">-->
<!-- <i class="el-icon-warning"></i>--> <!-- <i class="el-icon-warning"></i>-->
<!-- 温馨提醒:--> <!-- 温馨提醒:-->
<!-- </span>--> <!-- </span>-->
<!-- </template>--> <!-- </template>-->
<!-- <span class="text-primary">--> <!-- <span class="text-primary">-->
<!-- 变更时间应该大于报名截至时间,小于出行时间。--> <!-- 变更时间应该大于报名截至时间,小于出行时间。-->
<!-- </span>--> <!-- </span>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<!-- </el-row>--> <!-- </el-row>-->
<!-- <el-row :gutter="20">--> <!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">--> <!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="出行开始时间" prop="playStartTime">--> <!-- <el-form-item label="出行开始时间" prop="playStartTime">-->
<!-- <el-date-picker--> <!-- <el-date-picker-->
<!-- placeholder="出行开始时间"--> <!-- placeholder="出行开始时间"-->
<!-- style="width: 100%"--> <!-- style="width: 100%"-->
<!-- type="date"--> <!-- type="date"-->
<!-- v-model="formData.playStartTime"--> <!-- v-model="formData.playStartTime"-->
<!-- value-format="yyyy-MM-dd">--> <!-- value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>--> <!-- </el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">--> <!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="出行结束时间" prop="playEndTime">--> <!-- <el-form-item label="出行结束时间" prop="playEndTime">-->
<!-- <el-date-picker--> <!-- <el-date-picker-->
<!-- placeholder="出行结束时间"--> <!-- placeholder="出行结束时间"-->
<!-- style="width: 100%"--> <!-- style="width: 100%"-->
<!-- type="date"--> <!-- type="date"-->
<!-- v-model="formData.playEndTime"--> <!-- v-model="formData.playEndTime"-->
<!-- value-format="yyyy-MM-dd">--> <!-- value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>--> <!-- </el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<!-- </el-row>--> <!-- </el-row>-->
<!-- </template>--> <!-- </template>-->
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24"> <el-col :md="24" :sm="24" :xs="24">
@@ -443,8 +467,11 @@ layout("/layouts/platform.html"){
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24"> <el-col :md="24" :sm="24" :xs="24">
<el-form-item label="移动端缩略图" prop="files"> <el-form-item label="移动端缩略图" prop="files">
<image-Upload :height="100" :width="100" :limit="1" :file-type="['png', 'jpg']" :file-size="1" <file-upload :files.sync="formData.files"
v-model="formData.files"></image-Upload> picture_card
:max="1"
:type="['jpg', 'jpeg', 'png']"
></file-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -589,7 +616,8 @@ layout("/layouts/platform.html"){
{label: '年度', prop: 'year', sortable: true}, {label: '年度', prop: 'year', sortable: true},
{label: '线路名称', prop: 'lineName', sortable: true, width: '200'}, {label: '线路名称', prop: 'lineName', sortable: true, width: '200'},
{label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'}, {label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'},
/*{label: '承担旅行社', prop: 'travelAgencyName', sortable: true},*/ {label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
{label: '地点', prop: 'travelAgencyPlace', sortable: true},
// {label: '出行时间', prop: 'playTime', sortable: true}, // {label: '出行时间', prop: 'playTime', sortable: true},
{label: '线路类型', prop: 'regionalNature', sortable: true}, {label: '线路类型', prop: 'regionalNature', sortable: true},
{label: '组织形式', prop: 'signUpMode', sortable: true}, {label: '组织形式', prop: 'signUpMode', sortable: true},
@@ -628,7 +656,9 @@ layout("/layouts/platform.html"){
message: '请输入成团人数包括家属', message: '请输入成团人数包括家属',
trigger: ['change', 'blur'] trigger: ['change', 'blur']
}], }],
lotId: [{required: true, message: '请选择标段时间', trigger: ['change', 'blur']}] lotId: [{required: true, message: '请选择标段时间', trigger: ['change', 'blur']}],
openChoose: [{required: true, message: '请选择开放选择', trigger: ['change', 'blur']}],
travelAgencyPlace: [{required: true, message: '请选择开放选择', trigger: ['change', 'blur']}],
}, },
viewData: {}, viewData: {},
@@ -641,6 +671,7 @@ layout("/layouts/platform.html"){
serialNumber: null, serialNumber: null,
lineName: null, lineName: null,
travelAgencyId: null, travelAgencyId: null,
travelAgencyPlace: null,
regionalNature: null, regionalNature: null,
minimumGroupSize: 1, minimumGroupSize: 1,
year: null, year: null,
@@ -657,10 +688,11 @@ layout("/layouts/platform.html"){
playEndTime: null, playEndTime: null,
trafficTools: null, trafficTools: null,
estimatedCost: null, estimatedCost: null,
estimatedFamilyNumbers: null, estimatedFamilyNumbers: 1,
lotId: null, lotId: null,
lineContact: null, lineContact: null,
lineContactPhone: null lineContactPhone: null,
openChoose: false,
}, },
pageForm: { pageForm: {
keywords: null, keywords: null,
@@ -681,16 +713,18 @@ layout("/layouts/platform.html"){
importLoading: false, importLoading: false,
importData: {}, importData: {},
modifyConfig:{} modifyConfig: {}
} }
}, },
methods: { methods: {
isShow(roles) { isShow(roles) {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') { if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}" === 'true') {
return true return true
} }
if ("${@shiro.hasRole('H04')}" === 'true') { if ("${@shiro.hasRole('H04')}" === 'true') {
return roles.some(r => r === 'H04') return roles.some(r => r === 'H04')
} else {
return roles.some(r => r === 'H01')
} }
}, },
async getCreateMode() { async getCreateMode() {
@@ -717,7 +751,6 @@ layout("/layouts/platform.html"){
this.formData.minimumGroupSize = this.config.groupNumber this.formData.minimumGroupSize = this.config.groupNumber
} }
await this.getNumber() await this.getNumber()
this.formData.estimatedFamilyNumbers = this.modifyConfig.outsideQuota
}, },
async openEdit(id) { async openEdit(id) {
const resp = await $.post(loc() + '/selectLineInfoById/' + id) const resp = await $.post(loc() + '/selectLineInfoById/' + id)
@@ -726,7 +759,6 @@ layout("/layouts/platform.html"){
await this.$nextTick() await this.$nextTick()
const data = resp.data const data = resp.data
data.year = data.year.toString() data.year = data.year.toString()
data.files = JSON.parse(data.files)
this.formData = {...data} this.formData = {...data}
this.initLineContentEditor(data.content) this.initLineContentEditor(data.content)
} else { } else {
@@ -743,30 +775,15 @@ layout("/layouts/platform.html"){
spinner: 'el-icon-loading', spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
}); });
delete this.formData.travelAgency
this.formData.files = JSON.stringify(this.formData.files) const resp = await $.post(loc() + '/doSubmit', {line: JSON.stringify(this.formData)})
const resp = await $.post(loc() + '/doSubmit', this.formData)
loading.close() loading.close()
if (resp.code === 0) { if (resp.code === 0) {
this.$message.success(resp.msg)
this.$confirm('需要将该线路设置为出行线路吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
sublime.jumpPagePjax('/platform/theRapyRecuperation/lineXghSelect?mode=2')
} else {
sublime.jumpPagePjax('/platform/theRapyRecuperation/lineFghSelect?mode=1')
}
})/*.catch(() => {
this.$refs.guava.index()
this.pageData()
})*/
this.$refs.guava.index() this.$refs.guava.index()
this.notifySuccess(resp.msg)
this.pageData() this.pageData()
} else { } else {
this.$message.warning(resp.msg) this.notifyWarning(resp.msg)
} }
}, },
async lineStatusChange(id) { async lineStatusChange(id) {
@@ -827,9 +844,6 @@ layout("/layouts/platform.html"){
}, },
async initPageData() { async initPageData() {
this.regionalNatureList = await getEnumOptions('TheRapyRecuperationProvinceType') this.regionalNatureList = await getEnumOptions('TheRapyRecuperationProvinceType')
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" !== 'true') {
this.regionalNatureList = this.regionalNatureList.filter(o => o.name === 'provinceIn')
}
this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode') this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode')
this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode') this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode')
this.unionOptions = await getUnions(null) this.unionOptions = await getUnions(null)
@@ -880,18 +894,18 @@ layout("/layouts/platform.html"){
data.append("file", val.raw, val.raw.name); data.append("file", val.raw, val.raw.name);
}); });
this.importLoading = true this.importLoading = true
const resp = await $.post(loc() + "/travelLineImport",data) const resp = await $.post(loc() + "/travelLineImport", data)
if (resp.code === 0){ if (resp.code === 0) {
this.pageData(); this.pageData();
this.importVisible = false this.importVisible = false
}else { } else {
this.notifyWarning("导入失败") this.notifyWarning("导入失败")
this.importLoading = false this.importLoading = false
} }
}, },
handleChangeYear(){ handleChangeYear() {
if (this.pageForm.startYear && this.pageForm.endYear){ if (this.pageForm.startYear && this.pageForm.endYear) {
if (this.pageForm.startYear > this.pageForm.endYear){ if (this.pageForm.startYear > this.pageForm.endYear) {
this.pageForm.endYear = ''; this.pageForm.endYear = '';
this.$message.error('起始年份需小于结束年份!'); this.$message.error('起始年份需小于结束年份!');
} }
@@ -910,7 +924,7 @@ layout("/layouts/platform.html"){
}, },
async created() { async created() {
await this.getModifyConfig() await this.getModifyConfig()
this.pageForm.startYear = this.modifyConfig.provinceStartYear+'' this.pageForm.startYear = this.modifyConfig.provinceStartYear + ''
await this.initPageData() await this.initPageData()
this.pageData() this.pageData()
} }
@@ -48,7 +48,7 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never"> <el-card class="mt10" shadow="never">
<table-tool :app="this" label="旅行社列表"> <table-tool :app="this" label="旅行社列表">
<template #func> <template #func>
<el-button @click="openImport" size="medium" type="primary">导入旅行社</el-button> <!-- <el-button @click="openImport" size="medium" type="primary">导入旅行社</el-button>-->
<el-button @click="openAdd" size="medium" type="primary">新建旅行社</el-button> <el-button @click="openAdd" size="medium" type="primary">新建旅行社</el-button>
</template> </template>
</table-tool> </table-tool>
@@ -117,11 +117,21 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="12" :xs="12"> <el-col :md="12" :sm="12" :xs="12">
<el-form-item label="是否自由组团" prop="signUpTravelAgency"> <el-form-item label="旅行社地点" prop="travelAgencyPlaces">
<el-radio-group v-model="formData.signUpTravelAgency"> <el-select
<el-radio-button :label="true"></el-radio-button> v-model="formData.travelAgencyPlaces"
<el-radio-button :label="false"></el-radio-button> multiple
</el-radio-group> filterable
allow-create
default-first-option
placeholder="请创建旅行社地点" style="width: 100%">
<el-option
v-for="(item,index) in travelAgencyPlaceList"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -178,8 +188,11 @@ layout("/layouts/platform.html"){
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24"> <el-col :md="24" :sm="24" :xs="24">
<el-form-item label="移动端缩略图" prop="files"> <el-form-item label="移动端缩略图" prop="files">
<image-Upload :height="100" :width="100" :limit="1" :file-type="['png', 'jpg']" :file-size="1" <file-upload :files.sync="formData.files"
v-model="formData.files"></image-Upload> picture_card
:max="1"
:type="['jpg', 'jpeg', 'png']"
></file-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -300,7 +313,7 @@ layout("/layouts/platform.html"){
{type: 'url', message: '请输入正确的官网地址', trigger: ['blur', 'change']}], {type: 'url', message: '请输入正确的官网地址', trigger: ['blur', 'change']}],
note: [{required: false, message: '请输入备注', trigger: ['change', 'blur']}], note: [{required: false, message: '请输入备注', trigger: ['change', 'blur']}],
year: [{required: true, message: '请选择年度', trigger: ['change', 'blur']}], year: [{required: true, message: '请选择年度', trigger: ['change', 'blur']}],
signUpTravelAgency: [{required: true, message: '请选择是否自由组团', trigger: ['change', 'blur']}], travelAgencyPlaces: [{required: true, message: '请选择旅行社地点', trigger: ['change', 'blur']}],
//files: [{required: true, message: '请上传移动端缩略图', trigger: ['change', 'blur']}], //files: [{required: true, message: '请上传移动端缩略图', trigger: ['change', 'blur']}],
}, },
viewData: {}, viewData: {},
@@ -314,8 +327,7 @@ layout("/layouts/platform.html"){
officialWebsite: null, officialWebsite: null,
note: null, note: null,
year: null, year: null,
isDisabled: false, isDisabled: false
signUpTravelAgency: false
}, },
pageForm: { pageForm: {
keywords: null, keywords: null,
@@ -325,6 +337,10 @@ layout("/layouts/platform.html"){
importVisible: false, importVisible: false,
importLoading: false, importLoading: false,
importData: {}, importData: {},
travelAgencyPlaceList: ["温州", "金华", "四川", "江苏", "宁波", "舟山", "青海(海西州)"
, "安徽", "丽水", "台州", "吉林", "江西", "绍兴", "衢州", "新疆", "福建", "上海", "杭州", "嘉兴",
"湖州", "重庆(涪陵区)", "重庆(万州区)", "湖北(恩施州)", "湖北(黄冈市)"]
} }
}, },
computed: { computed: {
@@ -349,22 +365,20 @@ layout("/layouts/platform.html"){
officialWebsite: null, officialWebsite: null,
note: null, note: null,
year: null, year: null,
isDisabled: false, isDisabled: false
signUpTravelAgency: false,
} }
}) })
}, },
async openEdit(row) { async openEdit(row) {
const cloneData = clone(row) const cloneData = clone(row)
cloneData.year = cloneData.year.toString() cloneData.year = cloneData.year.toString()
cloneData.files = JSON.parse(cloneData.files) cloneData.travelAgencyPlaces = JSON.parse(cloneData.travelAgencyPlaces)
this.formData = {...cloneData} this.formData = {...cloneData}
this.editDialogVisible = true this.editDialogVisible = true
}, },
async doSubmit() { async doSubmit() {
const valid = await this.$refs['form'].validate() const valid = await this.$refs['form'].validate()
if (!valid) return if (!valid) return
this.formData.files=JSON.stringify(this.formData.files)
const resp = await $.post(loc() + '/doSubmit', {travelAgency: JSON.stringify(this.formData)}) const resp = await $.post(loc() + '/doSubmit', {travelAgency: JSON.stringify(this.formData)})
if (resp.code === 0) { if (resp.code === 0) {
this.editDialogVisible = false this.editDialogVisible = false
@@ -423,28 +437,15 @@ layout("/layouts/platform.html"){
}); });
this.importLoading = true this.importLoading = true
$.ajax({ const resp = await $.post(loc() + '/travelAgencyImport', data)
url: loc() + '/travelAgencyImport', if (resp.code === 0) {
type: "post", this.pageData();
data: data, this.importVisible = false
processData: false, this.importLoading = false
contentType: false, } else {
success: (resp) => { this.notifyWarning("导入失败")
if (resp.code===0){ this.importLoading = false
this.pageData(); }
this.importVisible = false
this.importLoading = false
}else {
this.notifyWarning("导入失败")
this.importLoading = false
}
},
error: (resp) => {
this.notifyWarning("导入失败")
this.importLoading = false
}
})
}, },
}, },
async created() { async created() {
@@ -0,0 +1,198 @@
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 scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{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
this.getUnionSelectLine()
await this.getModifyConfig()
const {code, msg, data} = await $.get("/platform/theRapyRecuperation/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 $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (code === 0) {
this.config = data
} else {
this.$message.error(msg)
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
year: this.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.unionSelectLines = resp.data
}
},
async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/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/theRapyRecuperation/user/query/doEdit', this.formData)
if (code === 0) {
this.$message.success(msg)
this.visible = false
this.$emit('refresh')
} else {
this.$message.error(msg)
}
}).catch()
}
})
}
}
};
@@ -0,0 +1,454 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.filter-container {
margin-bottom: 20px;
border-radius: 4px;
}
.filter-container .el-form {
padding: 10px 15px;
}
/* Flex布局样式 */
.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>
<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" class="mt10">
<table-tool label="人员列表" :app="this" ref="table_tool">
<template #func>
<!-- <el-button icon="el-icon-s-promotion" @click="openImport" size="small" type="primary">参加人员导入-->
<!-- </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>
</template>
</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"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='lineName'">
<el-link type="primary" @click="openLine(row)">{{row.lineName}}
</el-link>
</template>
<template scope="{row}" v-else-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 scope="{row}" v-else-if="column.prop=='lineNum'">
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.lineNum}}{{row.signUpUserFamilyNum}}
</el-link>
<el-link v-else type="primary">
{{row.lineNum}}{{row.familyNumber}}
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='signUpMode'">
{{signUpModeName(row.signUpMode)}}
</template>
<template scope="{row}" v-else-if="column.prop=='agencyNum'">
<el-link type="primary" @click="openApplyUser(row)">{{row.agencyNum}}
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='times'">
<div v-if="row.playStartTime">{{row.playStartTime}}</div>
<div v-else>{{row.playStartTime1}}</div>
</template>
<template scope="{row}" v-else-if="column.prop=='isTakePartIn'">
{{row.isTakePartIn?'已参加':'未参加'}}
</template>
<template scope="{row}" v-else-if="column.prop=='stateId'">
<span v-if="row.stateId">
<vi-table-state :state="row"></vi-table-state>
</span>-->
<sapn v-else style="color: #67C23A">暂无</sapn>
</template>
<template scope="{row}" v-else-if="column.prop=='lineOrMaName'">
{{row.lineName?row.lineName:row.baseName?row.baseName:row.travelAgencyName}}
</template>
<template scope="{row:{officialWebsite}}"
v-else-if="column.prop==='officialWebsite'">
<a :href="officialWebsite" class="text-primary" target="_blank">
{{officialWebsite}}
</a>
</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 scope="{row}">
{{row.lotName}}
</template>
</el-table-column>
<el-table-column label="操作" width="250px">
<template scope="{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>
</guava>
<el-dialog title="查看报名信息" :visible.sync="viewVisible" top="50px">
<enroll-info ref="viewEnrollInfoRef" :union_id="unionId"></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'){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=' + new Date().getTime()),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue'),
'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,
unionId: null,
unionOptions: [],
config: {}
}
},
methods: {
handleQuery() {
console.log('查询参数:', this.pageForm);
// 查询逻辑
},
resetQuery() {
this.pageForm = {
year: new Date().getFullYear().toString(),
loginName: '',
userName: '',
takePartInLineId: '',
unionId: '',
signUpMode: 1,
lotId: '',
regionalNature: '',
pageNumber: 1,
pageSize: 10,
totalCount: 0,
}
this.doSearch()
},
signUpModeName(val) {
return null
},
openApplyUser(row) {
},
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 $.post('/platform/theRapyRecuperation/branchUnionUserQuery/deleteMyEnrollInfoById', {
id: row.id
})
if (code === 0) {
this.doSearch()
this.$message.success(msg)
} else {
this.$message.warning(resp.msg)
}
})
},
openImport() {
},
doExport() {
const {year, userName, loginName, signUpMode, regionalNature, takePartInLineId, lotId} = this.pageForm
debugger
window.open('/platform/theRapyRecuperation/branchUnionUserQuery/exportXlsx?year=' +
year
+ '&userName=' + userName
+ '&loginName=' + loginName
+ '&signUpMode=' + signUpMode
+ '&regionalNature=' + 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() {
$.post('/platform/theRapyRecuperation/TheRapyConfig/findOne').then((res) => {
if (res.code === 0) {
this.config = res.data
}
})
},
signUpModeChange(val) {
this.pageForm.takePartInLineId = ''
this.getLines()
this.doSearch()
},
getLines() {
$.post('/platform/theRapyRecuperation/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.error(res.msg)
}
})
}
},
async created() {
this.getLines()
this.doSearch()
this.getConfig()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,147 @@
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/theRapyRecuperation/TheRapyConfig/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/theRapyRecuperation/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)
}
})
}
}
};
@@ -0,0 +1,393 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.query-row {
height: 70px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.query-row .el-col {
overflow: hidden;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.query-row-title {
width: 120px;
}
.el-table-container {
padding-top: 0;
}
.descriptions-form .el-form-item {
margin-bottom: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="8">
<span>&emsp;&emsp;度:</span>
<el-date-picker
:clearable="false"
v-model="pageForm.startYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
</el-date-picker>
<span></span>
<el-date-picker
:clearable="false"
v-model="pageForm.endYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="doSearch">
</el-date-picker>
</el-col>
<el-col :span="8">
<span>路线类型:</span>
<el-select v-model="pageForm.regionalNature" filterable
placeholder="请选择线路"
style="width: 80%"
@change="lineTypeChange">
<el-option label="全部" value=""></el-option>
<el-option label="省内" value="省内"></el-option>
<el-option label="省外" value="省外"></el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>所属工会:</span>
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会"
@change="doSearch()"
filterable clearable style="width: 80%">
<el-option
v-for="item in unions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="8">
<span>线&emsp;&emsp;路:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="lineChange">
<el-option v-for="item in lineList"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.signUpMode + ''"
:value="item.lineId">
</el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>&emsp;&emsp;段:</span>
<el-select v-model="pageForm.lotId" filterable clearable
placeholder="请选择标段"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in modifyConfig.lots"
:key="item.id"
:label="item.lotName"
:value="item.id">
</el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="playChange">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="8">
<span>组织形式:</span>
<el-select v-model="pageForm.signUpMode" filterable clearable
placeholder="请选择组织形式"
style="width: 80%" @change="doSearch">
<el-option label="个人组织" value="3"></el-option>
<el-option label="分工会组织" value="1"></el-option>
<el-option label="校工会组织" value="2"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :app="this" label="审核列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch" size="mini" class="mr5">
<el-radio-button :label="0">全部</el-radio-button>
<el-radio-button :label="1">已审核</el-radio-button>
<el-radio-button :label="2">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData">
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='signUpMode'">
<span v-if="row.signUpMode == '1'">分工会组织</span>
<span v-if="row.signUpMode == '2'">校工会组织</span>
<span v-if="row.signUpMode == '3'">个人组织</span>
</template>
<template scope="{row}" v-else-if="column.prop=='lineNum'">
<template v-if="!row.familyNumber" type="primary" >
{{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}}
</template>
<template v-else type="primary">
{{row.lineNum + row.familyNumber}}{{row.familyNumber}}
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template scope="{row}">
<el-button type="primary" size="mini" @click="openView(row)">查看</el-button>
<el-button type="primary" size="mini" @click="openAudit(row)"
:disabled="row.auditState!==7712">审核
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<template #view>
<line-audit-info ref="lineAuditViewInfo"></line-audit-info>
</template>
<template #edit>
<line-audit-info ref="lineAuditInfo" label="校工会审核" handle>
<template #handle>
<el-form :model="formData" ref="form" label-width="120px">
<el-descriptions border class="descriptions-form" :column="2">
<el-descriptions-item label="审核人">
<el-form-item label-width="0">
<el-input value="${@shiro.getPrincipalProperty('username')}" readonly></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="审核时间">
<el-form-item label-width="0">
<el-input :value="moment().format('YYYY-MM-DD')" readonly></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">
<el-form-item label-width="0" prop="auditOpinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.auditOpinion" maxlength="500"
type="textarea"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<el-row type="flex" justify="end" align="center" style="padding: 20px">
<el-button @click="doBack" type="info">退回</el-button>
<el-button @click="doPass" type="primary">通过</el-button>
</el-row>
</el-form>
</template>
</line-audit-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
startYear: moment().format('YYYY'),
endYear: moment().format('YYYY'),
regionalNature: '',
signUpMode: '',
lotId: '',
takePartInLineId: '',
selectId: '',
isAudit: 2
},
unions: [],
lineList: [],
linePlayTimes: [],
tableColumns: [
{prop: 'year', label: '年度', width: 60},
{prop: 'lineName', label: '线路名称', sortable: true, width: 200},
{prop: 'linePlayTime', label: '出行时间', width: 180},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
{prop: 'signUpMode', label: '组织形式', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'username', label: '发起人', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
{prop: 'lineNum', label: '报名人数(家属)'},
{prop: 'stateName', label: '审核状态'},
],
userPageForm: {
pageNumber: 1,
pageSize: 10
},
modifyConfig: {}
}
},
components: {
'line-audit-info': httpVueLoader('/components/theRapyRecuperation/LineAuditInfo.vue?v=' + new Date().getTime()),
},
methods: {
validateForm() {
return new Promise(resolve => {
this.$refs.form.validate(valid => {
resolve(valid)
})
})
},
async doPass() {
const valid = await this.validateForm()
if (!valid) return
this.$confirm('您确定通过吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + '/doPass', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
async doBack() {
const valid = await this.validateForm()
if (!valid) return
this.$confirm('您确定退回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + '/doBack', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
openAudit(row) {
this.formData = {
id: row.lineUId
}
this.$refs.guava.edit();
this.$refs.lineAuditInfo.init(row)
},
openView(row) {
this.$refs.guava.view();
this.$refs.lineAuditViewInfo.init(row)
},
lineTypeChange() {
this.pageForm.takePartInLineId = ''
this.getUnionSelectLine()
this.doSearch()
},
async getLinePlayTimeByLineId(id) {
const resp = await $.get('/platform/theRapyRecuperation/enrollAudit/commonAudit/getLinePlayTimeByLineId', {
lineId: id,
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
flag: true
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/enrollAudit/commonAudit/getUnionSelectLine', {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode,
flag: true,
regionalNature: this.pageForm.regionalNature
})
if (resp.code === 0) {
this.lineList = resp.data
}
},
async lineChange(val) {
this.pageForm.selectId = ''
await this.getLinePlayTimeByLineId(val);
await this.doSearch()
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
async playChange() {
await this.doSearch()
},
},
async created() {
this.unions = await getUnions()
await this.getModifyConfig();
await this.getUnionSelectLine();
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,379 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.query-row {
height: 70px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.query-row .el-col {
overflow: hidden;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.query-row-title {
width: 120px;
}
.el-table-container {
padding-top: 0;
}
.descriptions-form .el-form-item {
margin-bottom: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>&emsp;&emsp;度:</span>
<el-date-picker
:clearable="false"
v-model="pageForm.startYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
</el-date-picker>
<span></span>
<el-date-picker
:clearable="false"
v-model="pageForm.endYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="doSearch">
</el-date-picker>
</el-col>
<el-col :span="12">
<span>路线类型:</span>
<el-select v-model="pageForm.regionalNature" filterable
placeholder="请选择线路"
style="width: 80%"
@change="lineTypeChange">
<el-option label="全部" value=""></el-option>
<el-option label="省内" value="省内"></el-option>
<el-option label="省外" value="省外"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>线&emsp;&emsp;路:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="lineChange">
<el-option v-for="item in lineList"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.signUpMode + ''"
:value="item.lineId">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>&emsp;&emsp;段:</span>
<el-select v-model="pageForm.lotId" filterable clearable
placeholder="请选择标段"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in modifyConfig.lots"
:key="item.id"
:label="item.lotName"
:value="item.id">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="playChange">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>组织形式:</span>
<el-select v-model="pageForm.signUpMode" filterable clearable
placeholder="请选择组织形式"
style="width: 80%" @change="doSearch">
<el-option label="个人组织" value="3"></el-option>
<el-option label="分工会组织" value="1"></el-option>
<el-option label="校工会组织" value="2"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :app="this" label="审核列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch" size="mini" class="mr5">
<el-radio-button :label="0">全部</el-radio-button>
<el-radio-button :label="1">已审核</el-radio-button>
<el-radio-button :label="2">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData">
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='signUpMode'">
<span v-if="row.signUpMode == '1'">分工会组织</span>
<span v-if="row.signUpMode == '2'">校工会组织</span>
<span v-if="row.signUpMode == '3'">个人组织</span>
</template>
<template scope="{row}" v-else-if="column.prop=='lineNum'">
<template v-if="!row.familyNumber" type="primary" >
{{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}}
</template>
<template v-else type="primary">
{{row.lineNum + row.familyNumber}}{{row.familyNumber}}
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template scope="{row}">
<el-button type="primary" size="mini" @click="openView(row)">查看</el-button>
<el-button type="primary" size="mini" @click="openAudit(row)"
:disabled="row.auditState!==7700">审核
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<template #view>
<line-audit-info ref="lineAuditViewInfo"></line-audit-info>
</template>
<template #edit>
<line-audit-info ref="lineAuditInfo" label="分工会审核" handle>
<template #handle>
<el-form :model="formData" ref="form" label-width="120px">
<el-descriptions border class="descriptions-form" :column="2">
<el-descriptions-item label="审核人">
<el-form-item label-width="0">
<el-input value="${@shiro.getPrincipalProperty('username')}" readonly></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="审核时间">
<el-form-item label-width="0">
<el-input :value="moment().format('YYYY-MM-DD')" readonly></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">
<el-form-item label-width="0" prop="auditOpinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.auditOpinion" maxlength="500"
type="textarea"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<el-row type="flex" justify="end" align="center" style="padding: 20px">
<el-button @click="doBack" type="info">退回</el-button>
<el-button @click="doPass" type="primary">通过</el-button>
</el-row>
</el-form>
</template>
</line-audit-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
startYear: moment().format('YYYY'),
endYear: moment().format('YYYY'),
regionalNature: '',
signUpMode: '',
lotId: '',
takePartInLineId: '',
selectId: '',
isAudit: 2
},
unions: [],
lineList: [],
linePlayTimes: [],
tableColumns: [
{prop: 'year', label: '年度', width: 60},
{prop: 'lineName', label: '线路名称', sortable: true, width: 200},
{prop: 'linePlayTime', label: '出行时间', width: 180},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
{prop: 'signUpMode', label: '组织形式', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'username', label: '发起人', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
{prop: 'lineNum', label: '报名人数(家属)'},
{prop: 'stateName', label: '审核状态'},
],
userPageForm: {
pageNumber: 1,
pageSize: 10
},
modifyConfig: {}
}
},
components: {
'line-audit-info': httpVueLoader('/components/theRapyRecuperation/LineAuditInfo.vue?v=' + new Date().getTime()),
},
methods: {
validateForm() {
return new Promise(resolve => {
this.$refs.form.validate(valid => {
resolve(valid)
})
})
},
async doPass() {
const valid = await this.validateForm()
if (!valid) return
this.$confirm('您确定通过吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + '/doPass', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
async doBack() {
const valid = await this.validateForm()
if (!valid) return
this.$confirm('您确定退回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + '/doBack', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
openAudit(row) {
this.formData = {
id: row.lineUId
}
this.$refs.guava.edit();
this.$refs.lineAuditInfo.init(row)
},
openView(row) {
this.$refs.guava.view();
this.$refs.lineAuditViewInfo.init(row)
},
lineTypeChange() {
this.pageForm.takePartInLineId = ''
this.getUnionSelectLine()
this.doSearch()
},
async getLinePlayTimeByLineId(id) {
const resp = await $.get('/platform/theRapyRecuperation/enrollAudit/commonAudit/getLinePlayTimeByLineId', {
lineId: id,
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
flag: true
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/enrollAudit/commonAudit/getUnionSelectLine', {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode,
flag: true,
regionalNature: this.pageForm.regionalNature
})
if (resp.code === 0) {
this.lineList = resp.data
}
},
async lineChange(val) {
this.pageForm.selectId = ''
await this.getLinePlayTimeByLineId(val);
await this.doSearch()
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
async playChange() {
await this.doSearch()
},
},
async created() {
await this.getModifyConfig();
await this.getUnionSelectLine();
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,379 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.query-row {
height: 70px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.query-row .el-col {
overflow: hidden;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.query-row-title {
width: 120px;
}
.el-table-container {
padding-top: 0;
}
.descriptions-form .el-form-item {
margin-bottom: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>&emsp;&emsp;度:</span>
<el-date-picker
:clearable="false"
v-model="pageForm.startYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
</el-date-picker>
<span></span>
<el-date-picker
:clearable="false"
v-model="pageForm.endYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="doSearch">
</el-date-picker>
</el-col>
<el-col :span="12">
<span>路线类型:</span>
<el-select v-model="pageForm.regionalNature" filterable
placeholder="请选择线路"
style="width: 80%"
@change="lineTypeChange">
<el-option label="全部" value=""></el-option>
<el-option label="省内" value="省内"></el-option>
<el-option label="省外" value="省外"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>线&emsp;&emsp;路:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="lineChange">
<el-option v-for="item in lineList"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.signUpMode + ''"
:value="item.lineId">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>&emsp;&emsp;段:</span>
<el-select v-model="pageForm.lotId" filterable clearable
placeholder="请选择标段"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in modifyConfig.lots"
:key="item.id"
:label="item.lotName"
:value="item.id">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="playChange">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>组织形式:</span>
<el-select v-model="pageForm.signUpMode" filterable clearable
placeholder="请选择组织形式"
style="width: 80%" @change="doSearch">
<el-option label="个人组织" value="3"></el-option>
<el-option label="分工会组织" value="1"></el-option>
<el-option label="校工会组织" value="2"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :app="this" label="审核列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch" size="mini" class="mr5">
<el-radio-button :label="0">全部</el-radio-button>
<el-radio-button :label="1">已审核</el-radio-button>
<el-radio-button :label="2">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData">
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='signUpMode'">
<span v-if="row.signUpMode == '1'">分工会组织</span>
<span v-if="row.signUpMode == '2'">校工会组织</span>
<span v-if="row.signUpMode == '3'">个人组织</span>
</template>
<template scope="{row}" v-else-if="column.prop=='lineNum'">
<template v-if="!row.familyNumber" type="primary" >
{{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}}
</template>
<template v-else type="primary">
{{row.lineNum + row.familyNumber}}{{row.familyNumber}}
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template scope="{row}">
<el-button type="primary" size="mini" @click="openView(row)">查看</el-button>
<el-button type="primary" size="mini" @click="openAudit(row)"
:disabled="row.auditState!==7707">审核
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<template #view>
<line-audit-info ref="lineAuditViewInfo"></line-audit-info>
</template>
<template #edit>
<line-audit-info ref="lineAuditInfo" label="单位领导审核" handle>
<template #handle>
<el-form :model="formData" ref="form" label-width="120px">
<el-descriptions border class="descriptions-form" :column="2">
<el-descriptions-item label="审核人">
<el-form-item label-width="0">
<el-input value="${@shiro.getPrincipalProperty('username')}" readonly></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="审核时间">
<el-form-item label-width="0">
<el-input :value="moment().format('YYYY-MM-DD')" readonly></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">
<el-form-item label-width="0" prop="auditOpinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.auditOpinion" maxlength="500"
type="textarea"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<el-row type="flex" justify="end" align="center" style="padding: 20px">
<el-button @click="doBack" type="info">退回</el-button>
<el-button @click="doPass" type="primary">通过</el-button>
</el-row>
</el-form>
</template>
</line-audit-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
startYear: moment().format('YYYY'),
endYear: moment().format('YYYY'),
regionalNature: '',
signUpMode: '',
lotId: '',
takePartInLineId: '',
selectId: '',
isAudit: 2
},
unions: [],
lineList: [],
linePlayTimes: [],
tableColumns: [
{prop: 'year', label: '年度', width: 60},
{prop: 'lineName', label: '线路名称', sortable: true, width: 200},
{prop: 'linePlayTime', label: '出行时间', width: 180},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
{prop: 'signUpMode', label: '组织形式', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'username', label: '发起人', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
{prop: 'lineNum', label: '报名人数(家属)'},
{prop: 'stateName', label: '审核状态'},
],
userPageForm: {
pageNumber: 1,
pageSize: 10
},
modifyConfig: {}
}
},
components: {
'line-audit-info': httpVueLoader('/components/theRapyRecuperation/LineAuditInfo.vue?v=' + new Date().getTime()),
},
methods: {
validateForm() {
return new Promise(resolve => {
this.$refs.form.validate(valid => {
resolve(valid)
})
})
},
async doPass() {
const valid = await this.validateForm()
if (!valid) return
this.$confirm('您确定通过吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + '/doPass', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
async doBack() {
const valid = await this.validateForm()
if (!valid) return
this.$confirm('您确定退回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post(loc() + '/doBack', this.formData)
if (resp.code === 0) {
this.$refs.guava.index()
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
openAudit(row) {
this.formData = {
id: row.lineUId
}
this.$refs.guava.edit();
this.$refs.lineAuditInfo.init(row)
},
openView(row) {
this.$refs.guava.view();
this.$refs.lineAuditViewInfo.init(row)
},
lineTypeChange() {
this.pageForm.takePartInLineId = ''
this.getUnionSelectLine()
this.doSearch()
},
async getLinePlayTimeByLineId(id) {
const resp = await $.get('/platform/theRapyRecuperation/enrollAudit/commonAudit/getLinePlayTimeByLineId', {
lineId: id,
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
flag: true
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/enrollAudit/commonAudit/getUnionSelectLine', {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode,
flag: true,
regionalNature: this.pageForm.regionalNature
})
if (resp.code === 0) {
this.lineList = resp.data
}
},
async lineChange(val) {
this.pageForm.selectId = ''
await this.getLinePlayTimeByLineId(val);
await this.doSearch()
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
async playChange() {
await this.doSearch()
},
},
async created() {
await this.getModifyConfig();
await this.getUnionSelectLine();
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,332 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.query-row {
height: 70px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.query-row .el-col {
overflow: hidden;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.query-row-title {
width: 120px;
}
.el-table-container {
padding-top: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="8">
<span>&emsp;&emsp;度:</span>
<el-date-picker
:clearable="false"
v-model="pageForm.startYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
</el-date-picker>
<span></span>
<el-date-picker
:clearable="false"
v-model="pageForm.endYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="doSearch">
</el-date-picker>
</el-col>
<el-col :span="8">
<span>所属工会:</span>
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会"
@change="doSearch()"
filterable clearable style="width: 80%">
<el-option
v-for="item in unions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>路线类型:</span>
<el-select v-model="pageForm.regionalNature" filterable
placeholder="请选择线路"
style="width: 80%"
@change="lineTypeChange">
<el-option label="全部" value=""></el-option>
<el-option label="省内" value="省内"></el-option>
<el-option label="省外" value="省外"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="8">
<span>线&emsp;&emsp;路:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="doSearch">
<el-option v-for="item in lineList"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.signUpMode + ''"
:value="item.lineId">
</el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>&emsp;&emsp;段:</span>
<el-select v-model="pageForm.lotId" filterable clearable
placeholder="请选择标段"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in modifyConfig.lots"
:key="item.id"
:label="item.lotName"
:value="item.id">
</el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>&nbsp;&nbsp;&nbsp;&nbsp;人:</span>
<el-input placeholder="请输入发起人姓名/工号" v-model="pageForm.searchKeyword"
style="width: 80%" clearable>
<el-button slot="append" icon="el-icon-search" @click="doSearch"></el-button>
</el-input>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="8">
<span>组织形式:</span>
<el-select v-model="pageForm.signUpMode" filterable
placeholder="请选择组织形式"
style="width: 80%"
@change="doSearch">
<el-option label="校工会组织" value="2"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}"></el-option>
<el-option label="分工会组织" value="1"></el-option>
<el-option label="个人组织" value="3"></el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>&nbsp;&nbsp;&nbsp;&nbsp;社:</span>
<el-select clearable filterable style="width: 80%" v-model="pageForm.travelAgencyId"
placeholder="请选择旅行社" @change="doSearch();$set(pageForm,'travelAgencyPlace','')">
<el-option :key="item.id"
:label="item.travelAgencyName+'('+ item.year +'年)'"
:value="item.id"
v-for="item in travelAgencyList"
></el-option>
</el-select>
</el-col>
<el-col :span="8">
<span>&emsp;&emsp;点:</span>
<el-select clearable filterable style="width: 80%" v-model="pageForm.travelAgencyPlace"
placeholder="请选择旅行社地点" @change="doSearch">
<el-option :key="index"
:label="item"
:value="item"
v-for="(item,index) in (travelAgencyList.find(v => v.id === pageForm.travelAgencyId) ?? {}).travelAgencyPlaces"
></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="线路列表" :app="this"
ref="table_tool">
<template #func>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%"
ref="table"
row-key="id" @sort-change="pageOrder"
v-loading="tableLoading">
<el-table-column align="center" header-align="center" type="index" label="序号"
width="80px" key="#index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</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"
:width="column.width"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='signUpMode'">
<span v-if="row.signUpMode == '1'">分工会组织</span>
<span v-if="row.signUpMode == '2'">校工会组织</span>
<span v-if="row.signUpMode == '3'">个人组织</span>
</template>
<template scope="{row}" v-else-if="column.prop=='lineNum'">
<template v-if="!row.familyNumber" type="primary">
{{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}}
</template>
<template v-else type="primary">
{{row.lineNum + row.familyNumber}}{{row.familyNumber}}
</template>
</template>
<template scope="{row}" v-else-if="column.prop=='stateName'">
{{row.stateName?row.stateName:'待成团'}}
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template scope="{row}">
<template>
<el-button @click="openLine(row)" size="mini" type="primary">
查看人员
</el-button>
</template>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #public>
<line-audit-info ref="lineAuditViewInfo"></line-audit-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
startYear: moment().format('YYYY'),
endYear: moment().format('YYYY'),
unionId: '',
regionalNature: '',
signUpMode: '',
lotId: '',
takePartInLineId: '',
selectId: '',
},
tableColumns: [
{prop: 'year', label: '年度', width: 60},
{prop: 'lineName', label: '线路名称', sortable: true, width: 200},
{prop: 'linePlayTime', label: '出行时间', width: 180},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
{prop: 'travelAgencyPlace', label: '地点', sortable: true},
{prop: 'signUpMode', label: '组织形式', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'username', label: '发起人', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
{prop: 'lineNum', label: '报名人数(家属)'},
{prop: 'stateName', label: '审核状态'},
],
modifyConfig: {},
lineList: [],
unions: [],
signUpModeOptions: [
{label: '校工会组织', value: 2},
{label: '分工会组织', value: 1},
{label: '个人组织', value: 3},
],
travelAgencyList: []
}
},
components: {
'line-audit-info': httpVueLoader('/components/theRapyRecuperation/LineAuditInfo.vue?v=' + new Date().getTime()),
},
methods: {
lineTypeChange() {
this.pageForm.takePartInLineId = ''
this.getUnionSelectLine()
this.doSearch()
},
openLine(row) {
this.$refs.guava.public()
this.$refs.lineAuditViewInfo.init(row)
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode,
flag: true,
regionalNature: this.pageForm.regionalNature
})
if (resp.code === 0) {
this.lineList = resp.data
}
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
async selectTravelAgencyList() {
const {data} = await $.post("/platform/theRapyRecuperation/travelAgency/selectTravelAgencyByYears", {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear
})
this.travelAgencyList = data
},
},
async created() {
this.unions = await getUnions()
await this.getModifyConfig();
await this.getUnionSelectLine();
await this.selectTravelAgencyList();
this.pageData();
}
})
</script>
<!--#
}
#-->
@@ -152,10 +152,10 @@ layout("/layouts/platform.html"){
<span>选择路线:</span> <span>选择路线:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable <el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路" placeholder="请选择线路"
style="width: 80%" @change="lineChange(pageForm.takePartInLineId); doSearch()"> style="width: 80%" @change="pageData()">
<el-option v-for="item in takePartInLines" <el-option v-for="item in takePartInLines"
:key="item.id" :key="item.id"
:label="item.lineName" :label="item.lineName+''+item.unionname+''"
:value="item.id"> :value="item.id">
</el-option> </el-option>
</el-select> </el-select>
@@ -197,8 +197,8 @@ layout("/layouts/platform.html"){
<el-row v-if="!pageForm.state"> <el-row v-if="!pageForm.state">
<el-col :span="24" style="color: red;margin-top: 10px"> <el-col :span="24" style="color: red;margin-top: 10px">
<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】和【其他工会选择本工会线路的疗休养人员】</span> <!-- <span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】和【其他工会选择本工会线路的疗休养人员】</span>-->
<!--<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】</span>--> <span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】</span>
</el-col> </el-col>
</el-row> </el-row>
@@ -209,18 +209,6 @@ layout("/layouts/platform.html"){
v-if="pageForm.state=='1'||pageForm.state=='3'"> v-if="pageForm.state=='1'||pageForm.state=='3'">
<el-col class="query-row-title"></el-col> <el-col class="query-row-title"></el-col>
<el-col class="query-row-content"> <el-col class="query-row-content">
<el-col :span="12">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
<el-col :span="12"> <el-col :span="12">
<span>选择标段:</span> <span>选择标段:</span>
<el-select v-model="pageForm.lotId" filterable clearable <el-select v-model="pageForm.lotId" filterable clearable
@@ -283,29 +271,12 @@ layout("/layouts/platform.html"){
<el-button icon="el-icon-s-promotion" size="small" type="primary" <el-button icon="el-icon-s-promotion" size="small" type="primary"
@click="userDrawer = true" @click="userDrawer = true"
:disabled="multipleSelection.length==0" :disabled="multipleSelection.length==0"
class="mr5" v-if="pageForm.lb=='ry'||!pageForm.lb">设置参加人员 class="mr10" v-if="pageForm.lb=='ry'||!pageForm.lb">设置参加人员
</el-button> </el-button>
<el-button icon="el-icon-s-promotion" size="small" type="primary" <el-button icon="el-icon-s-promotion" size="small" type="primary"
@click="doReimbursement" @click="doExport"
:disabled="multipleSelection.length==0" class="mr10" v-if="pageForm.state">导出
class="mr5" v-if="pageForm.state == '2' && pageForm.lb == 'ry'">一键报销
</el-button> </el-button>
<el-dropdown v-if="pageForm.state" class="ml10 mr10">
<el-button size="small" type="primary">
导出报名人员<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="doExport">
导出压缩包(zip)
</el-dropdown-item>
<el-dropdown-item @click.native="doExportExcel">
导出表格(excel)
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-radio-group @change="pageData()" size="small" <el-radio-group @change="pageData()" size="small"
v-model="pageForm.regionalNature" v-model="pageForm.regionalNature"
v-if="pageForm.state=='1'"> v-if="pageForm.state=='1'">
@@ -328,13 +299,13 @@ layout("/layouts/platform.html"){
width="55"> width="55">
</el-table-column> </el-table-column>
<el-table-column align="center" header-align="center" type="index" label="序号" <el-table-column align="center" header-align="center" type="index" label="序号"
width="80px" key="#index"> width="80px" key="#index">
<template scope="scope"> <template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span> <span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
header-align="center" header-align="center"
@@ -349,7 +320,7 @@ layout("/layouts/platform.html"){
</el-link> </el-link>
</template> </template>
<template scope="{row}" v-else-if="column.prop=='isFamily'"> <template scope="{row}" v-else-if="column.prop=='isFamily'">
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)"> <el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.isFamily?'携带':'未携带'}}{{row.isFamily}} {{row.isFamily?'携带':'未携带'}}{{row.isFamily}}
</el-link> </el-link>
<el-link v-else type="primary"> <el-link v-else type="primary">
@@ -358,7 +329,7 @@ layout("/layouts/platform.html"){
</template> </template>
<template scope="{row}" v-else-if="column.prop=='lineNum'"> <template scope="{row}" v-else-if="column.prop=='lineNum'">
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)"> <el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.lineNum}}{{row.signUpUserFamilyNum}} {{row.lineNum}}{{row.signUpUserFamilyNum}}
</el-link> </el-link>
<el-link v-else type="primary"> <el-link v-else type="primary">
@@ -463,15 +434,8 @@ layout("/layouts/platform.html"){
<el-button @click="openEdit(row)" size="mini" type="primary">编辑 <el-button @click="openEdit(row)" size="mini" type="primary">编辑
</el-button> </el-button>
<el-dropdown class="ml10 mr10" trigger="click"> <el-button @click="doDelete(row)" size="mini" type="danger">删除
<el-button size="mini" type="primary"> </el-button>
调整<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="doModify(row)">保留报名记录</el-dropdown-item>
<el-dropdown-item @click.native="doDelete(row)">删除报名记录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template> </template>
</template> </template>
@@ -521,18 +485,18 @@ layout("/layouts/platform.html"){
<el-table-column label="年龄" prop="age"></el-table-column> <el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType"> <el-table-column label="床型" prop="bedType">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedType }} {{ row.bedInfo.bedType }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="床位" prop="bedNum"> <el-table-column label="床位" prop="bedNum">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedNum }} {{ row.bedInfo.bedNum }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser"> <el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.otherSleepUser ? {{ row.bedInfo.otherSleepUser ?
row.bedInfo?.otherSleepUser : '暂无' }} row.bedInfo.otherSleepUser : '暂无' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column> <el-table-column label="关系" prop="relation"></el-table-column>
@@ -557,7 +521,13 @@ layout("/layouts/platform.html"){
> >
<template scope="{row}" v-if="column.prop=='isFamily'"> <template scope="{row}" v-if="column.prop=='isFamily'">
{{row.isFamily?'携带':'未携带'}} <el-link v-if="!row.familyNumber" type="primary">
{{row.isFamily?'携带':'未携带'}}{{row.isFamily}}
</el-link>
<el-link v-else type="primary">
{{row.familyNumber?'携带':'未携带'}}{{row.familyNumber}}
</el-link>
<!--{{row.isFamily?'携带':'未携带'}}-->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="250px"> <el-table-column label="操作" width="250px">
@@ -609,7 +579,7 @@ layout("/layouts/platform.html"){
<el-dialog <el-dialog
title="查看个人信息" title="查看个人信息"
:visible.sync="userFindDialogVisible" :visible.sync="userFindDialogVisible"
width="80%" top="2%"> width="80%">
<enroll-info ref="viewEnrollInfo" :union_id="unionId"></enroll-info> <enroll-info ref="viewEnrollInfo" :union_id="unionId"></enroll-info>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="userFindDialogVisible = false" type="primary">关闭</el-button> <el-button @click="userFindDialogVisible = false" type="primary">关闭</el-button>
@@ -815,22 +785,22 @@ layout("/layouts/platform.html"){
<el-table :data="editFormData.companionList"> <el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column> <el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column> <el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard" show-overflow-tooltip></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="age"></el-table-column>
<el-table-column label="床型" prop="bedType"> <el-table-column label="床型" prop="bedType">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedType }} {{ row.bedInfo.bedType }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="床位" prop="bedNum"> <el-table-column label="床位" prop="bedNum">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedNum }} {{ row.bedInfo.bedNum }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser"> <el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.otherSleepUser ? {{ row.bedInfo.otherSleepUser ?
row.bedInfo?.otherSleepUser : '暂无' }} row.bedInfo.otherSleepUser : '暂无' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column> <el-table-column label="关系" prop="relation"></el-table-column>
@@ -844,7 +814,7 @@ layout("/layouts/platform.html"){
</template> </template>
</el-form-item> </el-form-item>
<el-form-item prop="travelName" label="旅行社" v-if="pageForm.state==='2'"> <!--<el-form-item prop="travelName" label="旅行社">
<el-select v-model="editFormData.agencyId" filterable clearable <el-select v-model="editFormData.agencyId" filterable clearable
placeholder="请选择旅行社" placeholder="请选择旅行社"
@@ -855,8 +825,8 @@ layout("/layouts/platform.html"){
:value="item.id"> :value="item.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>-->
<el-form-item prop="travelLine" :label="lineLabelName" v-if="pageForm.state==='1'"> <el-form-item prop="travelLine" :label="lineLabelName">
<el-select v-model="editFormData.takePartInLineId" filterable clearable <el-select v-model="editFormData.takePartInLineId" filterable clearable
placeholder="请选择线路" placeholder="请选择线路"
@change="validateLine" @change="validateLine"
@@ -901,7 +871,7 @@ layout("/layouts/platform.html"){
options2: [ options2: [
{label: "本工会人员(自己线路)", value: "1"}, {label: "本工会人员(自己线路)", value: "1"},
{label: "本工会人员(其他路线)", value: "2"}, {label: "本工会人员(其他路线)", value: "2"},
{label: "其他工会人员(选我线路)", value: "3"}, // {label: "其他工会人员(选我线路)", value: "3"},
{label: "选择校工会线路人员", value: "4"} {label: "选择校工会线路人员", value: "4"}
], ],
jdList: [], jdList: [],
@@ -957,14 +927,13 @@ layout("/layouts/platform.html"){
], ],
options: [ options: [
{label: "线路", value: "1"}, {label: "线路", value: "1"},
{label: "旅行社", value: "2"}, // {label: "旅行社", value: "2"},
// {label: "酒店", value: "3"}, {label: "酒店", value: "3"},
], ],
unionDisabled: false, unionDisabled: false,
unitDisabled: false, unitDisabled: false,
modifyConfig: {}, modifyConfig: {},
multipleSelection: [], multipleSelection: [],
linePlayTimes: [],
multipleSelection2: [], multipleSelection2: [],
//人员导入 //人员导入
importVisible: false, importVisible: false,
@@ -995,82 +964,6 @@ layout("/layouts/platform.html"){
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue') 'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
}, },
methods: { methods: {
doModify(row){
this.$confirm("您确定要调整【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doModify/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('调整成功')
}
}
}
})
},
async doReimbursement(){
if (this.multipleSelection && this.multipleSelection.length > 0){
const enrollIds = this.multipleSelection.filter(v=>v.isTakePartIn).map(v=>v.id)
let msg = ''
if(enrollIds.length == this.multipleSelection.length){
msg='您确定要将勾选的报名信息设为已报销吗?'
} else {
msg='已为您忽略未参加的教工信息,您确定要将忽略后的数据设为已报销吗?'
}
if (!enrollIds || enrollIds.length == 0){
this.$message.warning('暂无已参加的老师,不能报销')
this.$refs.table.clearSelection();
return
}
console.log(enrollIds)
this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
debugger
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/user/query/doReimbursement',{data:JSON.stringify(enrollIds)})
if (resp.code === 0) {
await this.doSearch()
this.$refs.table.clearSelection();
if (enrollIds.length == this.multipleSelection.length){
this.$message.success('操作成功')
} else {
this.$message.success('操作成功,已为您过滤未参加人员')
}
} else {
this.$message.warning('操作失败')
}
}
}
})
} else {
this.$message.warning('请勾选需要报销的报名信息')
}
},
async lineChange(val) {
this.pageForm.selectId = '';
const data = this.takePartInLines.find(v => v.id === val)
if (!data) {
return
}
const resp = await $.get('/platform/theRapyRecuperation/TheRapyXghAudit/getLinePlayTimeByLineId', {
lineId: data.id,
year: this.pageForm.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async validateLine() { async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo' const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
, {enroll: JSON.stringify(this.editFormData)}) , {enroll: JSON.stringify(this.editFormData)})
@@ -1099,12 +992,6 @@ layout("/layouts/platform.html"){
} }
}) })
}, },
async doSearch() {
this.pageForm.pageNumber = 1;
this.pageData();
await this.getApplyNumAudit()
await this.getXlByUnion()
},
async doEdit() { async doEdit() {
this.$refs['editForm'].validate().then(async () => { this.$refs['editForm'].validate().then(async () => {
const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', { const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', {
@@ -1284,61 +1171,26 @@ layout("/layouts/platform.html"){
}, },
doExport() { doExport() {
const { const {
searchName,
year, year,
searchName,
searchKeyword, searchKeyword,
unionId, unionId,
unitId,
agencyId, agencyId,
specificTime,
takePartInLineId, takePartInLineId,
state, state,
lotId, lotId,
linePlayTime,
} = this.pageForm } = this.pageForm
let types = this.pageForm.state == 1 ? JSON.stringify(['line']) : JSON.stringify(['travel']) window.open(loc() + "/doExport?year=" + year +
window.open("/platform/theRapyRecuperation/user/query/doExport?" + "&searchName=" + searchName +
"searchName=" + searchName + "&searchKeyword" + searchKeyword +
"&searchKeyword=" + searchKeyword +
"&startYear=" + year +
"&endYear=" + year +
"&unionId=" + unionId + "&unionId=" + unionId +
"&unitId=" + unitId +
"&agencyId=" + agencyId + "&agencyId=" + agencyId +
"&specificTime=" + specificTime +
"&takePartInLineId=" + takePartInLineId + "&takePartInLineId=" + takePartInLineId +
"&state=" + state + "&state=" + state +
"&lotId=" + lotId + "&lotId=" + lotId)
"&satisfyPeople=false" +
"&types=" + types +
"&linePlayTime=" + linePlayTime)
},
doExportExcel() {
const {
searchName,
year,
searchKeyword,
unionId,
agencyId,
specificTime,
takePartInLineId,
state,
lotId,
linePlayTime,
} = this.pageForm
let types = this.pageForm.state == 1 ? JSON.stringify(['line']) : JSON.stringify(['travel'])
window.open("/platform/theRapyRecuperation/user/query/doExportExcel?" +
"searchName=" + searchName +
"&searchKeyword=" + searchKeyword +
"&startYear=" + year +
"&endYear=" + year +
"&unionId=" + unionId +
"&agencyId=" + agencyId +
"&specificTime=" + specificTime +
"&takePartInLineId=" + takePartInLineId +
"&state=" + state +
"&lotId=" + lotId +
"&satisfyPeople=false" +
"&types=" + types +
"&linePlayTime=" + linePlayTime)
}, },
pageSizeChange(val) { pageSizeChange(val) {
this.pageForm.pageNumber = val; this.pageForm.pageNumber = val;
@@ -1380,9 +1232,10 @@ layout("/layouts/platform.html"){
}, },
async openApplyUser(row) { async openApplyUser(row) {
debugger
sublime.showLoadingbar(); sublime.showLoadingbar();
const pageForm = clone(this.pageFormUser) const pageForm = clone(this.pageFormUser)
pageForm.id = row.id pageForm.id = this.pageForm.state === '1' ? row.selectId : row.id
pageForm.unionId = this.unionId pageForm.unionId = this.unionId
let url = this.pageForm.state === '1' ? '/platform/theRapyRecuperation/line/selectLineUser' : '/platform/theRapyRecuperation/query/selectAgencyUser' let url = this.pageForm.state === '1' ? '/platform/theRapyRecuperation/line/selectLineUser' : '/platform/theRapyRecuperation/query/selectAgencyUser'
$.post(url, pageForm, (data) => { $.post(url, pageForm, (data) => {
@@ -1449,13 +1302,11 @@ layout("/layouts/platform.html"){
{prop: 'userName', label: '姓名'}, {prop: 'userName', label: '姓名'},
{prop: 'unitName', label: '单位', sortable: true}, {prop: 'unitName', label: '单位', sortable: true},
{prop: 'unionName', label: '工会', sortable: true}, {prop: 'unionName', label: '工会', sortable: true},
{prop: 'lineOrMaName', label: '线路/旅行社', sortable: true}, {prop: 'lineOrMaName', label: '线路/酒店', sortable: true},
//{prop: 'travelAgencyName', label: '旅行社', sortable: true},
{prop: 'times', label: '出行时间'}, {prop: 'times', label: '出行时间'},
{prop: 'regionalNature', label: '线路类型', sortable: true}, {prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'isFamily', label: '是否携带家属'}, {prop: 'isFamily', label: '是否携带家属'},
{prop: 'isTakePartIn', label: '是否参加'}, {prop: 'isTakePartIn', label: '是否参加'},
//{prop: 'reimbursementStatus', label: '是否报销'},
// {prop: 'stateId', label: '审核状态'}, // {prop: 'stateId', label: '审核状态'},
] ]
this.getSelfUnionUser() this.getSelfUnionUser()
@@ -1478,11 +1329,11 @@ layout("/layouts/platform.html"){
this.tableColumns = [ this.tableColumns = [
{label: '年度', prop: 'year'}, {label: '年度', prop: 'year'},
{label: '旅行社名称', prop: 'travelAgencyName', sortable: true}, {label: '旅行社名称', prop: 'travelAgencyName', sortable: true},
//{label: '旅行社编号', prop: 'serialNumber', sortable: true}, {label: '旅行社编号', prop: 'serialNumber', sortable: true},
{label: '联系人', prop: 'contact'}, {label: '联系人', prop: 'contact'},
{label: '联系人手机', prop: 'contactMobileNumber'}, {label: '联系人手机', prop: 'contactMobileNumber'},
{label: '邮箱', prop: 'email'}, {label: '邮箱', prop: 'email'},
//{label: '官网', prop: 'officialWebsite'}, {label: '官网', prop: 'officialWebsite'},
{label: '报名人数', prop: 'agencyNum', sortable: true}, {label: '报名人数', prop: 'agencyNum', sortable: true},
] ]
this.getLxsData() this.getLxsData()
@@ -1491,7 +1342,7 @@ layout("/layouts/platform.html"){
this.tableColumns = [ this.tableColumns = [
{label: '年度', prop: 'year'}, {label: '年度', prop: 'year'},
{label: '酒店名称', prop: 'baseName', sortable: true}, {label: '酒店名称', prop: 'baseName', sortable: true},
//{label: '酒店编号', prop: 'serialNumber', sortable: true}, // {label: '酒店编号', prop: 'serialNumber', sortable: true},
{label: '联系人', prop: 'baseContactPerson'}, {label: '联系人', prop: 'baseContactPerson'},
{label: '联系人手机', prop: 'baseContactNumber'}, {label: '联系人手机', prop: 'baseContactNumber'},
{label: '承担旅行社', prop: 'travelAgencyName', sortable: true}, {label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
@@ -1502,33 +1353,17 @@ layout("/layouts/platform.html"){
this.getJdData() this.getJdData()
await this.getJdList() await this.getJdList()
} else { } else {
if(this.pageForm.state == '2') { this.tableColumns = [
this.tableColumns = [ {prop: 'loginName', label: '一卡通号'},
{prop: 'loginName', label: '一卡通号'}, {prop: 'userName', label: '姓名'},
{prop: 'userName', label: '姓名'}, {prop: 'unitName', label: '单位', sortable: true},
{prop: 'unitName', label: '单位', sortable: true}, {prop: 'unionName', label: '工会', sortable: true},
{prop: 'unionName', label: '工会', sortable: true}, {prop: 'lineOrMaName', label: '线路/酒店'},
{prop: 'travelAgencyName', label: '旅行社'}, {prop: 'times', label: '出行时间'},
{prop: 'isFamily', label: '是否携带家属'}, {prop: 'isFamily', label: '是否携带家属'},
{prop: 'isTakePartIn', label: '是否参加'}, {prop: 'isTakePartIn', label: '是否参加'},
{prop: 'reimbursementStatus', label: '是否报销'}, // {prop: 'stateId', label: '审核状态'},
//{prop: 'stateId', label: '审核状态'}, ]
]
} else {
this.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: '是否参加'},
//{prop: 'reimbursementStatus', label: '是否报销'},
//{prop: 'stateId', label: '审核状态'},
]
}
await this.getRyData() await this.getRyData()
} }
await this.getApplyNum() await this.getApplyNum()
@@ -1550,6 +1385,11 @@ layout("/layouts/platform.html"){
year: this.pageForm.year, year: this.pageForm.year,
state: this.pageForm.state2 state: this.pageForm.state2
}) })
data.forEach(v => {
if (!v.unionname) {
v.unionname = '校工会'
}
})
this.takePartInLines = data this.takePartInLines = data
}, },
async getAgencyList() { async getAgencyList() {
@@ -1637,8 +1477,7 @@ layout("/layouts/platform.html"){
state2: this.pageForm.state2, state2: this.pageForm.state2,
regionalNature: this.pageForm.regionalNature, regionalNature: this.pageForm.regionalNature,
takePartInLineId: this.pageForm.takePartInLineId, takePartInLineId: this.pageForm.takePartInLineId,
year: this.pageForm.year, year: this.pageForm.year
selectId: this.pageForm.selectId
}) })
this.applyNum = data this.applyNum = data
}, },
@@ -1651,9 +1490,10 @@ layout("/layouts/platform.html"){
this.options2 = [ this.options2 = [
{label: "本工会人员(自己线路)" + data.count1 + "人", value: "1"}, {label: "本工会人员(自己线路)" + data.count1 + "人", value: "1"},
{label: "本工会人员(其他路线)" + data.count2 + "人", value: "2"}, {label: "本工会人员(其他路线)" + data.count2 + "人", value: "2"},
{label: "其他工会人员(选我线路)" + data.count3 + "人", value: "3"}, // {label: "其他工会人员(选我线路)" + data.count3 + "人", value: "3"},
{label: "选择校工会线路人员" + data.count4 + "人", value: "4"} {label: "选择校工会线路人员" + data.count4 + "人", value: "4"}
] ]
}, },
async getModifyConfig() { async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne') const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
@@ -1707,7 +1547,7 @@ layout("/layouts/platform.html"){
this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode') this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode')
this.unionOptions = await getUnions() this.unionOptions = await getUnions()
await this.getApplyNumAudit() await this.getApplyNumAudit()
if ("${@shiro.hasRole('H04')}" === 'true' && "${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'false') { if ("${@shiro.hasRole('H04')}" === 'true' && "${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}" === 'false') {
await this.getBmUserUnion() await this.getBmUserUnion()
if (this.unionOptions && this.unionOptions.length > 0) { if (this.unionOptions && this.unionOptions.length > 0) {
const union = this.unionOptions.find(v => v.id === this.unionId) const union = this.unionOptions.find(v => v.id === this.unionId)
@@ -47,7 +47,7 @@ layout("/layouts/platform.html"){
type="year" type="year"
value-format="yyyy" value-format="yyyy"
placeholder="选择年" placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()"> style="width: 38%" @change="doSearch">
</el-date-picker> </el-date-picker>
<span></span> <span></span>
<el-date-picker <el-date-picker
@@ -56,7 +56,7 @@ layout("/layouts/platform.html"){
type="year" type="year"
value-format="yyyy" value-format="yyyy"
placeholder="选择年" placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()"> style="width: 38%" @change="doSearch">
</el-date-picker> </el-date-picker>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@@ -217,23 +217,18 @@ layout("/layouts/platform.html"){
<table-tool label="人员列表" :app="this"> <table-tool label="人员列表" :app="this">
<template #func> <template #func>
<el-button icon="el-icon-s-promotion" size="small" type="primary" <el-button icon="el-icon-s-promotion" size="medium" type="primary"
@click="doExport" @click="doExport"
v-if="pageForm.state">导出 class="mr10" v-if="pageForm.state">导出
</el-button> </el-button>
<el-button @click="openImport" size="small" type="primary">参加人员导入 <el-button style="margin-right: 10px" @click="openImport" size="medium" type="primary">参加人员导入
</el-button> </el-button>
<el-button icon="el-icon-s-promotion" size="small" type="primary" <el-button icon="el-icon-s-promotion" size="medium" type="primary"
@click="userDrawer = true" @click="userDrawer = true"
:disabled="multipleSelection.length==0" :disabled="multipleSelection.length==0"
class="mr5">设置参加人员 class="mr10">设置参加人员
</el-button> </el-button>
<el-button size="small" type="primary" <el-radio-group @change="doSearch()" size="medium"
@click="doReimbursement"
:disabled="multipleSelection.length==0"
class="mr10">一键报销
</el-button>
<el-radio-group @change="doSearch()" size="small"
v-model="pageForm.regionalNature" v-model="pageForm.regionalNature"
v-if="pageForm.state=='1'"> v-if="pageForm.state=='1'">
<el-radio-button label="">全部</el-radio-button> <el-radio-button label="">全部</el-radio-button>
@@ -273,7 +268,7 @@ layout("/layouts/platform.html"){
</el-link>--> </el-link>-->
</template> </template>
<template scope="{row}" v-else-if="column.prop=='isFamily'"> <template scope="{row}" v-else-if="column.prop=='isFamily'">
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)"> <el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.isFamily?'携带':'未携带'}}{{row.isFamily}} {{row.isFamily?'携带':'未携带'}}{{row.isFamily}}
</el-link> </el-link>
<el-link v-else type="primary"> <el-link v-else type="primary">
@@ -294,18 +289,11 @@ layout("/layouts/platform.html"){
<el-button @click="openView(row)" size="mini" type="primary">查看 <el-button @click="openView(row)" size="mini" type="primary">查看
</el-button> </el-button>
<el-button <el-button
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}"
@click="openEdit(row)" size="mini" type="primary">编辑 @click="openEdit(row)" size="mini" type="primary">编辑
</el-button> </el-button>
<el-dropdown class="ml10 mr10" trigger="click"> <el-button @click="doDelete(row)" size="mini" type="danger">删除
<el-button size="mini" type="primary"> </el-button>
调整<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="doModify(row)">保留报名记录</el-dropdown-item>
<el-dropdown-item @click.native="doDelete(row)">删除报名记录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -313,6 +301,7 @@ layout("/layouts/platform.html"){
</el-card> </el-card>
</template> </template>
<template #view> <template #view>
<enroll-info ref="viewEnrollInfo"></enroll-info> <enroll-info ref="viewEnrollInfo"></enroll-info>
@@ -321,6 +310,7 @@ layout("/layouts/platform.html"){
<line-info ref="viewLineInfo"></line-info> <line-info ref="viewLineInfo"></line-info>
</template> </template>
<el-drawer <el-drawer
size="70%" size="70%"
title="批量设置参加人员" title="批量设置参加人员"
@@ -383,6 +373,7 @@ layout("/layouts/platform.html"){
</span> </span>
</el-drawer> </el-drawer>
<el-dialog <el-dialog
title="参加人员导入" title="参加人员导入"
:visible.sync="importVisible" :visible.sync="importVisible"
@@ -431,6 +422,7 @@ layout("/layouts/platform.html"){
</span> </span>
</el-dialog> </el-dialog>
<el-dialog <el-dialog
title="修改信息" title="修改信息"
:visible.sync="editVisible" :visible.sync="editVisible"
@@ -484,22 +476,22 @@ layout("/layouts/platform.html"){
<el-table :data="editFormData.companionList"> <el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column> <el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column> <el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard" show-overflow-tooltip></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="age"></el-table-column>
<el-table-column label="床型" prop="bedType"> <el-table-column label="床型" prop="bedType">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedType }} {{ row.bedInfo.bedType }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="床位" prop="bedNum"> <el-table-column label="床位" prop="bedNum">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.bedNum }} {{ row.bedInfo.bedNum }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser"> <el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}"> <template scope="{row}">
{{ row.bedInfo?.otherSleepUser ? {{ row.bedInfo.otherSleepUser ?
row.bedInfo?.otherSleepUser : '暂无' }} row.bedInfo.otherSleepUser : '暂无' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column> <el-table-column label="关系" prop="relation"></el-table-column>
@@ -586,8 +578,8 @@ layout("/layouts/platform.html"){
options: [ options: [
{label: "线路", value: "1"}, {label: "线路", value: "1"},
{label: "旅行社", value: "2"}, // {label: "旅行社", value: "2"},
// {label: "酒店", value: "3"}, {label: "酒店", value: "3"},
], ],
agencyLists: [], agencyLists: [],
unionOptions: [], unionOptions: [],
@@ -606,7 +598,6 @@ layout("/layouts/platform.html"){
{prop: 'isFamily', label: '是否携带家属'}, {prop: 'isFamily', label: '是否携带家属'},
{prop: 'signingUptime', label: '报名时间', checked: 0}, {prop: 'signingUptime', label: '报名时间', checked: 0},
{prop: 'isTakePartIn', label: '是否参加'}, {prop: 'isTakePartIn', label: '是否参加'},
{prop: 'reimbursementStatus', label: '是否报销'},
{prop: 'takePartInTime', label: '参加时间', checked: 0}, {prop: 'takePartInTime', label: '参加时间', checked: 0},
], ],
pageForm: { pageForm: {
@@ -618,8 +609,8 @@ layout("/layouts/platform.html"){
state: '1', state: '1',
regionalNature: '', regionalNature: '',
signUpMode: '', signUpMode: '',
lotId: '', lotId:'',
takePartInLineId: '', takePartInLineId:'',
}, },
multipleSelection: [], multipleSelection: [],
multipleSelection2: [], multipleSelection2: [],
@@ -648,10 +639,7 @@ layout("/layouts/platform.html"){
labelName: '', labelName: '',
unionSelectLines: [], unionSelectLines: [],
lineLabelName: '', lineLabelName: '',
activeNames: [], activeNames:[]
title:'',
dialogVisible:false,
} }
}, },
components: { components: {
@@ -659,67 +647,6 @@ layout("/layouts/platform.html"){
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue') 'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
}, },
methods: { methods: {
async doReimbursement(){
if (this.multipleSelection && this.multipleSelection.length > 0){
const enrollIds = this.multipleSelection.filter(v=>v.isTakePartIn).map(v=>v.id)
let msg = ''
if(enrollIds.length == this.multipleSelection.length){
msg='您确定要将勾选的报名信息设为已报销吗?'
} else {
msg='已为您忽略未参加的教工信息,您确定要将忽略后的数据设为已报销吗?'
}
if (!enrollIds || enrollIds.length == 0){
this.$message.warning('暂无已参加的老师,不能报销')
this.$refs.table.clearSelection();
return
}
console.log(enrollIds)
this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
debugger
if ("confirm" === a) {//确认后再执行
const resp = await $.post(loc() + '/doReimbursement',{data:JSON.stringify(enrollIds)})
if (resp.code === 0) {
await this.doSearch()
this.$refs.table.clearSelection();
if (enrollIds.length == this.multipleSelection.length){
this.$message.success('操作成功')
} else {
this.$message.success('操作成功,已为您过滤未参加人员')
}
} else {
this.$message.warning('操作失败')
}
}
}
})
} else {
this.$message.warning('请勾选需要报销的报名信息')
}
},
doModify(row){
this.$confirm("您确定要调整【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doModify/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('调整成功')
}
}
}
})
},
doExport() { doExport() {
const { const {
takePartInBaseManagementId, takePartInBaseManagementId,
@@ -736,7 +663,6 @@ layout("/layouts/platform.html"){
lotId, lotId,
linePlayTime, linePlayTime,
} = this.pageForm } = this.pageForm
let types = this.pageForm.state == 1 ? JSON.stringify(['line']) : JSON.stringify(['travel'])
window.open(loc() + "/doExport?takePartInBaseManagementId=" + takePartInBaseManagementId + window.open(loc() + "/doExport?takePartInBaseManagementId=" + takePartInBaseManagementId +
"&searchName=" + searchName + "&searchName=" + searchName +
"&searchKeyword=" + searchKeyword + "&searchKeyword=" + searchKeyword +
@@ -749,9 +675,8 @@ layout("/layouts/platform.html"){
"&takePartInLineId=" + takePartInLineId + "&takePartInLineId=" + takePartInLineId +
"&state=" + state + "&state=" + state +
"&lotId=" + lotId + "&lotId=" + lotId +
"&satisfyPeople=false" +
"&types=" + types +
"&linePlayTime=" + linePlayTime) "&linePlayTime=" + linePlayTime)
}, },
async validateLine() { async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo' const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
@@ -785,7 +710,6 @@ layout("/layouts/platform.html"){
}) })
}, },
async openEdit(row) { async openEdit(row) {
this.getUnionSelectLine(row.takePartInLineId)
this.editFormData = {}; this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id}) const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) { if (resp.code === 0) {
@@ -940,38 +864,6 @@ layout("/layouts/platform.html"){
this.pageData() this.pageData()
await this.getXlLxsUserCount() await this.getXlLxsUserCount()
this.takePartInLines = await this.getXlByUnion() this.takePartInLines = await this.getXlByUnion()
if (this.pageForm.state == '2') {
this.tableColumns = [
{prop: 'loginName', label: '一卡通号'},
{prop: 'userName', label: '姓名'},
{prop: 'unitName', label: '单位', sortable: true},
{prop: 'unionName', label: '工会', sortable: true},
{prop: 'travelAgencyName', label: '旅行社'},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'signingUptime', label: '报名时间', checked: 0},
{prop: 'isTakePartIn', label: '是否参加'},
{prop: 'reimbursementStatus', label: '是否报销'},
{prop: 'takePartInTime', label: '参加时间', checked: 0},
]
} else {
this.tableColumns = [
{prop: 'loginName', label: '一卡通号'},
{prop: 'userName', label: '姓名'},
{prop: 'unitName', label: '单位', sortable: true},
{prop: 'unionName', label: '工会', sortable: true},
// {prop: 'travelAgencyName', label: '旅行社'},
{prop: 'lineName', label: '线路/酒店'},
{prop: 'playStartTime', label: '出行时间'},
{prop: 'regionalNature', label: '线路类型'},
{prop: 'lotName', label: '标段'},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'signingUptime', label: '报名时间', checked: 0},
{prop: 'isTakePartIn', label: '是否参加'},
{prop: 'reimbursementStatus', label: '是否报销'},
{prop: 'takePartInTime', label: '参加时间', checked: 0},
]
}
}, },
async getLines() { async getLines() {
const {data} = await $.post("/platform/theRapyRecuperation/travelAgency/selectLineByAgencyId", { const {data} = await $.post("/platform/theRapyRecuperation/travelAgency/selectLineByAgencyId", {
@@ -1016,7 +908,7 @@ layout("/layouts/platform.html"){
}, },
async flushUnits() { async flushUnits() {
this.$set(this.pageForm, "unitId", "") this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') { if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unitOptions = await getUnits(this.pageForm.unionId) this.unitOptions = await getUnits(this.pageForm.unionId)
} else { } else {
this.unionOptions = this.unionOptions.filter(v => v.id === "${@shiro.getPrincipalProperty('unit').getUnionid()}") this.unionOptions = this.unionOptions.filter(v => v.id === "${@shiro.getPrincipalProperty('unit').getUnionid()}")
@@ -1090,12 +982,8 @@ layout("/layouts/platform.html"){
this.importVisible = false; this.importVisible = false;
this.pageData(); this.pageData();
}, },
async getUnionSelectLine(disPlayUnionSelectId = null) { async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', { const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine')
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
disPlayUnionSelectId: disPlayUnionSelectId
})
if (resp.code === 0) { if (resp.code === 0) {
this.unionSelectLines = resp.data this.unionSelectLines = resp.data
} }
@@ -59,7 +59,7 @@ layout("/layouts/platform.html"){
</div> </div>
</div> </div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"> <div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
<div class="search-item-label">分工会:</div> <div class="search-item-label">分工会:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select @change="doSearch" <el-select @change="doSearch"
@@ -73,7 +73,7 @@ layout("/layouts/platform.html"){
</div> </div>
</div> </div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"> <div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
<div class="search-item-label">分工会:</div> <div class="search-item-label">分工会:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select @change="doSearch" clearable filterable style="width: 100%" <el-select @change="doSearch" clearable filterable style="width: 100%"
@@ -17,6 +17,13 @@ layout("/layouts/platform.html"){
margin-bottom: 0 !important; margin-bottom: 0 !important;
} }
.el-checkbox {
margin-right: 0;
}
.el-descriptions-item__cell {
text-align: left !important;
}
</style> </style>
@@ -49,7 +56,7 @@ layout("/layouts/platform.html"){
<el-option :key="item.id" <el-option :key="item.id"
:label="item.travelAgencyName" :label="item.travelAgencyName"
:value="item.id" :value="item.id"
v-for="item in travelAgencyArray"></el-option> v-for="item in travelAgencyOptions"></el-option>
</el-select> </el-select>
</div> </div>
</div> </div>
@@ -59,10 +66,9 @@ layout("/layouts/platform.html"){
<div class="search-item-option"> <div class="search-item-option">
<el-radio-group class="mr0-radio" <el-radio-group class="mr0-radio"
@change="doSearch" @change="doSearch"
:disabled = "pageForm.mode == 1"
v-model="pageForm.regionalNature"> v-model="pageForm.regionalNature">
<el-radio-button :label="item.value" <el-radio-button :label="item.value"
border v-for="item in regionalNatureList"> border v-for="item in regionalNatureList">
{{item.label}} {{item.label}}
</el-radio-button> </el-radio-button>
</el-radio-group> </el-radio-group>
@@ -80,7 +86,7 @@ layout("/layouts/platform.html"){
</div> </div>
</div> </div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"> <div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
<div class="search-item-label">分工会:</div> <div class="search-item-label">分工会:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select clearable filterable style="width: 100%" v-model="pageForm.unionId"> <el-select clearable filterable style="width: 100%" v-model="pageForm.unionId">
@@ -117,13 +123,12 @@ layout("/layouts/platform.html"){
<table-tool :app="this" label="线路列表(温馨提示:如查询条件的年度为空时,已选择默认查询当年选择的线路)"> <table-tool :app="this" label="线路列表(温馨提示:如查询条件的年度为空时,已选择默认查询当年选择的线路)">
<template #func> <template #func>
<el-button @click="showGiveTimes" type="primary" <!--<el-button @click="showGiveTimes" type="primary"
size="small" style="margin-right: 10px"> size="small" style="margin-right: 10px">
一键统赋时间 一键统赋时间
</el-button> </el-button>-->
<el-radio-group @change="doSearch" size="small" v-model="pageForm.selectStatus"> <el-radio-group @change="doSearch" size="small" v-model="pageForm.selectStatus">
<!--<el-radio-button :label="0">全部</el-radio-button>-->
<el-radio-button :label="1">已选择</el-radio-button> <el-radio-button :label="1">已选择</el-radio-button>
<el-radio-button :label="-1">可选择</el-radio-button> <el-radio-button :label="-1">可选择</el-radio-button>
</el-radio-group> </el-radio-group>
@@ -135,8 +140,8 @@ layout("/layouts/platform.html"){
row-key="id" row-key="id"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
header-align="center"> header-align="center">
<el-table-column type="selection" reserve-selection width="55px" <!--<el-table-column type="selection" reserve-selection width="55px"
:selectable="(row)=>{return row.isDisabled==true || !(row.usId==null || row.usId == '')}"></el-table-column> :selectable="(row)=>{return row.isDisabled==true || !(row.usId==null || row.usId == '')}"></el-table-column>-->
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index" <el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column> width="80px"></el-table-column>
@@ -148,20 +153,10 @@ layout("/layouts/platform.html"){
header-align="center" header-align="center"
:show-overflow-tooltip="column.prop!=='playTime'" :show-overflow-tooltip="column.prop!=='playTime'"
:key="column.prop" :key="column.prop"
v-if="pageForm.mode != 2 || (pageForm.mode == 2 && column.prop !== 'isOpen')" v-if="pageForm.mode == 1 || (['2','3'].includes(pageForm.mode) && column.prop !== 'isOpen')"
v-for="column in tableColumns" v-for="column in tableColumns"
:width="column.width" :width="column.width"
> >
<!--<template scope="{row}" v-if="column.prop==='isDisabled'">
<el-switch
:active-value="false"
:inactive-value="true"
@change="(val)=>{lineStatusChange(row.id)}"
active-color="#13ce66"
inactive-color="#ff4949"
v-model="row.isDisabled">
</el-switch>
</template>-->
<template scope="{row:{signUpMode}}" v-if="column.prop==='signUpMode'"> <template scope="{row:{signUpMode}}" v-if="column.prop==='signUpMode'">
{{signUpModeName(signUpMode)}} {{signUpModeName(signUpMode)}}
</template> </template>
@@ -173,14 +168,6 @@ layout("/layouts/platform.html"){
</template> </template>
<template scope="{row}" v-else-if="column.prop==='playTime'"> <template scope="{row}" v-else-if="column.prop==='playTime'">
<template v-if="row.playTimes"> <template v-if="row.playTimes">
<!--<el-tooltip placement="top">
<div slot="content">
<div v-for="t in row.playTimes.split(',')" :key="t">
{{t}}
</div>
</div>
{{row.playTimes}}
</el-tooltip>-->
<el-tooltip placement="top"> <el-tooltip placement="top">
<div slot="content"> <div slot="content">
<div v-for="(t,ti) in row.playTimes.split(',')" :key="t" <div v-for="(t,ti) in row.playTimes.split(',')" :key="t"
@@ -192,9 +179,6 @@ layout("/layouts/platform.html"){
{{row.playTimes}} {{row.playTimes}}
</div> </div>
</el-tooltip> </el-tooltip>
<!-- <div v-for="t in row.playTimes.split(',')" :key="t">
{{t}}
</div>-->
</template> </template>
<el-button v-else @click="openSetLineTime(row)" type="text"> <el-button v-else @click="openSetLineTime(row)" type="text">
选择并设置出行时间段 选择并设置出行时间段
@@ -269,7 +253,7 @@ layout("/layouts/platform.html"){
</template> </template>
<el-dialog :close-on-click-modal="false" :visible.sync="setLineTimeDialog" title="设置出行时间段信息" <el-dialog :close-on-click-modal="false" :visible.sync="setLineTimeDialog" title="设置出行时间段信息"
width="80%"> width="80%" top="2%">
<el-form :model="formData" :rules="rules" label-width="0" ref="form" size="small"> <el-form :model="formData" :rules="rules" label-width="0" ref="form" size="small">
<h4>{{formData.lineName}}</h4> <h4>{{formData.lineName}}</h4>
@@ -365,24 +349,6 @@ layout("/layouts/platform.html"){
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
旅行社
</template>
<el-form-item :prop="'times.' + $index + '.travelAgencyId'"
:rules="{required:true,message:'联系人',trigger:['change','blur']}"
label-width="0">
<el-select v-model="row.travelAgencyId" style="width: 100%" clearable filterable
placeholder="请选择旅行社" @change="(val) => {selectTravelChange(val, row)}">
<el-option :key="item.id"
:label="item.travelAgencyName+'('+ item.year +'年)'"
:value="item.id"
v-for="item in travelAgencyList"
></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span class="text-danger">*</span> <span class="text-danger">*</span>
@@ -410,7 +376,11 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<!--<el-descriptions-item label="最少参与教工"> <el-descriptions-item label="最少参与教工">
<template slot="label">
<span class="text-danger">*</span>
最少参与教工
</template>
<el-form-item :prop="'times.' + $index + '.minimumGroupSize'" <el-form-item :prop="'times.' + $index + '.minimumGroupSize'"
:rules="[ :rules="[
{ required: true, message: '最少参与教工不能为空', trigger: 'blur' }, { required: true, message: '最少参与教工不能为空', trigger: 'blur' },
@@ -419,7 +389,7 @@ layout("/layouts/platform.html"){
label-width="0"> label-width="0">
<el-input clearable v-model="row.minimumGroupSize"></el-input> <el-input clearable v-model="row.minimumGroupSize"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item>--> </el-descriptions-item>
<el-descriptions-item label="交通工具"> <el-descriptions-item label="交通工具">
<el-form-item :prop="'times.' + $index + '.trafficTools'" <el-form-item :prop="'times.' + $index + '.trafficTools'"
@@ -438,14 +408,18 @@ layout("/layouts/platform.html"){
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="最少成团人数(包括家属)"> <el-descriptions-item label="成团人数包括家属">
<template slot="label">
<span class="text-danger">*</span>
成团人数包括家属
</template>
<el-form-item :prop="'times.' + $index + '.estimatedFamilyNumbers'" <el-form-item :prop="'times.' + $index + '.estimatedFamilyNumbers'"
:rules="[ :rules="[
{ required: false, message: '最少成团人数不能为空', trigger: 'blur' }, { required: true, message: '成团人数包括家属不能为空', trigger: 'blur' },
{ pattern: /^[0-9]*$/, message: '最少成团人数格式不正确', trigger: 'blur' } { pattern: /^[0-9]*$/, message: '成团人数包括家属格式不正确', trigger: 'blur' }
]" ]"
label-width="0"> label-width="0">
<el-input clearable v-model="row.estimatedFamilyNumbers"></el-input> <el-input clearable v-model="row.estimatedFamilyNumbers" placeholder="请输入成团人数包括家属"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
@@ -461,6 +435,32 @@ layout("/layouts/platform.html"){
</el-switch> </el-switch>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<template v-if="pageForm.mode == 3">
<el-descriptions-item label="报名范围">
<template slot="label">
<span class="text-danger">*</span>
报名范围
</template>
<el-form-item :prop="'times.' + $index + '.signScope'"
label-width="0"
:rules="[
{ required: true, message: '报名范围不能为空', trigger: 'blur' },
]">
<el-checkbox-group size="mini" v-model="row.signScope">
<el-checkbox :label="1" border>自己选择</el-checkbox>
<el-checkbox :label="2" border>本分工会</el-checkbox>
<el-checkbox :label="3" border>全校</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="人员名单" v-if="row.signScope?.includes(1)">
<el-button @click="openJoinUserVisible(row)" type="primary" size="mini">设置人员名单(您已设置{{ row.chooseUserList?.length || 0 }}人)</el-button>
<el-button v-if="row.chooseUserList?.length > 0" @click="row.chooseUserList = [];selectRow.userTableData = [];$forceUpdate()" type="primary" size="mini">清空名单</el-button>
</el-descriptions-item>
</template>
</el-descriptions> </el-descriptions>
</el-row> </el-row>
@@ -469,12 +469,10 @@ layout("/layouts/platform.html"){
<div class="text-right"> <div class="text-right">
<el-button <el-button
@click="formData.times.push({enable:true,minimumGroupSize:lineConfig.groupNumber,estimatedCost:lineConfig.cost, estimatedFamilyNumbers: lineConfig.outsideQuota})" @click="formData.times.push({enable:true,minimumGroupSize:lineConfig.groupNumber,estimatedCost:lineConfig.cost})"
size="mini" type="primary">新增出行时间 size="mini" type="primary">新增出行时间
</el-button> </el-button>
</div> </div>
<el-alert closable show-icon style="margin:10px 0" <el-alert closable show-icon style="margin:10px 0"
title="温馨提醒:变更时间应该大于报名截至时间,小于出行时间。" title="温馨提醒:变更时间应该大于报名截至时间,小于出行时间。"
type="warning"></el-alert> type="warning"></el-alert>
@@ -515,11 +513,6 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="出行结束时间"> <el-descriptions-item label="出行结束时间">
{{row.playEndTime}} {{row.playEndTime}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="旅行社">
{{row.travelAgencyName}}
</el-descriptions-item>
<el-descriptions-item label="联系人"> <el-descriptions-item label="联系人">
{{row.contact}} {{row.contact}}
</el-descriptions-item> </el-descriptions-item>
@@ -528,9 +521,9 @@ layout("/layouts/platform.html"){
{{row.contactPhone}} {{row.contactPhone}}
</el-descriptions-item> </el-descriptions-item>
<!--<el-descriptions-item label="最少参与教工"> <el-descriptions-item label="最少参与教工">
{{row.minimumGroupSize}} {{row.minimumGroupSize}}
</el-descriptions-item>--> </el-descriptions-item>
<el-descriptions-item label="交通工具"> <el-descriptions-item label="交通工具">
{{row.trafficTools}} {{row.trafficTools}}
@@ -638,7 +631,7 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="是否开启"> <!--<el-descriptions-item label="是否开启">
<el-form-item :prop="'times.' + $index + '.enable'" <el-form-item :prop="'times.' + $index + '.enable'"
label-width="0"> label-width="0">
<el-switch <el-switch
@@ -649,7 +642,7 @@ layout("/layouts/platform.html"){
inactive-color="#ff4949"> inactive-color="#ff4949">
</el-switch> </el-switch>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>-->
</el-descriptions> </el-descriptions>
</el-row> </el-row>
</div> </div>
@@ -662,6 +655,54 @@ layout("/layouts/platform.html"){
<el-button @click="doSetGiveLineTimes" type="primary">提交</el-button> <el-button @click="doSetGiveLineTimes" type="primary">提交</el-button>
</el-row> </el-row>
</el-dialog> </el-dialog>
<el-dialog :close-on-click-modal="false" :visible.sync="userDialogVisible" title="设置人员名单" width="60%" top="2%">
<vi-title title="筛选人员"></vi-title>
<el-select
v-model="chooseUserMultiple"
value-key="id"
filterable
remote
multiple
reserve-keyword
placeholder="请输入工号或者姓名查询"
:remote-method="queryJoinUser" style="width: 90%">
<el-option
v-for="item in canChooseUserList"
:key="item.id"
:label="item.username+'-'+item.loginname+'-'+item.unitname"
:value="item.id">
</el-option>
</el-select>
<el-button type="primary" @click="joinUserConfirm">确定</el-button>
<vi-title class="mt10" title="已选人员"></vi-title>
<div class="btn-group tool-button">
<el-input placeholder="请输入姓名或工号查询" v-model="userSearchKeyword" clearable></el-input>
</div>
<div class="btn-group tool-button">
<el-button @click="userDoSearch" icon="el-icon-search" type="primary"></el-button>
</div>
<el-table max-height="500" :data="selectRow.userTableData">
<el-table-column label="序号" type="index" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="username" label="姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="loginname" label="工号" header-align="center" align="center"></el-table-column>
<el-table-column prop="sex" label="性别" header-align="center" align="center"></el-table-column>
<el-table-column prop="unitname" label="所属单位" header-align="center" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="unionname" label="所属工会" header-align="center" align="center" show-overflow-tooltip></el-table-column>
<el-table-column align="center" label="操作" width="220px">
<template slot-scope="{row}">
<el-button @click="selectRow.chooseUserList.splice(row, 1);selectRow.userTableData.splice(row, 1)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-row justify="end" type="flex" class="mt20">
<el-button @click="userDialogVisible=false">取消</el-button>
<el-button @click="selectRow.chooseUserList = [];selectRow.userTableData = [];userDialogVisible=false" type="danger">清空已选</el-button>
<el-button @click="doJoinUser" type="primary">提交</el-button>
</el-row>
</el-dialog>
</guava> </guava>
</div> </div>
@@ -687,7 +728,6 @@ layout("/layouts/platform.html"){
} }
callback() callback()
} }
const validateChangeEndTime = (rule, value, callback) => { const validateChangeEndTime = (rule, value, callback) => {
if (!value) { if (!value) {
callback(new Error('请选择变更截至时间')) callback(new Error('请选择变更截至时间'))
@@ -699,7 +739,6 @@ layout("/layouts/platform.html"){
} }
callback() callback()
} }
const validatePlayEndTime = (rule, value, callback) => { const validatePlayEndTime = (rule, value, callback) => {
if (!value) { if (!value) {
callback(new Error('请选择出行结束时间')) callback(new Error('请选择出行结束时间'))
@@ -711,7 +750,6 @@ layout("/layouts/platform.html"){
} }
callback() callback()
} }
//统赋时间 //统赋时间
const validateGiveSignUpEndTime = (rule, value, callback) => { const validateGiveSignUpEndTime = (rule, value, callback) => {
console.log(value) console.log(value)
@@ -725,7 +763,6 @@ layout("/layouts/platform.html"){
} }
callback() callback()
} }
const validateGiveChangeEndTime = (rule, value, callback) => { const validateGiveChangeEndTime = (rule, value, callback) => {
if (!value) { if (!value) {
callback(new Error('请选择变更截至时间')) callback(new Error('请选择变更截至时间'))
@@ -737,7 +774,6 @@ layout("/layouts/platform.html"){
} }
callback() callback()
} }
const validateGivePlayEndTime = (rule, value, callback) => { const validateGivePlayEndTime = (rule, value, callback) => {
if (!value) { if (!value) {
callback(new Error('请选择出行结束时间')) callback(new Error('请选择出行结束时间'))
@@ -749,32 +785,22 @@ layout("/layouts/platform.html"){
} }
callback() callback()
} }
return { return {
travelAgencyArray: [], canChooseUserList: [],
travelAgencyList: [], chooseUserMultiple: [],
userDialogVisible: false,
userSearchKeyword: '',
tableColumns: [ tableColumns: [
// {label: '年度', prop: 'year', sortable: true},
{label: '线路名称', prop: 'lineName', sortable: true}, {label: '线路名称', prop: 'lineName', sortable: true},
{label: '线路类型', prop: 'regionalNature', sortable: true}, {label: '线路类型', prop: 'regionalNature', sortable: true},
{label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'}, {label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'},
{label: '出行时间', prop: 'playTime', sortable: 'custom', sortProp: 'playStartTime', width: 230}, {label: '出行时间', prop: 'playTime', sortable: 'custom', sortProp: 'playStartTime', width: 230},
//{label: '承担旅行社', prop: 'travelAgencyName', sortable: true}, {label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
// {label: '所属分工会', prop: 'belongUnionName', sortable: true},
{label: '组织形式', prop: 'signUpMode', sortable: true}, {label: '组织形式', prop: 'signUpMode', sortable: true},
// {label: '编号', prop: 'serialNumber', sortable: true},
// {label: '创建模式', prop: 'createMode', sortable: true},
//{label: '创建人', prop: 'createUserName', sortable: true},
{label: '选择工会', prop: 'belongUnionName', sortable: true}, {label: '选择工会', prop: 'belongUnionName', sortable: true},
{label: '是否开放对外报名', prop: 'isOpen', sortable: true},
// {label: '是否启用', prop: 'isDisabled', sortable: true}
], ],
rules: { rules: {
signUpStartTime: [{ signUpStartTime: [{required: true, message: '请选择报名开始时间', trigger: ['change', 'blur']}],
required: true,
message: '请选择报名开始时间',
trigger: ['change', 'blur']
}],
signUpEndTime: [{required: true, validator: validateSignUpEndTime, trigger: ['change', 'blur']}], signUpEndTime: [{required: true, validator: validateSignUpEndTime, trigger: ['change', 'blur']}],
changeEndTime: [{required: true, validator: validateChangeEndTime, trigger: ['change', 'blur']}], changeEndTime: [{required: true, validator: validateChangeEndTime, trigger: ['change', 'blur']}],
playStartTime: [{required: true, message: '请选择出行开始时间', trigger: ['change', 'blur']}], playStartTime: [{required: true, message: '请选择出行开始时间', trigger: ['change', 'blur']}],
@@ -795,7 +821,7 @@ layout("/layouts/platform.html"){
keywords: null, keywords: null,
selectStatus: -1, selectStatus: -1,
unionId: null, unionId: null,
regionalNature: '省内' regionalNature: '全部'
}, },
createModeList: [], createModeList: [],
signUpModeList: [], signUpModeList: [],
@@ -810,7 +836,6 @@ layout("/layouts/platform.html"){
cost: null cost: null
}, },
regionalNatureList: [{label:'全部线路',name:'provinceAll',ordinal:0,provinceIn:'provinceIn',provinceOut:'provinceOut',value:'全部'}], regionalNatureList: [{label:'全部线路',name:'provinceAll',ordinal:0,provinceIn:'provinceIn',provinceOut:'provinceOut',value:'全部'}],
multipleSelection: [], multipleSelection: [],
giveLineTimesData: { giveLineTimesData: {
times: [] times: []
@@ -832,7 +857,7 @@ layout("/layouts/platform.html"){
}, },
setGiveLineTimeDialog: false, setGiveLineTimeDialog: false,
selectRow: {},
} }
}, },
computed: { computed: {
@@ -844,18 +869,57 @@ layout("/layouts/platform.html"){
}, },
}, },
methods: { methods: {
queryJoinUser(val) {
$.post('/platform/theRapyRecuperation/linePersonalSelect/queryJoinUser', {keyWord: val}).then(res => {
if (res.code === 0) {
this.canChooseUserList = res.data
}
})
},
joinUserConfirm() {
//获取表格数据的id集合
const idList = this.selectRow.chooseUserList.map(o => o.id)
//多选框排除在表格数据里面的
const notList = this.chooseUserMultiple.filter(o => !idList.includes(o))
//通过多选框候选列表查询出可以被加到表格里面的
let list = this.canChooseUserList.filter(o => notList.includes(o.id))
this.selectRow.chooseUserList = this.selectRow.chooseUserList.concat(list)
this.selectRow.userTableData = clone(this.selectRow.chooseUserList)
this.chooseUserMultiple = []
this.$forceUpdate()
},
userDoSearch() {
if(this.userSearchKeyword === '') {
this.selectRow.userTableData = clone(this.selectRow.chooseUserList)
} else {
this.selectRow.userTableData = this.selectRow.chooseUserList.filter(o => o.username.includes(this.userSearchKeyword) || o.loginname.includes(this.userSearchKeyword))
}
},
openJoinUserVisible(row) {
if(!row.chooseUserList) {
row.chooseUserList = []
} else {
row.userTableData = clone(row.chooseUserList)
}
if(!row.userTableData) {
row.userTableData = []
}
this.selectRow = row
this.userDialogVisible = true
},
doJoinUser() {
if(this.selectRow.chooseUserList.length === 0) {
this.$message.warning('请选择人员')
return
}
this.userDialogVisible = false
},
doSearch() { doSearch() {
this.tableData = [] this.tableData = []
this.tableKey = new Date().getTime() this.tableKey = new Date().getTime()
this.pageForm.pageNumber = 1 this.pageForm.pageNumber = 1
this.pageData() this.pageData()
}, },
selectTravelChange(val, row) {
const o = this.travelAgencyList.find(o => o.id === val)
console.log(o)
row.contact = o.contact
row.contactPhone = o.contactMobileNumber
},
pageOrder(column) { pageOrder(column) {
if(column.prop === 'playTime') { if(column.prop === 'playTime') {
this.pageForm.pageOrderName = 'playStartTime' this.pageForm.pageOrderName = 'playStartTime'
@@ -886,10 +950,8 @@ layout("/layouts/platform.html"){
this.notifyWarning(resp.msg) this.notifyWarning(resp.msg)
} }
}, },
async openSetLineTime({id, lineName, usUnionId, signUpMode}) { async openSetLineTime({id, lineName, usUnionId, signUpMode}) {
await this.getLineConfig(id) await this.getLineConfig(id)
const resp = await $.post(loc() + '/selectLineInfo', { const resp = await $.post(loc() + '/selectLineInfo', {
lineId: id, lineId: id,
unionId: usUnionId, unionId: usUnionId,
@@ -901,9 +963,18 @@ layout("/layouts/platform.html"){
times:[] times:[]
} }
if(resp.data && resp.data.length > 0){ if(resp.data && resp.data.length > 0){
resp.data.forEach(item => {
item.chooseUserList = JSON.parse(item.chooseUserList)
item.signScope = JSON.parse(item.signScope)
})
this.$set(this.formData, 'times', resp.data) this.$set(this.formData, 'times', resp.data)
}else{ }else{
this.formData.times.push({enable:true,minimumGroupSize:this.lineConfig.groupNumber,estimatedCost:this.lineConfig.cost, estimatedFamilyNumbers: this.lineConfig.outsideQuota}) this.formData.times.push({
enable:true,
minimumGroupSize:this.lineConfig.groupNumber,
estimatedCost:this.lineConfig.cost,
signScope: [],
})
} }
this.formData.lineId = id this.formData.lineId = id
this.formData.signUpMode = signUpMode this.formData.signUpMode = signUpMode
@@ -917,15 +988,14 @@ layout("/layouts/platform.html"){
async doSelect() { async doSelect() {
const valid = await this.$refs['form'].validate() const valid = await this.$refs['form'].validate()
if (!valid) return if (!valid) return
const confirm = await this.$confirm('请再次确认,是否选择此线路为疗休养线路?', '提示', { const confirm = await this.$confirm('请再次确认,是否选择此线路为疗休养线路?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) })
if (confirm !== 'confirm') return if (confirm !== 'confirm') return
const fmtData = this.formData.times.map(v => { const fmtData = this.formData.times.map(v => {
v.chooseUserList = JSON.stringify(v.chooseUserList)
return { return {
...v, ...v,
lineId: this.formData.lineId, lineId: this.formData.lineId,
@@ -933,7 +1003,6 @@ layout("/layouts/platform.html"){
mode: GetQueryString('mode') mode: GetQueryString('mode')
} }
}) })
const resp = await $.post(loc() + '/selectLineTimes', {lineUnionSelects: JSON.stringify(fmtData)}) const resp = await $.post(loc() + '/selectLineTimes', {lineUnionSelects: JSON.stringify(fmtData)})
if (resp.code === 0) { if (resp.code === 0) {
this.setLineTimeDialog = false this.setLineTimeDialog = false
@@ -970,7 +1039,7 @@ layout("/layouts/platform.html"){
}, },
async getTravelAgencyOptions() { async getTravelAgencyOptions() {
const {data} = await $.get(loc() + '/getTravelAgencyOptions') const {data} = await $.get(loc() + '/getTravelAgencyOptions')
this.travelAgencyArray = data this.travelAgencyOptions = data
}, },
async getLotList() { async getLotList() {
const {data} = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne') const {data} = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
@@ -983,10 +1052,6 @@ layout("/layouts/platform.html"){
handleSelectionChange(val) { handleSelectionChange(val) {
this.multipleSelection = val; this.multipleSelection = val;
}, },
async selectTravelAgencyList() {
const resp = await $.post('/platform/theRapyRecuperation/travelAgency/selectTravelAgency', {year: new Date().getFullYear()})
this.travelAgencyList = resp.data
},
showGiveTimes() { showGiveTimes() {
if (!this.multipleSelection || this.multipleSelection.length == 0) { if (!this.multipleSelection || this.multipleSelection.length == 0) {
this.$message.warning('请在线路列表中勾选您想要统赋时间的线路!'); this.$message.warning('请在线路列表中勾选您想要统赋时间的线路!');
@@ -1013,9 +1078,7 @@ layout("/layouts/platform.html"){
type: 'warning' type: 'warning'
}) })
if (confirm !== 'confirm') return if (confirm !== 'confirm') return
const lineIds = this.multipleSelection.map(v => v.id)
const lineIds = this.multipleSelection.map(v => v.usId)
const fmtData = this.giveLineTimesData.times.map(v => { const fmtData = this.giveLineTimesData.times.map(v => {
return { return {
...v, ...v,
@@ -1023,10 +1086,10 @@ layout("/layouts/platform.html"){
mode: GetQueryString('mode') mode: GetQueryString('mode')
} }
}) })
const resp = await $.post(loc() + '/setGiveLineTimes', { const resp = await $.post(loc() + '/setGiveLineTimes', {
lineIds: JSON.stringify(lineIds), lineIds: JSON.stringify(lineIds),
lineUnionSelects: JSON.stringify(fmtData) lineUnionSelects: JSON.stringify(fmtData),
year:this.pageForm.year
}) })
if (resp.code === 0) { if (resp.code === 0) {
this.setGiveLineTimeDialog = false this.setGiveLineTimeDialog = false
@@ -1046,21 +1109,25 @@ layout("/layouts/platform.html"){
this.$message.warning(resp.msg) this.$message.warning(resp.msg)
} }
this.pageData() this.pageData()
} },
async initTableColumns() {
if(this.pageForm.mode == 1) {
this.tableColumns.push({label: '是否开放对外报名', prop: 'isOpen', sortable: true})
} else if(this.pageForm.mode == 3) {
this.tableColumns = this.tableColumns.filter(o => o.prop !== 'belongUnionName')
this.tableColumns.push({label: '选择人', prop: 'selectUserName', sortable: true})
}
},
}, },
async created() { async created() {
this.$set(this.pageForm, 'mode', GetQueryString('mode')) this.$set(this.pageForm, 'mode', GetQueryString('mode'))
if(this.pageForm.mode == 2) { await this.initTableColumns()
this.$set(this.pageForm, 'regionalNature', '全部')
}
this.pageData() this.pageData()
this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode') this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode')
this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode') this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode')
this.regionalNatureList.push(...await getEnumOptions('TheRapyRecuperationProvinceType')) this.regionalNatureList.push(...await getEnumOptions('TheRapyRecuperationProvinceType'))
// const result = await getEnumOptions('TheRapyRecuperationProvinceType')
this.unionOptions = await getUnions(null) this.unionOptions = await getUnions(null)
this.travelAgencyOptions = this.selectTravelAgencyList() this.travelAgencyOptions = this.getTravelAgencyOptions()
await this.getTravelAgencyOptions()
this.lotList = this.getLotList() this.lotList = this.getLotList()
} }
}) })
@@ -0,0 +1,198 @@
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 scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{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
this.getUnionSelectLine()
await this.getModifyConfig()
const {code, msg, data} = await $.get("/platform/theRapyRecuperation/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 $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (code === 0) {
this.config = data
} else {
this.$message.error(msg)
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
year: this.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.unionSelectLines = resp.data
}
},
async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/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/theRapyRecuperation/user/query/doEdit', this.formData)
if (code === 0) {
this.$message.success(msg)
this.visible = false
this.$emit('refresh')
} else {
this.$message.error(msg)
}
}).catch()
}
})
}
}
};
@@ -0,0 +1,463 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.filter-container {
margin-bottom: 20px;
border-radius: 4px;
}
.filter-container .el-form {
padding: 10px 15px;
}
/* Flex布局样式 */
.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>
<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="人员列表" :app="this" ref="table_tool">
<template #func>
<!-- <el-button icon="el-icon-s-promotion" @click="openImport" size="small" type="primary">参加人员导入-->
<!-- </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>
</template>
</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"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='lineName'">
<el-link type="primary" @click="openLine(row)">{{row.lineName}}
</el-link>
</template>
<template scope="{row}" v-else-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 scope="{row}" v-else-if="column.prop=='lineNum'">
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.lineNum}}{{row.signUpUserFamilyNum}}
</el-link>
<el-link v-else type="primary">
{{row.lineNum}}{{row.familyNumber}}
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='signUpMode'">
{{signUpModeName(row.signUpMode)}}
</template>
<template scope="{row}" v-else-if="column.prop=='agencyNum'">
<el-link type="primary" @click="openApplyUser(row)">{{row.agencyNum}}
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='times'">
<div v-if="row.playStartTime">{{row.playStartTime}}</div>
<div v-else>{{row.playStartTime1}}</div>
</template>
<template scope="{row}" v-else-if="column.prop=='isTakePartIn'">
{{row.isTakePartIn?'已参加':'未参加'}}
</template>
<template scope="{row}" v-else-if="column.prop=='stateId'">
<span v-if="row.stateId">
<vi-table-state :state="row"></vi-table-state>
</span>-->
<sapn v-else style="color: #67C23A">暂无</sapn>
</template>
<template scope="{row}" v-else-if="column.prop=='lineOrMaName'">
{{row.lineName?row.lineName:row.baseName?row.baseName:row.travelAgencyName}}
</template>
<template scope="{row:{officialWebsite}}"
v-else-if="column.prop==='officialWebsite'">
<a :href="officialWebsite" class="text-primary" target="_blank">
{{officialWebsite}}
</a>
</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 scope="{row}">
{{row.lotName}}
</template>
</el-table-column>
<el-table-column label="操作" width="250px">
<template scope="{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>
</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'){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=' + new Date().getTime()),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue'),
'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: {
handleQuery() {
console.log('查询参数:', this.pageForm);
// 查询逻辑
},
resetQuery() {
this.pageForm = {
year: new Date().getFullYear().toString(),
loginName: '',
userName: '',
takePartInLineId: '',
unionId: '',
signUpMode: 1,
lotId: '',
regionalNature: '',
pageNumber: 1,
pageSize: 10,
totalCount: 0,
}
this.doSearch()
},
signUpModeName(val) {
return null
},
openApplyUser(row) {
},
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 $.post('/platform/theRapyRecuperation/schoolUnionUserQuery/deleteMyEnrollInfoById', {
id: row.id
})
if (code === 0) {
this.doSearch()
this.$message.success(msg)
} else {
this.$message.warning(resp.msg)
}
})
},
openImport() {
},
doExport() {
const {year, userName, loginName, unionId, signUpMode, regionalNature, takePartInLineId, lotId} = this.pageForm
debugger
window.open('/platform/theRapyRecuperation/schoolUnionUserQuery/exportXlsx?year=' +
year
+ '&userName=' + userName
+ '&loginName=' + loginName
+ '&unionId=' + unionId
+ '&signUpMode=' + signUpMode
+ '&regionalNature=' + 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() {
$.post('/platform/theRapyRecuperation/TheRapyConfig/findOne').then((res) => {
if (res.code === 0) {
this.config = res.data
}
})
},
signUpModeChange(val) {
this.pageForm.takePartInLineId = ''
this.getLines()
this.doSearch()
},
getLines() {
$.post('/platform/theRapyRecuperation/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.error(res.msg)
}
})
},
doSearch(){
this.getLines()
this.tableKey = new Date().getTime()
this.pageForm.pageNumber = 1
this.pageData()
}
},
async created() {
this.doSearch()
this.getConfig()
this.unionOptions = await getUnions()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,147 @@
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/theRapyRecuperation/TheRapyConfig/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/theRapyRecuperation/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)
}
})
}
}
};
@@ -142,7 +142,8 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10"> <el-card shadow="never" class="mt10">
<table-tool label="" :app="this" ref="table_tool"> <table-tool label="温馨提醒:成团确认后,将进入审核流程,报名人员不能再进行取消报名的操作" :app="this"
ref="table_tool">
<template #func> <template #func>
<el-button icon="el-icon-s-promotion" size="small" type="primary" <el-button icon="el-icon-s-promotion" size="small" type="primary"
@click="doExport" @click="doExport"
@@ -174,16 +175,21 @@ layout("/layouts/platform.html"){
<el-link type="primary" @click="openLine(row)">{{row.lineName}} <el-link type="primary" @click="openLine(row)">{{row.lineName}}
</el-link> </el-link>
</template> </template>
<template scope="{row}" v-if="column.prop=='signUpMode'"> <template scope="{row}" v-else-if="column.prop=='signUpMode'">
<span>{{row.signUpMode == '1' ? '校工会组织' : '分工会组织'}}</span> <span v-if="row.signUpMode == '1'">分工会组织</span>
<span v-if="row.signUpMode == '2'">校工会组织</span>
<span v-if="row.signUpMode == '3'">个人组织</span>
</template> </template>
<template scope="{row}" v-else-if="column.prop=='lineNum'"> <template scope="{row}" v-else-if="column.prop=='lineNum'">
<el-link v-if="!row.familyNumber" type="primary" @click="openUserData(row)"> <template v-if="!row.familyNumber" type="primary">
{{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}} {{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}}
</el-link> </template>
<el-link v-else type="primary"> <template v-else type="primary">
{{row.lineNum + row.familyNumber}}{{row.familyNumber}} {{row.lineNum + row.familyNumber}}{{row.familyNumber}}
</el-link> </template>
</template>
<template scope="{row}" v-else-if="column.prop=='stateName'">
{{row.stateName?row.stateName:'待成团'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="380px"> <el-table-column label="操作" width="380px">
@@ -192,17 +198,32 @@ layout("/layouts/platform.html"){
<el-button @click="openUserData(row)" size="mini" type="primary"> <el-button @click="openUserData(row)" size="mini" type="primary">
查看人员 查看人员
</el-button> </el-button>
<el-button size="mini" type="primary" @click="sendSuccess(row)">
发送成团通知 <el-dropdown class="ml10" trigger="click">
</el-button> <el-button size="mini" type="primary">
成团确认<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="sendSuccess(row, true)"
:disabled="![null,7703,7710,7715].includes(row.auditState)">
发送通知
</el-dropdown-item>
<el-dropdown-item @click.native="sendSuccess(row, false)"
:disabled="![null,7703,7710,7715].includes(row.auditState)">
不发送通知
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="ml10 mr10" trigger="click"> <el-dropdown class="ml10 mr10" trigger="click">
<el-button size="mini" type="primary"> <el-button size="mini" type="primary">
发送未成团通知<i class="el-icon-arrow-down el-icon--right"></i> 发送未成团通知<i class="el-icon-arrow-down el-icon--right"></i>
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="sendFail(row, true)">保留报名记录</el-dropdown-item> <el-dropdown-item @click.native="sendFail(row, true)">保留报名记录
<el-dropdown-item @click.native="sendFail(row, false)">删除报名记录</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item @click.native="sendFail(row, false)">删除报名记录
</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@@ -214,7 +235,8 @@ layout("/layouts/platform.html"){
</template> </template>
<template #public> <template #public>
<line-info ref="viewLineInfo"></line-info> <!-- <line-info ref="viewLineInfo"></line-info>-->
<line-audit-info ref="lineAuditViewInfo"></line-audit-info>
</template> </template>
<template #edit> <template #edit>
@@ -223,17 +245,18 @@ layout("/layouts/platform.html"){
<div class="search-item"> <div class="search-item">
<div class="search-item-label">工号姓名</div> <div class="search-item-label">工号姓名</div>
<div class="search-item-option"> <div class="search-item-option">
<el-input v-model="userPageForm.searchKeyword" maxlength="10" clearable></el-input> <el-input v-model="userPageForm.searchKeyword" maxlength="10" clearable
placeholder="请输入工号或姓名查询"></el-input>
</div> </div>
</div> </div>
<div class="search-item" <div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}"> v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')||@shiro.hasRole('SchoolUnionMemberAdmin')}">
<div class="search-item-label">所属工会:</div> <div class="search-item-label">所属工会:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true" <el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true" filterable="true"
placeholder="所属工会" style="width: 100%;" placeholder="请选择所属工会" style="width: 100%;"
v-model="userPageForm.unionId"> v-model="userPageForm.unionId">
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option> <el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
</el-select> </el-select>
@@ -243,7 +266,7 @@ layout("/layouts/platform.html"){
<div class="search-item"> <div class="search-item">
<div class="search-item-label">所属单位:</div> <div class="search-item-label">所属单位:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select clearable="true" filterable="true" placeholder="所属单位" <el-select clearable="true" filterable="true" placeholder="请选择所属单位"
style="width: 100%;" style="width: 100%;"
v-model="userPageForm.unitId"> v-model="userPageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option> <el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
@@ -276,6 +299,18 @@ layout("/layouts/platform.html"){
{{row.familyNumber?'携带':'未携带'}}{{row.familyNumber}} {{row.familyNumber?'携带':'未携带'}}{{row.familyNumber}}
</el-link> </el-link>
</template> </template>
<template scope="{row}" v-else-if="column.prop=='sign'">
<el-image v-if="row.sign"
style="width: 100px; height: 50px"
:src="'/file_server/fileStreamPreview?id=' +row.sign"
fit="contain"></el-image>
<span v-else>暂无</span>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<template scope="{row}">
<el-button @click="deleteJoinUser(row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px"> <el-row class="el-pagination-container" style="margin-bottom: 0px">
@@ -316,35 +351,37 @@ layout("/layouts/platform.html"){
{prop: 'lineName', label: '线路名称', sortable: true, width: 200}, {prop: 'lineName', label: '线路名称', sortable: true, width: 200},
{prop: 'linePlayTime', label: '出行时间', width: 180}, {prop: 'linePlayTime', label: '出行时间', width: 180},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180}, {prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
{prop: 'unionname', label: '选择线路工会', sortable: true}, {prop: 'signUpMode', label: '组织形式', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true}, {prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'contact', label: '联系人', sortable: true, checked: 0}, {prop: 'username', label: '发起人', sortable: true},
{prop: 'contactMobileNumber', label: '联系方式', checked: 0}, {prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80}, {prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
{prop: 'lineNum', label: '报名人数(家属)'}, {prop: 'lineNum', label: '报名人数(家属)'},
{prop: 'stateName', label: '审核状态'},
], ],
modifyConfig: {}, modifyConfig: {},
lineList: [], lineList: [],
unions: [], unions: [],
units:[], units: [],
signUpModeOptions: [ signUpModeOptions: [
{label: '校工会组织', value: 2}, {label: '校工会组织', value: 2},
{label: '分工会组织', value: 1}, {label: '分工会组织', value: 1},
], ],
userPageForm:{ userPageForm: {
pageNumber:1, pageNumber: 1,
pageSize: 10 pageSize: 10
}, },
userData:[], userData: [],
userDataTableColumns:[ userDataTableColumns: [
{prop: 'loginName', label: '工号'}, {prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'}, {prop: 'userName', label: '姓名'},
{prop: 'unionName', label: '所属工会'}, {prop: 'unionName', label: '所属工会'},
{prop: 'unitName', label: '所属单位', sortable: true}, {prop: 'unitName', label: '所属单位', sortable: true},
{prop: 'isFamily', label: '是否携带家属'}, {prop: 'isFamily', label: '是否携带家属'},
{prop: 'linePlayTime', label: '出行时间', sortable: true} {prop: 'linePlayTime', label: '出行时间', sortable: true},
{prop: 'sign', label: '签字'}
], ],
lineUId: '', lineUId: '',
@@ -356,9 +393,25 @@ layout("/layouts/platform.html"){
}, },
components: { components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'), 'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'line-audit-info': httpVueLoader('/components/theRapyRecuperation/LineAuditInfo.vue?v=' + new Date().getTime()),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue') 'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
}, },
methods: { methods: {
deleteJoinUser(row) {
this.$confirm('您确定要删除' + row.userName + '的报名信息吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(async () => {
const resp = await $.post('/platform/theRapyRecuperation/statistics/deleteJoinUser', {id: row.id})
if (resp.code === 0) {
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
})
},
doExport() { doExport() {
const { const {
startYear, startYear,
@@ -375,6 +428,7 @@ layout("/layouts/platform.html"){
"&unionId=" + unionId + "&unionId=" + unionId +
"&takePartInLineId=" + takePartInLineId + "&takePartInLineId=" + takePartInLineId +
"&lotId=" + lotId + "&lotId=" + lotId +
"&state=" + 1 +
"&regionalNature=" + regionalNature + "&regionalNature=" + regionalNature +
"&satisfyPeople=true" + "&satisfyPeople=true" +
"&types=" + JSON.stringify(['line']) + "&types=" + JSON.stringify(['line']) +
@@ -404,15 +458,23 @@ layout("/layouts/platform.html"){
this.getUnionSelectLine() this.getUnionSelectLine()
this.doSearch() this.doSearch()
}, },
async sendSuccess(row) { async sendSuccess(row, type) {
this.$confirm("确定发送<span style='color: red'>成团通知</span>吗?", '提示', { let message = '确定要成团吗?'
if (type) {
message += "此操作将会<span style='color: red'>发送通知</span>,请再次确认!";
}
this.$confirm(message, '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
dangerouslyUseHTMLString: true dangerouslyUseHTMLString: true
}).then(async () => { }).then(async () => {
const resp = await $.post('/platform/theRapyRecuperation/statistics/sendSuccess', {id: row.lineUId}) const resp = await $.post('/platform/theRapyRecuperation/statistics/sendSuccess', {
id: row.lineUId,
type: type
})
if (resp.code === 0) { if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg) this.$message.success(resp.msg)
} else { } else {
this.$message.warning(resp.msg) this.$message.warning(resp.msg)
@@ -426,7 +488,10 @@ layout("/layouts/platform.html"){
type: 'warning', type: 'warning',
dangerouslyUseHTMLString: true dangerouslyUseHTMLString: true
}).then(async () => { }).then(async () => {
const resp = await $.post('/platform/theRapyRecuperation/statistics/sendFail', {id: row.lineUId, type: type}) const resp = await $.post('/platform/theRapyRecuperation/statistics/sendFail', {
id: row.lineUId,
type: type
})
if (resp.code === 0) { if (resp.code === 0) {
this.$message.success(resp.msg) this.$message.success(resp.msg)
} else { } else {
@@ -436,14 +501,15 @@ layout("/layouts/platform.html"){
}, },
openLine(row) { openLine(row) {
this.$refs.guava.public() this.$refs.guava.public()
if (row.regionalNature === "省内") { this.$refs.lineAuditViewInfo.init(row)
/*if (row.regionalNature === "省内") {
this.$refs.viewLineInfo.findOne(row.lineId, null) this.$refs.viewLineInfo.findOne(row.lineId, null)
} else { } else {
this.$refs.viewLineInfo.findOne(row.lineId, row.usUnionId) this.$refs.viewLineInfo.findOne(row.lineId, row.usUnionId)
} }*/
}, },
openUserData(row){ openUserData(row) {
this.lineUId = row.lineUId this.lineUId = row.lineUId
this.$refs.guava.edit(); this.$refs.guava.edit();
this.getUserDataByLineId(row) this.getUserDataByLineId(row)
@@ -468,7 +534,7 @@ layout("/layouts/platform.html"){
}, },
async flushUnits() { async flushUnits() {
this.$set(this.userData, "unitId", "") this.$set(this.userData, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'true') { if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'true') {
this.units = await getUnits(this.userData.unionId) this.units = await getUnits(this.userData.unionId)
} else { } else {
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}") this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
@@ -482,10 +548,10 @@ layout("/layouts/platform.html"){
this.userPageForm.pageNumber = val; this.userPageForm.pageNumber = val;
this.getUserDataByLineId(); this.getUserDataByLineId();
}, },
async getUserDataByLineId(row){ async getUserDataByLineId(row) {
this.userPageForm.takePartLineId = this.lineUId this.userPageForm.takePartLineId = this.lineUId
const resp = await $.post(loc() + '/getUserDateByLine',this.userPageForm) const resp = await $.post(loc() + '/getUserDateByLine', this.userPageForm)
if (resp.code === 0){ if (resp.code === 0) {
this.userData = resp.data.list this.userData = resp.data.list
this.userPageForm.totalCount = resp.data.totalCount this.userPageForm.totalCount = resp.data.totalCount
} }
@@ -0,0 +1,268 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava :edit_scroll="false" ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">年度:</div>
<div class="search-item-option">
<el-date-picker
:clearable="false"
@change="yearChange"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路:</div>
<div class="search-item-option">
<el-select @change="doSearch" filterable="true"
placeholder="请选择线路"
style="width: 100%;" :clearable="true"
v-model="pageForm.lineId">
<el-option :label="item.lineName + '' + item.unionName + ''" :value="item.id"
v-for="item in lineList"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">职工信息:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
style="width: 100%" v-model="pageForm.searchKeyword">
<el-select slot="prepend" style="width: 80px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="we.userName"></el-option>
<el-option label="工号" value="we.loginName"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits"
clearable
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">组成单位:</div>
<div class="search-item-option">
<el-select clearable filterable placeholder="请选择"
style="width: 100%"
v-model="pageForm.unitId">
<el-option
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in units">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">评分:</div>
<div class="search-item-option">
<el-select clearable filterable placeholder="请选择"
style="width: 100%"
v-model="pageForm.evaluateScore">
<el-option
:key="item.code"
:label="item.name"
:value="item.code"
v-for="item in evaluateScores">
</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="评价名单">
<template #func>
<el-button @click="exportEvaluate" size="small" type="primary">导出名单</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
ref="table"
row-key="id" style="width: 100%" v-loading="tableLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:key="column.prop"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
align="center"
header-align="center"
min-width="100px" show-overflow-tooltip
v-for="column in tableColumns">
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
prop="userOnline" width="150px">
<template scope="{row}">
<el-button @click="openEvaluate(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="评分">
<!--<div style="position: absolute; top: 20%;">
<el-rate disabled
show-score text-color="#ff9900"
v-model="viewData.evaluateScore"></el-rate>
</div>-->
<span>{{viewData.evaluateScore}}</span>
</el-form-item>
<el-form-item label="评价">
<!--<el-input disabled
maxlength="100"
placeholder="请输入评价"
rows="5"
show-word-limit
type="textarea"
v-model="viewData.evaluateText"
>
</el-input>-->
<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>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
unions: [],
units: [],
evaluateDialogVisible: false,
lineList: [],
tableColumns: [
{prop: 'lineName', label: '线路'},
{prop: 'playStartTime', label: '出行时间'},
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'unitname', label: '单位'},
{prop: 'unionname', label: '工会'},
{prop: 'userState', label: '在职状态'},
{prop: 'personType', label: '人员类型'},
{prop: 'evaluateScore', label: '评分', sortable: true},
{prop: 'evaluateText', label: '评价'},
],
pageForm: {
searchName: "we.userName",
year: new Date().getFullYear().toString(),
lineId: '',
searchKeyword: '',
unionId: '',
unitId: '',
evaluateScore: '',
},
viewData: {},
evaluateScores: [
{name: "满意", code: "满意"},
{name: "一般", code: "一般"},
{name: "不满意", code: "不满意"},
],
}
},
methods: {
exportEvaluate() {
window.open('/platform/therapyRecuperation/evaluate/statistics/exportEvaluate' +
'?lineId=' + this.pageForm.lineId +
'&searchName=' + this.pageForm.searchName +
'&searchKeyword=' + this.pageForm.searchKeyword +
'&unionId=' + this.pageForm.unionId +
'&unitId=' + this.pageForm.unitId +
'&evaluateScore=' + this.pageForm.evaluateScore)
},
openEvaluate(row) {
this.viewData = {
lineId: row.id,
evaluateText: row.evaluateText,
evaluateScore: row.evaluateScore,
}
this.evaluateDialogVisible = true
},
async getLineList() {
const resp = await $.get('/platform/therapyRecuperation/evaluate/statistics/lineList', {year: this.pageForm.year})
this.lineList = resp.data
},
async yearChange() {
this.$set(this.pageForm, "lineId", null)
await this.getLineList()
this.doSearch()
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.units = await getUnits(this.pageForm.unionId)
}
},
},
async created() {
await this.getLineList()
this.pageData()
this.unions = await getUnions(null, false)
}
})
</script>
<!--#
}
#-->
@@ -50,17 +50,17 @@ layout("/layouts/platform.html"){
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="省外最成团人数(包括家属)" prop="outsideQuota"> <el-form-item label="省外最成团人数" prop="outsideQuota">
<el-input v-model.number="formData.outsideQuota" <el-input v-model.number="formData.outsideQuota"
placeholder="请输入省外最少成团人数(包括家属)"></el-input> placeholder="请输入每条省外线路最多成团人数"></el-input>
</el-form-item> </el-form-item>
<!--<el-form-item label="省外名额分配比例" prop="outsideQuotaProportion"> <el-form-item label="省外名额分配比例" prop="outsideQuotaProportion">
<el-input placeholder="请输入省外名额分配比例" v-model="formData.outsideQuotaProportion"> <el-input placeholder="请输入省外名额分配比例" v-model="formData.outsideQuotaProportion">
<template slot="append">%</template> <template slot="append">%</template>
</el-input> </el-input>
</el-form-item>--> </el-form-item>
<el-form-item label="省外几年去一次" prop="outsideNumber"> <el-form-item label="省外几年去一次" prop="outsideNumber">
@@ -70,22 +70,22 @@ layout("/layouts/platform.html"){
</el-form-item> </el-form-item>
<el-form-item label="每年旅行频率" prop="travelFrequency"> <el-form-item label="每年旅行频率" prop="travelFrequency">
<el-input max="100" <el-input max="100" disabled
placeholder="请输入每年旅行频率" placeholder="请输入每年旅行频率"
v-model.number="formData.travelFrequency"></el-input> v-model.number="formData.travelFrequency"></el-input>
</el-form-item> </el-form-item>
<!--<el-form-item label="最少教工人数" prop="groupNumber"> <el-form-item label="最少教工人数" prop="groupNumber">
<el-input max="100" <el-input max="100"
placeholder="请输入最少教工人数" placeholder="请输入最少教工人数"
v-model.number="formData.groupNumber"></el-input> v-model.number="formData.groupNumber"></el-input>
</el-form-item>--> </el-form-item>
<!--<el-form-item label="不可取消修改天数" prop="modifyDays"> <el-form-item label="不可取消修改天数" prop="modifyDays">
<el-input max="100" <el-input max="100"
placeholder="请输入不可取消修改天数" placeholder="请输入不可取消修改天数"
v-model.number="formData.modifyDays"></el-input> v-model.number="formData.modifyDays"></el-input>
</el-form-item>--> </el-form-item>
<el-form-item label="可以修改几次" prop="modifyNumber"> <el-form-item label="可以修改几次" prop="modifyNumber">
<el-input max="100" <el-input max="100"
@@ -107,13 +107,6 @@ layout("/layouts/platform.html"){
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="旅行社是否需要审核" prop="travelAudit">
<el-radio-group v-model="formData.travelAudit">
<el-radio-button :label="true">需要</el-radio-button>
<el-radio-button :label="false">不需要</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="全批次最多报名人数" prop="allLineSignUpNumber"> <el-form-item label="全批次最多报名人数" prop="allLineSignUpNumber">
<el-input max="100" <el-input max="100"
placeholder="请输入全批次最多报名人数" placeholder="请输入全批次最多报名人数"
@@ -140,6 +133,13 @@ layout("/layouts/platform.html"){
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="承诺书" prop="files">
<file-upload :files.sync="formData.files"
:max="1"
:type="['pdf']"
></file-upload>
</el-form-item>
<vi-title title="标段管理"></vi-title> <vi-title title="标段管理"></vi-title>
<el-form-item label="标段"> <el-form-item label="标段">
<el-button type="primary" @click="formData.lots.push({})" <el-button type="primary" @click="formData.lots.push({})"
@@ -238,7 +238,6 @@ layout("/layouts/platform.html"){
<script> <script>
const vue = new Vue({ const vue = new Vue({
el: '#app', el: '#app',
data() { data() {
return { return {
activityGroupList: [], activityGroupList: [],
@@ -246,7 +245,6 @@ layout("/layouts/platform.html"){
formData: { formData: {
isSnLine: 0, isSnLine: 0,
isSwLine: 0, isSwLine: 0,
travelAudit: 0,
lots: [], lots: [],
configName: '智慧工会疗休养配置', configName: '智慧工会疗休养配置',
outsideQuota: null, outsideQuota: null,
@@ -266,10 +264,9 @@ layout("/layouts/platform.html"){
configName: [{required: true, message: '请填写配置名称', trigger: ['blur', 'change']}], configName: [{required: true, message: '请填写配置名称', trigger: ['blur', 'change']}],
isSnLine: [{required: true, message: '请选择省内线路是否需要审核', trigger: ['blur', 'change']}], isSnLine: [{required: true, message: '请选择省内线路是否需要审核', trigger: ['blur', 'change']}],
isSwLine: [{required: true, message: '请选择省外线路是否需要审核', trigger: ['blur', 'change']}], isSwLine: [{required: true, message: '请选择省外线路是否需要审核', trigger: ['blur', 'change']}],
travelAudit: [{required: true, message: '请选择旅行社是否需要审核', trigger: ['blur', 'change']}],
outsideQuota: [{ outsideQuota: [{
required: true, required: true,
message: '省外最少成团人数(包括家属)', message: '请输入每条省外线路最多成团人数',
trigger: ['blur', 'change'] trigger: ['blur', 'change']
}], }],
outsideNumber: [{ outsideNumber: [{
@@ -323,7 +320,7 @@ layout("/layouts/platform.html"){
} }
}, },
components: { components: {
'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue'), 'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue?v=1.0.1'),
}, },
methods: { methods: {
async deleteLotsRow(scope) { async deleteLotsRow(scope) {
@@ -368,6 +365,9 @@ layout("/layouts/platform.html"){
}) })
const cloneData = clone(this.formData) const cloneData = clone(this.formData)
if (this.formData.files && this.formData.files.length > 0) {
cloneData.files = JSON.stringify(this.formData.files)
}
if (this.lotDeleteList && this.lotDeleteList.length > 0) { if (this.lotDeleteList && this.lotDeleteList.length > 0) {
cloneData.lotDeleteList = JSON.stringify(this.lotDeleteList) cloneData.lotDeleteList = JSON.stringify(this.lotDeleteList)
} }
@@ -396,24 +396,11 @@ layout("/layouts/platform.html"){
data.lots = [] data.lots = []
} }
this.formData = data this.formData = data
this.initLineContentEditor(data.notice)
}, },
async getActivityGroup() { async getActivityGroup() {
const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup') const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
this.activityGroupList = data this.activityGroupList = data
}, },
initLineContentEditor(content) {
$("#lineContent").html("")
lineContentEditor = new wangEditor("#lineContent")
lineContentEditor.config.onchange = (html) => {
this.formData.notice = html.replace(/<p\><\/p>/g, '')
}
lineContentEditor.config.uploadImgShowBase64 = true
lineContentEditor.create()
if (content) {
lineContentEditor.txt.html(content)
}
},
async closeDialog() { async closeDialog() {
this.tableScopeIndex = ''; this.tableScopeIndex = '';
this.tableScopeId = ''; this.tableScopeId = '';
@@ -441,7 +428,6 @@ layout("/layouts/platform.html"){
}, },
async created() { async created() {
this.findOne(); this.findOne();
this.initLineContentEditor();
}, },
watch: { watch: {
'formData.activityGroupId': { 'formData.activityGroupId': {