This commit is contained in:
Paidax
2024-07-25 18:41:32 +08:00
parent 3270efcdc6
commit a82c0f6f1a
21 changed files with 416 additions and 235 deletions
@@ -13,8 +13,10 @@ import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
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.json.Json;
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.Param; import org.nutz.mvc.annotation.Param;
import java.util.List; import java.util.List;
@@ -26,7 +28,7 @@ import java.util.List;
*/ */
@Slf4j @Slf4j
@IocBean @IocBean
@At("/platform/trainSingUp/manage/activity/add") @At("/platform/trainSingUp/manage/activity")
public class TrainSignUpActivityAddController { public class TrainSignUpActivityAddController {
@Inject @Inject
@@ -35,12 +37,27 @@ public class TrainSignUpActivityAddController {
@Inject @Inject
private Dao dao; private Dao dao;
@At("") @At("/add")
@RequiresPermissions("trainSingUp.manage.activity.add") @RequiresPermissions("trainSingUp.manage.activity.add")
@Ok("beetl:/platform/trainSingUp/manage/activity_add.html") @Ok("beetl:/platform/trainSingUp/manage/activity_add.html")
public void add() { public void add() {
} }
@At
@ViReturn
@Ok("json:full")
@POST
@RequiresPermissions("trainSingUp.manage.activity.add")
public Object doHandle(@Param(value = "data", required = false) String data) {
TrainSignUpActivity activity = Json.fromJson(TrainSignUpActivity.class, data);
if (StrUtil.isBlank(activity.getId())) {
trainSignUpActivityManageService.add(activity, null);
} else {
trainSignUpActivityManageService.edit(activity);
}
return null;
}
@At @At
@ViReturn @ViReturn
@Ok("json:full") @Ok("json:full")
@@ -6,7 +6,6 @@ import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_dict; import io.v.nutz.sys.models.Sys_dict;
import io.v.nutz.sys.services.SysDictService; import io.v.nutz.sys.services.SysDictService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivityCourse; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivityCourse;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType;
@@ -57,19 +56,16 @@ public class TrainSignUpActivityApplyController {
public Object activityData(@Param(value = "year", required = false) Integer year, public Object activityData(@Param(value = "year", required = false) Integer year,
@Param(value = "activityType", required = false) Integer activityType) { @Param(value = "activityType", required = false) Integer activityType) {
CndPlus cnd = CndPlus.create(); CndPlus cnd = CndPlus.create();
cnd.and("isDisabled", "=", false);
cnd.andEX("`year`", "=", year); cnd.andEX("`year`", "=", year);
//查询报名中 //查询报名中
if (activityType == 2) { if (activityType == 2) {
cnd.and(new Static("now() > activitySignUpStartTime and now() < activitySignUpEndTime")); cnd.and(new Static("now() > activitySignUpStartTime and now() < activitySignUpEndTime"));
}//查询已结束的 }//查询已结束的
else if (activityType == 3) { else if (activityType == 3) {
cnd.and(new Static("now() > activityEndTime")); cnd.and(new Static("now() > activitySignUpEndTime"));
} }
cnd.desc("activityStartTime");
if(ShiroUtil.hasRole("H04") && !ShiroUtil.hasAnyRoles("sysadmin, A06")) {
cnd.and("activityMode", "=", 2).and("opBy", "=", ShiroUtil.getPlatformUid());
}
List<TrainSignUpActivity> trainSignUpActivities = trainSignUpActivityService.query(cnd); List<TrainSignUpActivity> trainSignUpActivities = trainSignUpActivityService.query(cnd);
Map<String, String> trainSignUpTypeMap = dictService.getSubListByCode("trainSignUpType").stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName)); Map<String, String> trainSignUpTypeMap = dictService.getSubListByCode("trainSignUpType").stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
trainSignUpActivities.forEach(v->v.setTrainType(trainSignUpTypeMap.get(v.getTrainType()))); trainSignUpActivities.forEach(v->v.setTrainType(trainSignUpTypeMap.get(v.getTrainType())));
@@ -112,7 +108,7 @@ public class TrainSignUpActivityApplyController {
CndPlus cnd = CndPlus.create(); CndPlus cnd = CndPlus.create();
cnd.andEX("type.id","=",courseTypeId); cnd.andEX("type.id","=",courseTypeId);
cnd.and("tsuc.activityId","=",activityId); cnd.and("tsuc.activityId","=",activityId);
cnd.asc("tsuc.orderNum"); cnd.asc("type.code");
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination pagination = trainSignUpActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination pagination = trainSignUpActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -125,7 +121,9 @@ public class TrainSignUpActivityApplyController {
AtomicInteger hasRegisterNum = new AtomicInteger(); AtomicInteger hasRegisterNum = new AtomicInteger();
List<TrainSignUpUser> signUpUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getString("id"))); List<TrainSignUpUser> signUpUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getString("id")));
signUpUsers.forEach(item -> { signUpUsers.forEach(item -> {
hasRegisterNum.getAndIncrement(); if(type.getSelfAddFamily()) {
hasRegisterNum.getAndIncrement();
}
if(type.getIsBringFamily() && type.getIsAddFamily()) { if(type.getIsBringFamily() && type.getIsAddFamily()) {
List<NutMap> mapList = item.getMobileColumnsValue(); List<NutMap> mapList = item.getMobileColumnsValue();
if(Lang.isNotEmpty(mapList)) { if(Lang.isNotEmpty(mapList)) {
@@ -138,7 +136,7 @@ public class TrainSignUpActivityApplyController {
}); });
c.put("hasRegisterNum",hasRegisterNum.get()); c.put("hasRegisterNum",hasRegisterNum.get());
//当前用户是否报过 //当前用户是否报过
c.put("isSign",trainSignUpActivityService.isSignCourseByUser(c.getString("id"), (String) ShiroUtil.getPrincipalProperty("id"))); c.put("isSign",trainSignUpActivityService.isSignCourseByUser(c.getString("id"), (String) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("id")));
}); });
return pagination; return pagination;
} }
@@ -2,12 +2,11 @@ package io.v.nutz.zhgh.trainSignUp.controller.manage;
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.utils.DateUtil;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.model.MatchConditionStructure; import io.v.nutz.zhgh.data.model.MatchConditionStructure;
import io.v.nutz.zhgh.data.service.MatchConditionStructureService; import io.v.nutz.zhgh.data.service.MatchConditionStructureService;
import io.v.nutz.zhgh.mobileHome.service.MobileHomeService;
import io.v.nutz.zhgh.trainSignUp.models.*; import io.v.nutz.zhgh.trainSignUp.models.*;
import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -44,7 +43,6 @@ public class TrainSignUpActivityController {
@Inject @Inject
private MatchConditionStructureService matchConditionStructureService; private MatchConditionStructureService matchConditionStructureService;
@Inject @Inject
private Dao dao; private Dao dao;
@@ -76,7 +74,6 @@ public class TrainSignUpActivityController {
@RequiresPermissions("trainSingUp.manage.activity") @RequiresPermissions("trainSingUp.manage.activity")
public Object doDelete(String id) { public Object doDelete(String id) {
Trans.exec(() -> { Trans.exec(() -> {
TrainSignUpActivity activity = trainSignUpActivityManageService.fetch(id);
trainSignUpActivityManageService.delete(id); trainSignUpActivityManageService.delete(id);
dao.clear(TrainSignUpCourse.class, Cnd.where("activityId", "=", id)); dao.clear(TrainSignUpCourse.class, Cnd.where("activityId", "=", id));
dao.clear(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", id)); dao.clear(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", id));
@@ -93,13 +90,9 @@ public class TrainSignUpActivityController {
@Ok("json:full") @Ok("json:full")
@POST @POST
@RequiresPermissions("trainSingUp.manage.activity") @RequiresPermissions("trainSingUp.manage.activity")
public Object doHandle(@Param("data") String data, @Param("flag") Boolean flag) { public Object doHandle(@Param("data") String data) {
TrainSignUpActivity activity = Json.fromJson(TrainSignUpActivity.class, data); TrainSignUpActivity activity = Json.fromJson(TrainSignUpActivity.class, data);
activity.setActivityMode(ShiroUtil.hasAnyRoles("sysadmin, A06") ? 1 : 2);
activity.setDisabled(!flag);
if (StrUtil.isBlank(activity.getId())) { if (StrUtil.isBlank(activity.getId())) {
activity.setOpBy(ShiroUtil.getPlatformUid());
trainSignUpActivityManageService.add(activity, null); trainSignUpActivityManageService.add(activity, null);
} else { } else {
trainSignUpActivityManageService.edit(activity); trainSignUpActivityManageService.edit(activity);
@@ -3,11 +3,11 @@ package io.v.nutz.zhgh.trainSignUp.controller.manage;
import cn.hutool.core.util.EnumUtil; import cn.hutool.core.util.EnumUtil;
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.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.PageUtil; import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.zhgh.trainSignUp.models.TrainMobileSignColumn; import io.v.nutz.zhgh.trainSignUp.models.TrainMobileSignColumn;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -11,8 +11,8 @@ import cn.hutool.core.date.DateUtil;
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.service.BaseService;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.utils.ViTool; import io.v.nutz.base.utils.ViTool;
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;
@@ -226,10 +226,10 @@ public class TrainSignUpUserAdjustController {
TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, activityId); TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, activityId);
if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { /*if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) {
return Result.error("报名未开始"); return Result.error("报名未开始");
} }
/*if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) {
return Result.error("报名已结束"); return Result.error("报名已结束");
}*/ }*/
@@ -244,11 +244,11 @@ public class TrainSignUpUserAdjustController {
for (SignUser sign : signUser) { for (SignUser sign : signUser) {
Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", sign.getLoginname())); Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", sign.getLoginname()));
if(sysUser != null) { if(sysUser != null) {
if(!isSingle && courseMap.get(sign.getCourseName()) == null) { /*if(!isSingle && courseMap.get(sign.getCourseName()) == null) {
sign.setErrMsg("分活动/培训班名称有误"); sign.setErrMsg("分活动/培训班名称有误");
continue; continue;
} }*/
String courseId = isSingle ? importCourseId : courseMap.get(sign.getCourseName()); String courseId = importCourseId;
/*if(StrUtil.isNotBlank(course.getConditionStructureId())) { /*if(StrUtil.isNotBlank(course.getConditionStructureId())) {
NutMap nutMap = trainSignUpActivityService.validConditionStructure(course.getConditionStructureId()); NutMap nutMap = trainSignUpActivityService.validConditionStructure(course.getConditionStructureId());
if(!nutMap.getBoolean("flag")) { if(!nutMap.getBoolean("flag")) {
@@ -290,7 +290,7 @@ public class TrainSignUpUserAdjustController {
Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", item.getLoginname())); Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", item.getLoginname()));
TrainSignUpUser trainSignUpUser = new TrainSignUpUser(); TrainSignUpUser trainSignUpUser = new TrainSignUpUser();
trainSignUpUser.setActivityId(activityId); trainSignUpUser.setActivityId(activityId);
trainSignUpUser.setCourseId(isSingle ? importCourseId : courseMap.get(item.getCourseName())); trainSignUpUser.setCourseId(importCourseId);
trainSignUpUser.setUserId(sysUser.getId()); trainSignUpUser.setUserId(sysUser.getId());
trainSignUpUser.setMobile(sysUser.getMobile()); trainSignUpUser.setMobile(sysUser.getMobile());
trainSignUpUser.setSignUpTime(new Date()); trainSignUpUser.setSignUpTime(new Date());
@@ -6,9 +6,8 @@ import cn.afterturn.easypoi.excel.export.ExcelExportService;
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.utils.PageUtil;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.base.utils.PageUtil;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpCourse; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpCourse;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser;
@@ -71,9 +70,6 @@ public class TrainSignUpUserBlackListManage {
cnd.andEX("tsuu.activityId", "=", activityId); cnd.andEX("tsuu.activityId", "=", activityId);
cnd.andEX("tsuu.courseId", "=", courseId); cnd.andEX("tsuu.courseId", "=", courseId);
cnd.andEX("act.year", "=", year); cnd.andEX("act.year", "=", year);
if(ShiroUtil.hasRole("H04") && !ShiroUtil.hasAnyRoles("sysadmin, A06")) {
cnd.and("activityMode", "=", 2).and("act.opBy", "=", ShiroUtil.getPlatformUid());
}
if (StrUtil.isNotBlank(userKeyWord)) { if (StrUtil.isNotBlank(userKeyWord)) {
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
cnd.and(seg.andLike("u.username", userKeyWord).orLike("u.loginname", userKeyWord)); cnd.and(seg.andLike("u.username", userKeyWord).orLike("u.loginname", userKeyWord));
@@ -81,6 +77,7 @@ public class TrainSignUpUserBlackListManage {
if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){ if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} }
return trainSignUpBlackListService.pageData(pageForm, cnd, activityId, courseId); return trainSignUpBlackListService.pageData(pageForm, cnd, activityId, courseId);
} }
@@ -7,10 +7,7 @@ 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.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.service.MatchConditionStructureService; import io.v.nutz.zhgh.data.service.MatchConditionStructureService;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity; import io.v.nutz.zhgh.trainSignUp.models.*;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpCourse;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUserCourse;
import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Chain; import org.nutz.dao.Chain;
@@ -22,8 +19,7 @@ import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.*; import org.nutz.mvc.annotation.*;
import java.util.Date; import java.util.*;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -105,6 +101,36 @@ public class MTrainSignUpActivityController {
public Object doSignUp(TrainSignUpUser trainSignUpUser) { public Object doSignUp(TrainSignUpUser trainSignUpUser) {
try { try {
lock.lock(); lock.lock();
boolean courseByUser = trainSignUpActivityService.isSignCourseByUser(trainSignUpUser.getCourseId(), ShiroUtil.getPlatformUid());
if(courseByUser) {
return Result.error("您已报过该活动");
}
//判断人数
int number = 0;
TrainSignUpCourse course = trainSignUpActivityService.dao().fetch(TrainSignUpCourse.class, trainSignUpUser.getCourseId());
TrainSignUpType type = trainSignUpActivityService.dao().fetch(TrainSignUpType.class, course.getCourseType());
if(type != null) {
if(type.getIsBringFamily() && type.getIsAddFamily()) {
List<NutMap> mobileColumnsValue = trainSignUpUser.getMobileColumnsValue();
NutMap map = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null);
number = map != null ? map.getInt("columnValue") : 0;
}
}
boolean signFull = trainSignUpActivityService.isSignFull(trainSignUpUser.getCourseId(), number);
if(signFull) {
return Result.error("当前报名人数已满");
}
boolean signFullByUnionId = trainSignUpActivityService.isSignFullByUnionId(trainSignUpUser.getCourseId(), number);
if(signFullByUnionId) {
return Result.error("该活动您所在的分工会名额已报满");
}
TrainSignUpActivity activity = trainSignUpActivityService.fetch(trainSignUpUser.getActivityId());
Map<Boolean, String> childNumber = this.getChildNumber(activity, trainSignUpUser);
if (childNumber.containsKey(false)) {
return Result.error(childNumber.get(false));
}
trainSignUpActivityService.doSignUp(trainSignUpUser); trainSignUpActivityService.doSignUp(trainSignUpUser);
return Result.success("报名成功"); return Result.success("报名成功");
} catch (Exception e) { } catch (Exception e) {
@@ -204,7 +230,7 @@ public class MTrainSignUpActivityController {
return Result.error("报名未开始"); return Result.error("报名未开始");
} }
if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) {
return Result.error("报名已结束"); return Result.error("报名已结束,请致电校工会咨询,联系电话:85913629");
} }
if(StrUtil.isNotBlank(cndId)) { if(StrUtil.isNotBlank(cndId)) {
NutMap nutMap = trainSignUpActivityService.validConditionStructure(cndId); NutMap nutMap = trainSignUpActivityService.validConditionStructure(cndId);
@@ -233,6 +259,12 @@ public class MTrainSignUpActivityController {
if(signFullByUnionId) { if(signFullByUnionId) {
return Result.error("该活动您所在的分工会名额已报满"); return Result.error("该活动您所在的分工会名额已报满");
} }
Map<Boolean, String> childNumber = this.getChildNumber(activity, null);
if (childNumber.containsKey(false)) {
return Result.error(childNumber.get(false));
}
if(course.getReserveMode() == 2 && currentFamilyNumber == null) { if(course.getReserveMode() == 2 && currentFamilyNumber == null) {
//课程已报人数 //课程已报人数
List<TrainSignUpUser> signUpUsers = dao.query(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId)); List<TrainSignUpUser> signUpUsers = dao.query(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId));
@@ -250,6 +282,62 @@ public class MTrainSignUpActivityController {
} }
} }
private Map<Boolean, String> getChildNumber(TrainSignUpActivity activity, TrainSignUpUser trainSignUpUser) {
//临时活动的逻辑
List<String> stringList = List.of("06aaf4fd9db94bf9be2a27a1ab486a20", "6faec5acb6264bb6a4395aee03804269", "f9c532d86c89474f9d61c8374539e521");
if(stringList.contains(activity.getId())) {
List<TrainSignUpUser> upUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class,
Cnd.where("activityId", "in", stringList)
.and("userId", "=", ShiroUtil.getPlatformUid()));
if(upUsers.size() >= 2) {
return Map.of(false, "江小娃系列活动只能报2个班");
}
//孩子数量
List<NutMap> childList = upUsers.stream()
.flatMap(o -> o.getMobileColumnsValue().stream())
.collect(Collectors.toList());
long count = childList.stream().filter(o -> o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))).count();
if(trainSignUpUser != null) {
//获取当前填写的孩子数量
List<NutMap> mobileColumnsValue = trainSignUpUser.getMobileColumnsValue();
//判断孩子姓名有没有重复
List<String> hasSignName = new ArrayList<>();
childList.forEach(o -> {
if(o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))) {
hasSignName.add(o.getString("columnValue"));
}
});
List<String> currentSignName = mobileColumnsValue.stream().map(o -> {
if (o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))) {
return o.getString("columnValue");
} else {
return "";
}
}).filter(StrUtil::isNotBlank).collect(Collectors.toList());
boolean hasDuplicates = new HashSet<>(currentSignName).size() < currentSignName.size();
if(hasDuplicates) {
return Map.of(false, "孩子姓名不能重复");
}
for (String o : currentSignName) {
if(hasSignName.contains(o)) {
return Map.of(false, "不能报名,【" + o + "】已经在其他年级组报名了");
}
}
long currentChild = mobileColumnsValue.stream().filter(o -> o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))).count();
count += currentChild;
}
if(count > 2) {
return Map.of(false, "江小娃系列活动只能上报2个孩子");
}
}
return Map.of(true, "");
}
@At @At
@Ok("json:full") @Ok("json:full")
@ViReturn @ViReturn
@@ -111,6 +111,14 @@ public class TrainSignUpActivityStatisticsController {
return trainSignUpActivityStatisticsService.registerUserList(courseId); return trainSignUpActivityStatisticsService.registerUserList(courseId);
} }
@At
@ViReturn
@Ok("json:full")
@RequiresPermissions("trainSingUp.statistics.activity")
public Object getTaleColumnInfo(@Param(value = "courseId") String courseId) {
return trainSignUpActivityStatisticsService.getTaleColumnInfo(courseId);
}
/** /**
* 培训班上课签到信息 * 培训班上课签到信息
* *
@@ -194,7 +202,7 @@ public class TrainSignUpActivityStatisticsController {
TrainSignUpCourse course = courseMap.get(k); TrainSignUpCourse course = courseMap.get(k);
//查询课程类型 //查询课程类型
TrainSignUpType trainSignUpType = dao.fetch(TrainSignUpType.class, Cnd.where("id", "=", course.getCourseType())); TrainSignUpType trainSignUpType = dao.fetch(TrainSignUpType.class, Cnd.where("id", "=", course.getCourseType()));
dao.fetchLinks(trainSignUpType, "^trainMobileSignColumnList$"); dao.fetchLinks(trainSignUpType, "^trainMobileSignColumnList$", Cnd.NEW().asc("columnIndex"));
ExcelExportService service = new ExcelExportService(); ExcelExportService service = new ExcelExportService();
ExportParams userExportParams = new ExportParams(); ExportParams userExportParams = new ExportParams();
@@ -1,6 +1,7 @@
package io.v.nutz.zhgh.trainSignUp.models; package io.v.nutz.zhgh.trainSignUp.models;
import cn.wizzer.framework.base.model.BaseModel; import cn.wizzer.framework.base.model.BaseModel;
import io.v.nutz.sys.models.Sys_file;
import io.v.nutz.zhgh.data.model.MatchConditionStructure; import io.v.nutz.zhgh.data.model.MatchConditionStructure;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -76,14 +77,14 @@ public class TrainSignUpActivity extends BaseModel implements Serializable {
private Integer limitNum; private Integer limitNum;
@Column @Column
@ColDefine(type = ColType.VARCHAR, width = 50) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("活动封面") @Comment("活动封面")
private String cover; private Sys_file cover;
@Column @Column
@ColDefine(type = ColType.VARCHAR, width = 50) @ColDefine(type = ColType.MYSQL_JSON)
@Comment("微信群二维码") @Comment("微信群二维码")
private String wechat; private Sys_file wechat;
@Column @Column
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
@@ -127,21 +128,4 @@ public class TrainSignUpActivity extends BaseModel implements Serializable {
@Comment("活动类型") @Comment("活动类型")
@Default("1") @Default("1")
private Integer activityMode; private Integer activityMode;
@Column
@ColDefine(type = ColType.INT, width = 10)
@Comment("是否推送移动端(0.不推送,1.推送活动列表,2.推送大图)")
@Default("0")
private Integer pushHome;
@Column
@Comment("任务id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String taskId;
@Column
@Comment("是否启用积分系统")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isIntegral;
} }
@@ -50,6 +50,12 @@ public class TrainSignUpType extends BaseModel implements Serializable {
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
private Boolean isAddFamily; private Boolean isAddFamily;
@Column
@Comment("本人纳入总人数")
@ColDefine(type = ColType.BOOLEAN)
@Default("1")
private Boolean selfAddFamily;
@Many(field = "typeId") @Many(field = "typeId")
private List<TrainMobileSignColumn> trainMobileSignColumnList; private List<TrainMobileSignColumn> trainMobileSignColumnList;
} }
@@ -33,6 +33,8 @@ public interface TrainSignUpActivityStatisticsService extends ViService<TrainSig
*/ */
List<NutMap> registerUserList(String courseId); List<NutMap> registerUserList(String courseId);
List<NutMap> getTaleColumnInfo(String courseId);
/** /**
* 该课程下的报名人员信息 * 该课程下的报名人员信息
* *
@@ -1,12 +1,10 @@
package io.v.nutz.zhgh.trainSignUp.service.impl; package io.v.nutz.zhgh.trainSignUp.service.impl;
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.service.impl.ViServiceImpl;
import io.v.nutz.base.utils.MsgApi;
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.utils.Vi;
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.data.constant.ConditionalOperational; import io.v.nutz.zhgh.data.constant.ConditionalOperational;
@@ -57,9 +55,6 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
@Inject @Inject
private MatchConditionStructureService matchConditionStructureService; private MatchConditionStructureService matchConditionStructureService;
@Inject
private MsgApi msgApi;
@Override @Override
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public void add(TrainSignUpActivity activity, TrainSignUpCourse course) { public void add(TrainSignUpActivity activity, TrainSignUpCourse course) {
@@ -69,7 +64,6 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
activity.setConditionStructureId(null); activity.setConditionStructureId(null);
activity.setConditionStructure(null); activity.setConditionStructure(null);
} }
dao().insert(activity); dao().insert(activity);
List<TrainSignUpCourse> courseList = activity.getCourseList(); List<TrainSignUpCourse> courseList = activity.getCourseList();
courseList.forEach(v -> { courseList.forEach(v -> {
@@ -132,6 +126,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
//原来的上课时间 //原来的上课时间
List<TrainSignUpActivityCourse> oldActCourseTimeList = dao().query(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", activity.getId())); List<TrainSignUpActivityCourse> oldActCourseTimeList = dao().query(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", activity.getId()));
update(activity); update(activity);
List<TrainSignUpTypeLimit> typeLimits = activity.getTypeLimits(); List<TrainSignUpTypeLimit> typeLimits = activity.getTypeLimits();
@@ -154,7 +149,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
dao().insertOrUpdate(v); dao().insertOrUpdate(v);
List<TrainSignUpActivityCourse> courseTimeList = v.getCourseTimeList(); List<TrainSignUpActivityCourse> courseTimeList = v.getCourseTimeList();
if (courseTimeList != null) { if(courseTimeList != null) {
courseTimeList.forEach(x -> { courseTimeList.forEach(x -> {
x.setActivityId(activity.getId()); x.setActivityId(activity.getId());
x.setCourseId(v.getId()); x.setCourseId(v.getId());
@@ -184,7 +179,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
//现在的上课时间 //现在的上课时间
List<String> nowCourseTimeListId = new ArrayList<>(); List<String> nowCourseTimeListId = new ArrayList<>();
activity.getCourseList().stream().forEach(v -> { activity.getCourseList().stream().forEach(v -> {
if (v.getCourseTimeList() != null) { if(v.getCourseTimeList() != null) {
nowCourseTimeListId.addAll(v.getCourseTimeList().stream().map(x -> x.getId()).collect(Collectors.toList())); nowCourseTimeListId.addAll(v.getCourseTimeList().stream().map(x -> x.getId()).collect(Collectors.toList()));
} }
}); });
@@ -251,26 +246,30 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
List<TrainSignUpCourse> courseList = activity.getCourseList(); List<TrainSignUpCourse> courseList = activity.getCourseList();
courseList.forEach(c -> { courseList.forEach(c -> {
TrainSignUpType type = dao().fetch(TrainSignUpType.class, StrUtil.isNotBlank(c.getCourseType()) ? c.getCourseType() : ""); if(StrUtil.isNotBlank(c.getCourseType())) {
dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime")); TrainSignUpType type = dao().fetch(TrainSignUpType.class, c.getCourseType());
//已报人数 dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime"));
AtomicInteger hasRegisterNum = new AtomicInteger(); //已报人数
List<TrainSignUpUser> signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getId())); AtomicInteger hasRegisterNum = new AtomicInteger();
signUpUsers.forEach(item -> { List<TrainSignUpUser> signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getId()));
hasRegisterNum.getAndIncrement(); signUpUsers.forEach(item -> {
if (type.getIsBringFamily() && type.getIsAddFamily()) { if(type.getSelfAddFamily()) {
List<NutMap> mapList = item.getMobileColumnsValue(); hasRegisterNum.getAndIncrement();
if (Lang.isNotEmpty(mapList)) { }
NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); if(type.getIsBringFamily() && type.getIsAddFamily()) {
if (nutMap != null) { List<NutMap> mapList = item.getMobileColumnsValue();
hasRegisterNum.addAndGet(nutMap.getInt("columnValue")); if(Lang.isNotEmpty(mapList)) {
NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null);
if(nutMap != null) {
hasRegisterNum.addAndGet(nutMap.getInt("columnValue"));
}
} }
} }
} });
}); c.setHasRegisterNum(hasRegisterNum.get());
c.setHasRegisterNum(hasRegisterNum.get()); //当前用户是否报过
//当前用户是否报过 c.setIsSign(isSignCourseByUser(c.getId(), (String) ShiroUtil.getPrincipalProperty("id")));
c.setIsSign(isSignCourseByUser(c.getId(), (String) ShiroUtil.getPrincipalProperty("id"))); }
}); });
return Lang.obj2nutmap(activity); return Lang.obj2nutmap(activity);
} }
@@ -304,10 +303,10 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
// case 3 -> cnd.and(new Static(" ((activityEndTime > '%s' and activityStartTime < '%s') or (activitySignUpEndTime > '%s' and activitySignUpStartTime < '%s'))" // case 3 -> cnd.and(new Static(" ((activityEndTime > '%s' and activityStartTime < '%s') or (activitySignUpEndTime > '%s' and activitySignUpStartTime < '%s'))"
// .formatted(dateTime, dateTime, dateTime, dateTime))); // .formatted(dateTime, dateTime, dateTime, dateTime)));
} }
if ("my".equals(type)) { if("my".equals(type)) {
cnd.and(new Static("id in (select activityId from train_sign_up_user where userId = '%s')".formatted(ShiroUtil.getPrincipalProperty("id")))); cnd.and(new Static("id in (select activityId from train_sign_up_user where userId = '%s')".formatted(ShiroUtil.getPrincipalProperty("id"))));
} }
cnd.and("isDisabled", "=", 0); cnd.and("isDisabled","=",0);
cnd.orderBy("activityEndTime", "desc"); cnd.orderBy("activityEndTime", "desc");
cnd.orderBy("isDisabled", "desc"); cnd.orderBy("isDisabled", "desc");
Pagination pagination = listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); Pagination pagination = listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
@@ -326,19 +325,17 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
@Override @Override
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public void doSignUp(TrainSignUpUser trainSignUpUser) throws Exception { public void doSignUp(TrainSignUpUser trainSignUpUser) throws Exception {
String userId = (String) ShiroUtil.getPrincipalProperty("id");
//查询课程 //查询课程
TrainSignUpCourse course = dao().fetch(TrainSignUpCourse.class, trainSignUpUser.getCourseId()); TrainSignUpCourse course = dao().fetch(TrainSignUpCourse.class, trainSignUpUser.getCourseId());
//查询活动
TrainSignUpActivity activity = dao().fetch(TrainSignUpActivity.class, Cnd.where("id", "=", course.getActivityId()));
//如果这个课程的预留名额方式为报名人数不变 //如果这个课程的预留名额方式为报名人数不变
if (course.getReserveMode() == 2) { if(course.getReserveMode() == 2) {
//如果当前报名+已报小于这个课程限制人数 //如果当前报名+已报小于这个课程限制人数
//课程已报人数 //课程已报人数
List<TrainSignUpUser> signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", trainSignUpUser.getCourseId())); List<TrainSignUpUser> signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", trainSignUpUser.getCourseId()));
int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己 int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己
if (hasRegisterNum > course.getCoursePeopleNumber()) { if(hasRegisterNum > course.getCoursePeopleNumber()) {
trainSignUpUser.setState(2); trainSignUpUser.setState(2);
} else { } else {
trainSignUpUser.setState(1); trainSignUpUser.setState(1);
@@ -348,17 +345,12 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
} }
if(StrUtil.isBlank(trainSignUpUser.getUserId())) { if(StrUtil.isBlank(trainSignUpUser.getUserId())) {
trainSignUpUser.setUserId((String) ShiroUtil.getPrincipalProperty("id")); trainSignUpUser.setUserId(userId);
} }
trainSignUpUser.setSignUpTime(new Date()); trainSignUpUser.setSignUpTime(new Date());
dao().insert(trainSignUpUser); dao().insert(trainSignUpUser);
asyncInsertUserCourse(trainSignUpUser.getActivityId(), trainSignUpUser.getCourseId(), trainSignUpUser.getUserId()); asyncInsertUserCourse(trainSignUpUser.getActivityId(), trainSignUpUser.getCourseId(), userId);
String username = ShiroUtil.getPlatformUsername();
String description = username + "老师您好,您已成功报名(" + activity.getActivityName() + course.getCourseName() +"),请您按时参加";
// msgApi.sendWxMsg("活动报名通知", "", "text", description, List.of(ShiroUtil.getPlatformLoginname()), null);
// msgApi.sendWxMsg("");
} }
@Async @Async
@@ -419,18 +411,18 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
sql.setCondition(cnd); sql.setCondition(cnd);
//已经报名人数,这是教职工的 //已经报名人数,这是教职工的
List<NutMap> signUpUsers = listMap(sql); List<NutMap> signUpUsers = listMap(sql);
int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己 int hasRegisterNum = signUpType.getSelfAddFamily() ? signUpUsers.size() + 1 : 0;//+1是算自己
//课程已报人数(携带的家属) //课程已报人数(携带的家属)
int hasFamilyNum = 0; int hasFamilyNum = 0;
//如果携带家属,并且纳入人数,则mdzz //如果携带家属,并且纳入人数,则mdzz
if (signUpType.getIsAddFamily() && signUpType.getIsBringFamily()) { if(signUpType.getIsAddFamily() && signUpType.getIsBringFamily()) {
//如果携带家属,已报人数=教职工+每个教职工携带的家属 //如果携带家属,已报人数=教职工+每个教职工携带的家属
AtomicInteger num = new AtomicInteger(); AtomicInteger num = new AtomicInteger();
signUpUsers.forEach(item -> { signUpUsers.forEach(item -> {
List<NutMap> mapList = item.getAsList("", NutMap.class); List<NutMap> mapList = item.getAsList("", NutMap.class);
if (Lang.isNotEmpty(mapList)) { if(Lang.isNotEmpty(mapList)) {
NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null);
if (nutMap != null) { if(nutMap != null) {
num.addAndGet(nutMap.getInt("columnValue")); num.addAndGet(nutMap.getInt("columnValue"));
} }
} }
@@ -451,17 +443,18 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
int coursePeopleNumber = course.getCoursePeopleNumber(); int coursePeopleNumber = course.getCoursePeopleNumber();
//课程已报人数 //课程已报人数
List<TrainSignUpUser> signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId)); List<TrainSignUpUser> signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId));
int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己 //如果本人纳入总人数,则正常,但是如果不纳入,统计报名人数的时候就不算
int hasRegisterNum = type.getSelfAddFamily() ? signUpUsers.size() + 1 : 0;//+1是算自己
//课程已报人数(携带的家属) //课程已报人数(携带的家属)
int hasFamilyNum = 0; int hasFamilyNum = 0;
//如果这个类型携带家属并且计入总人数 //如果这个类型携带家属并且计入总人数
if (type.getIsBringFamily() && type.getIsAddFamily()) { if(type.getIsBringFamily() && type.getIsAddFamily()) {
AtomicInteger num = new AtomicInteger(); AtomicInteger num = new AtomicInteger();
signUpUsers.forEach(item -> { signUpUsers.forEach(item -> {
List<NutMap> mapList = item.getMobileColumnsValue(); List<NutMap> mapList = item.getMobileColumnsValue();
if (Lang.isNotEmpty(mapList)) { if(Lang.isNotEmpty(mapList)) {
NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null);
if (nutMap != null) { if(nutMap != null) {
num.addAndGet(nutMap.getInt("columnValue")); num.addAndGet(nutMap.getInt("columnValue"));
} }
} }
@@ -469,10 +462,10 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
hasFamilyNum = num.get() + (currentFamilyNumber != null ? currentFamilyNumber : 0);//currentFamilyNumber是当前报名时填的家属人数 hasFamilyNum = num.get() + (currentFamilyNumber != null ? currentFamilyNumber : 0);//currentFamilyNumber是当前报名时填的家属人数
} }
//如果预留名额模式是报名人数减少 //如果预留名额模式是报名人数减少
if (course.getReserveMode() == 1) { if(course.getReserveMode() == 1) {
//如果已报人数+预留人数+当前报名(自己)+家属 > 总人数 //如果已报人数+预留人数+当前报名(自己)+家属 > 总人数
return (hasRegisterNum + course.getCourseReservedNumber() + hasFamilyNum) > coursePeopleNumber; return (hasRegisterNum + course.getCourseReservedNumber() + hasFamilyNum) > coursePeopleNumber;
} else {//如果预留名额模式是报名人数不变 }else {//如果预留名额模式是报名人数不变
//如果已报人数+当前报名(自己)+家属 > 总人数+预留人数 //如果已报人数+当前报名(自己)+家属 > 总人数+预留人数
return (hasRegisterNum + hasFamilyNum) > (coursePeopleNumber + course.getCourseReservedNumber()); return (hasRegisterNum + hasFamilyNum) > (coursePeopleNumber + course.getCourseReservedNumber());
} }
@@ -506,7 +499,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
return true; return true;
} else if (activity.getRestrictLimit() == 2) { } else if (activity.getRestrictLimit() == 2) {
TrainSignUpTypeLimit trainSignUpTypeLimit = dao().fetch(TrainSignUpTypeLimit.class, Cnd.where("typeId", "=", courseType).and("activityId", "=", activityId)); TrainSignUpTypeLimit trainSignUpTypeLimit = dao().fetch(TrainSignUpTypeLimit.class, Cnd.where("typeId", "=", courseType).and("activityId", "=", activityId));
if (trainSignUpTypeLimit == null) { if(trainSignUpTypeLimit == null) {
return true; return true;
} }
//此类型的班最多可报几项 //此类型的班最多可报几项
@@ -1,23 +1,31 @@
package io.v.nutz.zhgh.trainSignUp.service.impl; package io.v.nutz.zhgh.trainSignUp.service.impl;
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.dao.CndPlus; import io.v.nutz.base.dao.CndPlus;
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.trainSignUp.models.TrainMobileSignColumn;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpCourse;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser;
import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityStatisticsService; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityStatisticsService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -42,6 +50,9 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
tsuc.coursePeopleNumber, tsuc.coursePeopleNumber,
tsuc.courseReservedNumber, tsuc.courseReservedNumber,
type.lxname as courseType, type.lxname as courseType,
type.isBringFamily,
type.isAddFamily,
type.selfAddFamily,
tsuc.courseLocation, tsuc.courseLocation,
tsuc.courseInstructor, tsuc.courseInstructor,
tsuc.reserveMode, tsuc.reserveMode,
@@ -56,7 +67,32 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
ORDER BY tsuc.orderNum ORDER BY tsuc.orderNum
"""); """);
sql.setParam("activityId", activityId); sql.setParam("activityId", activityId);
return list(pageForm, sql);
Pagination list = list(pageForm, sql);
List<NutMap> listMap = list.getList(NutMap.class);
//找活动报的人
List<TrainSignUpUser> upUsers = dao().query(TrainSignUpUser.class, Cnd.where("activityId", "=", activityId));
Map<String, List<TrainSignUpUser>> signUsers = upUsers.stream().collect(Collectors.groupingBy(TrainSignUpUser::getCourseId));
for (NutMap item : listMap) {
AtomicReference<Integer> familyCount = new AtomicReference<>(0);
List<TrainSignUpUser> users = signUsers.get(item.getString("id"));
if (Lang.isNotEmpty(users)) {
users.forEach(u -> {
List<NutMap> mobileColumnsValue = u.getMobileColumnsValue();
if (Lang.isNotEmpty(mobileColumnsValue)) {
NutMap nutMap = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findFirst().orElse(null);
if (nutMap != null) {
familyCount.updateAndGet(v -> v + (StrUtil.isNotBlank(nutMap.getString("columnValue")) ? nutMap.getInt("columnValue") : 0));
}
}
});
}
item.setv("familyCount", familyCount.get());
}
list.setList(listMap);
return list;
} }
@Override @Override
@@ -70,7 +106,8 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
u.sex, u.sex,
u.mobile, u.mobile,
tsuu.signUpTime, tsuu.signUpTime,
tsuu.state tsuu.state,
tsuu.mobileColumnsValue
FROM FROM
train_sign_up_user tsuu train_sign_up_user tsuu
LEFT JOIN `user` u ON u.id = tsuu.userId LEFT JOIN `user` u ON u.id = tsuu.userId
@@ -80,7 +117,29 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
CndPlus cnd = new CndPlus(); CndPlus cnd = new CndPlus();
cnd.andEx("tsuu.courseId", "=", courseId); cnd.andEx("tsuu.courseId", "=", courseId);
sql.setCondition(cnd); sql.setCondition(cnd);
return listMap(sql); List<NutMap> list = listMap(sql);
list.forEach(o -> {
if(StrUtil.isNotBlank(o.getString("mobileColumnsValue"))) {
List<NutMap> mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue"));
if(Lang.isNotEmpty(mobileColumnsValue)) {
mobileColumnsValue.forEach(m -> {
o.put(m.getString("columnCode"), m.getString("columnValue"));
});
}
}
});
return list;
}
@Override
public List<NutMap> getTaleColumnInfo(String courseId) {
TrainSignUpCourse course = dao().fetch(TrainSignUpCourse.class, courseId);
TrainSignUpType upType = dao().fetch(TrainSignUpType.class, course.getCourseType());
dao().fetchLinks(upType, "trainMobileSignColumnList", Cnd.NEW().asc("columnIndex"));
List<TrainMobileSignColumn> columnList = upType.getTrainMobileSignColumnList();
List<NutMap> columnTableList = columnList.stream().map(o -> NutMap.NEW().setv("label", o.getColumnName()).setv("prop", o.getColumnCode())).collect(Collectors.toList());
return columnTableList;
} }
@Override @Override
@@ -241,7 +241,7 @@ layout("/mobile/platform.html"){
style="position: absolute; left: 77%; top: 58%;" style="position: absolute; left: 77%; top: 58%;"
src="/assets/mobile/svg/train/sign_up.svg"></image> src="/assets/mobile/svg/train/sign_up.svg"></image>
<div @click="trainClick(o)" v-if="activityStatus === '1'" <div @click="trainClick(o)" v-if="activityStatus === '1' && o.isMobileSign"
style="text-align: center; line-height: 40px; width: 40px; height: 40px;display: inline-block; font-size: 14px; style="text-align: center; line-height: 40px; width: 40px; height: 40px;display: inline-block; font-size: 14px;
position: absolute; right: -10px; top: 8%; background-color: #00c698; border-radius: 7px; color: white"> position: absolute; right: -10px; top: 8%; background-color: #00c698; border-radius: 7px; color: white">
签到 签到
@@ -528,7 +528,7 @@ layout("/mobile/platform.html"){
cancel(o) { cancel(o) {
vant.Dialog.confirm({ vant.Dialog.confirm({
title: '温馨提示', title: '温馨提示',
message: "您确定要<span style='color: red'>取消【" + o.courseName + "】</span>吗?", message: "您确定要<span style='color: red'>取消【" + o.courseName + "】</span>吗?\n一旦确认,可不能反悔了哟!",
confirmButtonColor: '#1867b0', confirmButtonColor: '#1867b0',
}).then(async () => { }).then(async () => {
const resp = await $.post('/platform/mobile/trainSignUpActivity/cancelSignUp', { const resp = await $.post('/platform/mobile/trainSignUpActivity/cancelSignUp', {
@@ -611,7 +611,7 @@ layout("/mobile/platform.html"){
vant.Dialog.confirm({ vant.Dialog.confirm({
title: '温馨提示', title: '温馨提示',
message: '您选择了【' + this.choose.courseName + '】\n的报名,是否确认?', message: '您选择了【' + this.choose.courseName + '】\n一旦确认,可不能反悔了哟',
confirmButtonColor: '#1867b0', confirmButtonColor: '#1867b0',
}).then(async () => { }).then(async () => {
const toast = vant.Toast.loading({ const toast = vant.Toast.loading({
@@ -632,7 +632,7 @@ layout("/mobile/platform.html"){
const resp = await $.post('/platform/mobile/trainSignUpActivity/doSignUp', this.formData) const resp = await $.post('/platform/mobile/trainSignUpActivity/doSignUp', this.formData)
vant.Toast(resp.msg) vant.Toast(resp.msg)
if (resp.code === 0) { if (resp.code === 0) {
this.pageData() await this.pageData()
this.joinPopup = false this.joinPopup = false
} }
toast.clear() toast.clear()
@@ -110,9 +110,9 @@ layout("/mobile/platform.html"){
</div> </div>
<div @click="welfareClick(o)"> <div @click="welfareClick(o)">
<div> <div>
<van-image :src="CREATE_PREVIEW_URL(o.cover)" <van-image :src="CREATE_PREVIEW_URL(o.cover.id)"
style="display: contents" style="display: contents"
v-if="o.cover"></van-image> v-if="o.cover && o.cover.filepath"></van-image>
<van-image src="" <van-image src=""
style="display: contents" style="display: contents"
v-else></van-image> v-else></van-image>
@@ -36,6 +36,7 @@ layout("/layouts/platform.html"){
let map = null let map = null
let marker = null let marker = null
let geocoder = null let geocoder = null
let E = window.wangEditor
const vue = new Vue({ const vue = new Vue({
el: '#app', el: '#app',
components: { components: {
@@ -53,7 +54,6 @@ layout("/layouts/platform.html"){
fromEdit: '', fromEdit: '',
formData: { formData: {
notice: false, notice: false,
isIntegral: false,
courseList: [ courseList: [
{courseName: '1', courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1}, {courseName: '1', courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1},
{courseName: '2', courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1} {courseName: '2', courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1}
@@ -66,7 +66,6 @@ layout("/layouts/platform.html"){
limitNum: 1, limitNum: 1,
typeLimits: [], typeLimits: [],
activityMode: 1, activityMode: 1,
pushHome: 0,
}, },
pickerOptions: { pickerOptions: {
disabledDate(time) { disabledDate(time) {
@@ -232,7 +231,7 @@ layout("/layouts/platform.html"){
this.unionLimitIndex = index this.unionLimitIndex = index
this.setUpUnionLimitDialog = true this.setUpUnionLimitDialog = true
if (!this.formData.courseList[this.unionLimitIndex].unionLimit || this.formData.courseList[this.unionLimitIndex].unionLimit.length === 0) { if (!this.formData.courseList[this.unionLimitIndex].unionLimit || this.formData.courseList[this.unionLimitIndex].unionLimit.length === 0) {
const resp = await $.get('/platform/trainSingUp/manage/activity/add/getUnionLimit', {activityScopeId: this.formData.activityGroupId}) const resp = await $.get('/platform/trainSingUp/manage/activity/getUnionLimit', {activityScopeId: this.formData.activityGroupId})
if (resp.code === 0) { if (resp.code === 0) {
this.$set(this.formData.courseList[this.unionLimitIndex], 'unionLimit', resp.data) this.$set(this.formData.courseList[this.unionLimitIndex], 'unionLimit', resp.data)
} }
@@ -396,7 +395,7 @@ layout("/layouts/platform.html"){
const courseValid = this.formData.courseList.some((v, i) => { const courseValid = this.formData.courseList.some((v, i) => {
const basicValid = v.courseName && v.coursePeopleNumber && v.campus const basicValid = v.courseName && v.coursePeopleNumber && v.campus
&& v.courseLocation && v.courseInstructor && v.courseType && v.courseLocation && v.courseInstructor && v.courseType
const timeValid = v.courseTimeList.length > 0 && v.courseTimeList.every(x => { const timeValid = v.courseTimeList && v.courseTimeList.length > 0 && v.courseTimeList.every(x => {
return x.courseStartTime && x.courseEndTime && (x.courseStartTime < x.courseEndTime) return x.courseStartTime && x.courseEndTime && (x.courseStartTime < x.courseEndTime)
}) })
@@ -436,13 +435,18 @@ layout("/layouts/platform.html"){
//cloneData.conditionStructure.conditions = cloneData.conditionStructure.conditions.filter(v => v.field && v.fieldObj && v.operational && v.value) //cloneData.conditionStructure.conditions = cloneData.conditionStructure.conditions.filter(v => v.field && v.fieldObj && v.operational && v.value)
cloneData.activitySignUpStartTime = cloneData.activitySignTime !== undefined ? cloneData.activitySignTime[0] : null if (cloneData.cover && cloneData.cover.length > 0) {
cloneData.activitySignUpEndTime = cloneData.activitySignTime !== undefined ? cloneData.activitySignTime[1] : null cloneData.cover = cloneData.cover[0]
cloneData.activityStartTime = cloneData.activityTime !== undefined ? cloneData.activityTime[0] : null
cloneData.activityEndTime = cloneData.activityTime !== undefined ? cloneData.activityTime[1] : null
if(cloneData.activityStartTime !== undefined && cloneData.activityStartTime !== null) {
cloneData.year = new Date(cloneData.activityStartTime).getFullYear()
} }
if (cloneData.wechat && cloneData.wechat.length > 0) {
cloneData.wechat = cloneData.wechat[0]
}
cloneData.activitySignUpStartTime = cloneData.activitySignTime[0]
cloneData.activitySignUpEndTime = cloneData.activitySignTime[1]
cloneData.activityStartTime = cloneData.activityTime[0]
cloneData.activityEndTime = cloneData.activityTime[1]
cloneData.year = new Date(cloneData.activityStartTime).getFullYear()
/*const limitNumArray = [] /*const limitNumArray = []
this.formData.typeLimits.forEach(item => { this.formData.typeLimits.forEach(item => {
limitNumArray.push({ limitNumArray.push({
@@ -463,7 +467,7 @@ layout("/layouts/platform.html"){
}) })
cloneData.typeLimits = limitNumArray cloneData.typeLimits = limitNumArray
const resp = await $.post('/platform/trainSingUp/manage/activity/doHandle', {data: JSON.stringify(cloneData), flag: flag}) const resp = await $.post('/platform/trainSingUp/manage/activity/doHandle', {data: JSON.stringify(cloneData)})
if (resp.code === 0) { if (resp.code === 0) {
this.$notify({ this.$notify({
title: '成功', title: '成功',
@@ -481,9 +485,24 @@ layout("/layouts/platform.html"){
if (id) { if (id) {
const resp = await $.get('/platform/trainSingUp/manage/activity/findOne', {id}) const resp = await $.get('/platform/trainSingUp/manage/activity/findOne', {id})
if (resp.code === 0) { if (resp.code === 0) {
if (resp.data.cover) {
resp.data.cover = [resp.data.cover]
}
if (resp.data.wechat) {
resp.data.wechat = [resp.data.wechat]
}
this.formData = resp.data this.formData = resp.data
const type = this.trainTypeList.find(o => o.code === this.formData.trainType) const type = this.trainTypeList.find(o => o.code === this.formData.trainType)
this.trainType = type ? type.name : '培训班' this.trainType = type ? type.name : '培训班'
this.$nextTick(() => {
$("#introduce").html("")
var editor = new E("#introduce")
editor.config.onchange = (html) => {
this.formData.introduce = html.replace(/<p\><\/p>/g, '')
}
editor.create()
editor.txt.html(resp.data.introduce)
})
this.formData.courseList.forEach(item => { this.formData.courseList.forEach(item => {
const type = this.courseTypeList.find(o => o.id === item.courseType) const type = this.courseTypeList.find(o => o.id === item.courseType)
@@ -495,6 +514,15 @@ layout("/layouts/platform.html"){
} }
}) })
} }
} else {
this.$nextTick(() => {
$("#introduce").html("")
var editor = new E("#introduce")
editor.config.onchange = (html) => {
this.formData.introduce = html.replace(/<p\><\/p>/g, '')
}
editor.create()
})
} }
}, },
async initCnd() { async initCnd() {
@@ -564,7 +592,7 @@ layout("/layouts/platform.html"){
}, },
//获取培训班报名人数 //获取培训班报名人数
async getRegisterUserCount(courseId) { async getRegisterUserCount(courseId) {
const resp = await $.post('/platform/trainSingUp/manage/activity/add/getRegisterUserCount', {courseId}) const resp = await $.post('/platform/trainSingUp/manage/activity/getRegisterUserCount', {courseId})
return resp.code === 0 ? resp.data : 0 return resp.code === 0 ? resp.data : 0
}, },
setSignUpCondition() { setSignUpCondition() {
@@ -656,16 +684,16 @@ layout("/layouts/platform.html"){
this.trainType = type ? type.name : '' this.trainType = type ? type.name : ''
}, },
async getHistoricalActList() { async getHistoricalActList() {
const resp = await $.post('/platform/trainSingUp/manage/activity/add/getHistoricalActList', {}) const resp = await $.post('/platform/trainSingUp/manage/activity/getHistoricalActList', {})
return resp.data return resp.data
}, },
async historicalActChange(val) { async historicalActChange(val) {
const resp = await $.get('/platform/trainSingUp/manage/activity/findOne', {id: val}) const resp = await $.get('/platform/trainSingUp/manage/activity/findOne', {id: val})
if (resp.code === 0) { if (resp.code === 0) {
// resp.data.cover = [resp.data.cover] resp.data.cover = [resp.data.cover]
// if (resp.data.wechat) { if (resp.data.wechat) {
// resp.data.wechat = [resp.data.wechat] resp.data.wechat = [resp.data.wechat]
// } }
this.formData = resp.data this.formData = resp.data
const type = this.trainTypeList.find(o => o.code === this.formData.trainType) const type = this.trainTypeList.find(o => o.code === this.formData.trainType)
this.trainType = type ? type.name : '培训班' this.trainType = type ? type.name : '培训班'
@@ -708,15 +736,9 @@ layout("/layouts/platform.html"){
} }
}, },
conditionStructure(val) { conditionStructure(val) {
console.log(val)
this.formData.courseList[this.userScopeIndex].conditionStructure = val this.formData.courseList[this.userScopeIndex].conditionStructure = val
}, },
'formData.activityGroupId': {
async handler(newVal, oldVal) {
this.activityGroupList = await getActivityGroup()
this.userScopeDialog = false
},
deep: true
},
} }
}) })
</script> </script>
@@ -188,15 +188,12 @@ layout("/layouts/platform.html"){
<div slot="header" class="clearfix" <div slot="header" class="clearfix"
style="font-size: 16px;padding: 5px 0" style="font-size: 16px;padding: 5px 0"
@click="openApply(item)"> @click="openApply(item)">
<el-tooltip class="item" effect="dark" :content="item.NAME" <div style="width: 88%; white-space: nowrap; overflow: hidden; display: inline-block; text-overflow: ellipsis">
placement="top-start"> {{item.activityName}}
</div>
<span v-if="item.activityName.length<=10">{{item.activityName}}</span>
<span v-else>{{item.activityName.substr(0,10)}}...</span>
</el-tooltip>
<el-button @click="openApply(item)" class="reserve_btn" <el-button @click="openApply(item)" class="reserve_btn"
type="text"> type="text">
请选择活动报名 报名
</el-button> </el-button>
</div> </div>
<div @click="openApply(item)"> <div @click="openApply(item)">
@@ -226,14 +223,13 @@ layout("/layouts/platform.html"){
</div> </div>
<div class="text e-item"> <div class="text e-item">
<span style="color: gray">报名时间:</span> <span style="color: gray">报名时间:</span>
{{moment(item.activitySignUpStartTime) {{moment(item.activitySignUpStartTime).format('YYYY/MM/DD HH:mm')}} 至
.format('MM/DD HH:mm')}} 至 {{moment(item.activitySignUpEndTime).format('YYYY/MM/DD HH:mm')}}
{{moment(item.activitySignUpEndTime).format('MM/DD HH:mm')}}
</div> </div>
<div class="text item"> <div class="text item">
<span style="color: gray">活动时间:</span> <span style="color: gray">活动时间:</span>
{{moment(item.activityStartTime).format('MM/DD HH:mm')}} 至 {{moment(item.activityStartTime).format('YYYY/MM/DD HH:mm')}} 至
{{moment(item.activityEndTime).format('MM/DD HH:mm')}} {{moment(item.activityEndTime).format('YYYY/MM/DD HH:mm')}}
</div> </div>
</div> </div>
</el-card> </el-card>
@@ -241,7 +237,7 @@ layout("/layouts/platform.html"){
</el-row> </el-row>
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
<el-empty v-else description="暂无数据"></el-empty> <el-empty description="暂无数据" v-else></el-empty>
</el-row> </el-row>
<el-card shadow="never" class="mt10"> <el-card shadow="never" class="mt10">
@@ -250,7 +246,7 @@ layout("/layouts/platform.html"){
<template #label_end> <template #label_end>
<div class="search-item-option"> <div class="search-item-option">
<el-select v-model="pageForm.courseTypeId" <el-select v-model="pageForm.courseTypeId"
:placeholder="'请选择' + trainType + '类型'" :placeholder="'请选择' + trainType"
filterable clearable filterable clearable
style="width: 100%;margin-bottom: 5px;margin-left: 10px" style="width: 100%;margin-bottom: 5px;margin-left: 10px"
@change="doSearch"> @change="doSearch">
@@ -371,6 +367,7 @@ layout("/layouts/platform.html"){
<!--选择框--> <!--选择框-->
<template v-else-if="['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)"> <template v-else-if="['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)">
<el-select v-model="column.columnValue" <el-select v-model="column.columnValue"
clearable
:placeholder="'请选择' + column.columnName" :placeholder="'请选择' + column.columnName"
style="width: 100%"> style="width: 100%">
<el-option <el-option
@@ -422,12 +419,12 @@ layout("/layouts/platform.html"){
</el-table-column> </el-table-column>
<el-table-column label="开始时间" prop="courseStartTime"> <el-table-column label="开始时间" prop="courseStartTime">
<template scope="{row}"> <template scope="{row}">
{{moment(row.courseStartTime).format('HH:MM')}} {{moment(row.courseStartTime).format('HH:mm')}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="结束时间" prop="courseEndTime"> <el-table-column label="结束时间" prop="courseEndTime">
<template scope="{row}"> <template scope="{row}">
{{moment(row.courseEndTime).format('HH:MM')}} {{moment(row.courseEndTime).format('HH:mm')}}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -559,7 +556,7 @@ layout("/layouts/platform.html"){
const data = this.trainSignUpActivity const data = this.trainSignUpActivity
const now = moment().valueOf() const now = moment().valueOf()
if (now < moment(data.activitySignUpStartTime).valueOf() || now > moment(data.activitySignUpEndTime).valueOf()) { if (now < moment(data.activitySignUpStartTime).valueOf() || now > moment(data.activitySignUpEndTime).valueOf()) {
this.$message.warning('此活动不在报名时间内') this.$message.warning('报名已结束,请致电校工会咨询,联系电话:85913629')
return return
} }
const scopeUser = await getScopeUser(data.activityGroupId); const scopeUser = await getScopeUser(data.activityGroupId);
@@ -3,16 +3,15 @@
<el-row :gutter="20" type="flex" v-if="fromEdit !== 'edit'"> <el-row :gutter="20" type="flex" v-if="fromEdit !== 'edit'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否沿用之前活动" prop="use"> <el-form-item label="是否沿用之前活动" prop="use">
<el-radio-group v-model="use" size="medium"> <el-radio-group v-model="use">
<el-radio-button :label="true" border>沿用之前活动</el-radio-button> <el-radio :label="true">沿用之前活动</el-radio>
<el-radio-button :label="false" border>不沿用之前活动</el-radio-button> <el-radio :label="false">不沿用之前活动</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" v-if="use">
<el-form-item label="往期活动" prop="historicalAct"> <el-form-item label="往期活动" prop="historicalAct">
<el-select v-model="historicalAct" placeholder="请选择往期活动" <el-select v-model="historicalAct" placeholder="请选择往期活动"
:disabled="!use"
style="width: 100%" @change="historicalActChange"> style="width: 100%" @change="historicalActChange">
<el-option <el-option
v-for="item in historicalActList" v-for="item in historicalActList"
@@ -31,7 +30,7 @@
<el-input maxlength="50" v-model="formData.activityName"></el-input> <el-input maxlength="50" v-model="formData.activityName"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item :label="trainType + '通知'" prop="notice"> <el-form-item :label="trainType + '通知'" prop="notice">
<el-radio-group v-model="formData.notice" size="medium"> <el-radio-group v-model="formData.notice" size="medium">
<el-radio-button :label="true" border>通知</el-radio-button> <el-radio-button :label="true" border>通知</el-radio-button>
@@ -39,42 +38,15 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!--<el-col :span="12"> <el-col :span="6">
<el-form-item label="是否启用积分系统" prop="isIntegral">
<el-radio-group size="medium" v-model="formData.isIntegral">
<el-radio-button :label="false">不启用</el-radio-button>
<el-radio-button :label="true">启用</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>-->
</el-row>
<!--<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="是否推送移动端" prop="pushHome">
<el-radio-group v-model="formData.pushHome" size="medium">
<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>
</el-form-item>
</el-col>
&lt;!&ndash;<el-col :span="12">
<el-form-item :label="trainType + '通知'" prop="notice">
<el-radio-group v-model="formData.notice" size="medium">
<el-radio-button :label="true" border>通知</el-radio-button>
<el-radio-button :label="false" border>不通知</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>&ndash;&gt;
&lt;!&ndash;<el-col :span="6">
<el-form-item label="活动类型" prop="activityMode"> <el-form-item label="活动类型" prop="activityMode">
<el-radio-group v-model="formData.activityMode" size="medium"> <el-radio-group v-model="formData.activityMode" size="medium">
<el-radio-button :label="1" border>校工会</el-radio-button> <el-radio-button :label="1" border>校工会</el-radio-button>
<el-radio-button :label="2" border>分工会</el-radio-button> <el-radio-button :label="2" border>分工会</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>&ndash;&gt; </el-col>
</el-row>--> </el-row>
<el-row :gutter="20" type="flex"> <el-row :gutter="20" type="flex">
<el-col :span="12"> <el-col :span="12">
<el-form-item :rules="{required:true,message: '请选择起止时间', trigger: 'blur'}" label="活动时间" <el-form-item :rules="{required:true,message: '请选择起止时间', trigger: 'blur'}" label="活动时间"
@@ -139,29 +111,34 @@
</el-row> </el-row>
<el-form-item :rules="{required:true,message: '请输入活动介绍', trigger: 'blur'}" label="活动介绍" prop="introduce"> <el-form-item :rules="{required:true,message: '请输入活动介绍', trigger: 'blur'}" label="活动介绍" prop="introduce">
<text-editor v-model="formData.introduce" ></text-editor> <!--<el-input
:autosize="{ minRows: 5, maxRows: 10}"
placeholder="请输入活动介绍"
type="textarea"
v-model="formData.introduce">
</el-input>-->
<!--<div id="introduce"></div>-->
<text-editor v-model="formData.introduce"></text-editor>
</el-form-item> </el-form-item>
<el-row :gutter="20" type="flex"> <el-form-item label="封面图片" prop="cover" :rules="{required:true,message: '请上传活动移动端封面图片', trigger: 'blur'}">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="封面图片" prop="cover" :rules="{required:true,message: '请上传活动移动端封面图片', trigger: 'blur'}"> <file-upload ref="coverFileUpload" :files.sync="formData.cover" :max="1" :type="['jpg','jpeg','png','JPG','JPEG','PNG']">
<image-Upload ref="coverFileUpload" :height="70" <template #el-upload__tip>
:width="140" :limit="1" <div class="el-upload__tip" slot="tip">请上传一张jpg/png/jpeg等格式,且不大于2M的照片</div>
:file-type="['jpg','jpeg','png','JPG','JPEG','PNG']" </template>
:file-size="10" </file-upload>
v-model="formData.cover"></image-Upload>
</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="微信群二维码" prop="wechat"> <el-form-item label="微信群二维码" prop="wechat">
<image-Upload :height="70" <file-upload :files.sync="formData.wechat" :max="1" :type="['jpg','jpeg','png','JPG','JPEG','PNG']">
:width="140" :limit="1" <template #el-upload__tip>
:file-type="['jpg','jpeg','png','JPG','JPEG','PNG']" <div slot="tip" class="el-upload__tip">请上传一张jpg/png/jpeg等格式,且不大于2M的照片</div>
:file-size="10" </template>
v-model="formData.wechat"></image-Upload> </file-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-form-item>
<vi-title2 :title="trainType + '信息'"> <vi-title2 :title="trainType + '信息'">
<template #func> <template #func>
@@ -94,6 +94,12 @@ layout("/layouts/platform.html"){
<el-radio :label="false" border>不纳入</el-radio> <el-radio :label="false" border>不纳入</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-if="formData.isBringFamily === true" prop="selfAddFamily" label="本人纳入总人数">
<el-radio-group v-model="formData.selfAddFamily">
<el-radio :label="true" border>纳入</el-radio>
<el-radio :label="false" border>不纳入</el-radio>
</el-radio-group>
</el-form-item>
</el-form> </el-form>
<vi-title2 title="报名填写字段"> <vi-title2 title="报名填写字段">
@@ -51,7 +51,7 @@ layout("/layouts/platform.html"){
<table-tool :app="this" label="人员调整"> <table-tool :app="this" label="人员调整">
<template #func> <template #func>
<el-button type="primary" @click="openImport(null)" size="small"> <el-button type="primary" @click="openImport(null)" size="small">
批量导入 批量调整
</el-button> </el-button>
</template> </template>
</table-tool> </table-tool>
@@ -89,12 +89,22 @@ layout("/layouts/platform.html"){
<el-table-column label="已报名人数" prop="registerNum" sortable align="center" header-align="center" <el-table-column label="已报名人数" prop="registerNum" sortable align="center" header-align="center"
show-overflow-tooltip> show-overflow-tooltip>
<template scope="{row}"> <template scope="{row}">
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary"> <template v-if="row.isAddFamily && row.isBringFamily">
{{row.registerNum + row.courseReservedNumber}} <el-link v-if="row.selfAddFamily" @click="openView(row)" type="primary">
</el-link> {{row.registerNum + '家属(' + row.familyCount + ')'}}
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary"> </el-link>
{{row.registerNum}} <el-link v-else @click="openView(row)" type="primary">
</el-link> {{row.familyCount}}
</el-link>
</template>
<template v-else>
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary">
{{row.registerNum + row.courseReservedNumber}}
</el-link>
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary">
{{row.registerNum}}
</el-link>
</template>
</template> </template>
</el-table-column> </el-table-column>
@@ -121,7 +131,7 @@ layout("/layouts/platform.html"){
</el-input> </el-input>
</div> </div>
<div class="btn-group tool-button mt5"> <div class="btn-group tool-button mt5">
<el-select v-model="registerForm.unionId" clearable filterable placeholder="请选择院级工会" <el-select v-model="registerForm.unionId" clearable filterable placeholder="请选择分工会"
@change="getUnitList()"> @change="getUnitList()">
<el-option <el-option
v-for="item in unionList" v-for="item in unionList"
@@ -332,8 +342,7 @@ layout("/layouts/platform.html"){
const f = this.tempFileList[0] const f = this.tempFileList[0]
formData.append("file", f.raw, f.raw.name) formData.append("file", f.raw, f.raw.name)
formData.append("activityId", this.pageForm.activityId) formData.append("activityId", this.pageForm.activityId)
formData.append("importCourseId", this.importRow ? this.importRow.id : '') formData.append("importCourseId", this.importRow.id)
formData.append("isSingle", this.isSingle)
const loading = this.$loading({ const loading = this.$loading({
lock: true, lock: true,
text: '数据提交中...', text: '数据提交中...',
@@ -81,12 +81,22 @@ layout("/layouts/platform.html"){
<el-table-column label="已报名人数" prop="registerNum" sortable align="center" header-align="center" <el-table-column label="已报名人数" prop="registerNum" sortable align="center" header-align="center"
show-overflow-tooltip> show-overflow-tooltip>
<template scope="{row}"> <template scope="{row}">
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary"> <template v-if="row.isAddFamily && row.isBringFamily">
{{row.registerNum + row.courseReservedNumber}} <el-link v-if="row.selfAddFamily" @click="openView(row)" type="primary">
</el-link> {{row.registerNum + '家属(' + row.familyCount + ')'}}
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary"> </el-link>
{{row.registerNum}} <el-link v-else @click="openView(row)" type="primary">
</el-link> {{row.familyCount}}
</el-link>
</template>
<template v-else>
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary">
{{row.registerNum + row.courseReservedNumber}}
</el-link>
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary">
{{row.registerNum}}
</el-link>
</template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="150px"> <el-table-column label="操作" width="150px">
@@ -110,6 +120,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins], mixins: [initTableMixins],
data() { data() {
return { return {
columnTable: [],
activityList: [], activityList: [],
pageForm: { pageForm: {
year: new Date().getFullYear().toString(), year: new Date().getFullYear().toString(),
@@ -134,6 +145,15 @@ layout("/layouts/platform.html"){
{label: '报名时间', prop: 'signUpTime'}, {label: '报名时间', prop: 'signUpTime'},
{label: '报名状态', prop: 'state'}, {label: '报名状态', prop: 'state'},
], ],
cloneTableColumns: [
{label: '姓名', prop: 'username'},
{label: '工号', prop: 'loginname'},
{label: '单位', prop: 'unitname'},
{label: '分工会', prop: 'unionname'},
{label: '联系方式', prop: 'mobile'},
{label: '报名时间', prop: 'signUpTime'},
{label: '报名状态', prop: 'state'},
],
userSignInfo: {}, userSignInfo: {},
trainType: '培训班', trainType: '培训班',
trainTypeList: [], trainTypeList: [],
@@ -173,6 +193,11 @@ layout("/layouts/platform.html"){
this.registerUserTableData = resp_register.data this.registerUserTableData = resp_register.data
const resp_signInfo = await $.get(loc() + '/getSignInfo', {courseId: row.id}) const resp_signInfo = await $.get(loc() + '/getSignInfo', {courseId: row.id})
this.userSignInfo = resp_signInfo.data this.userSignInfo = resp_signInfo.data
const resp_columnInfo = await $.get(loc() + '/getTaleColumnInfo', {courseId: row.id})
if(resp_columnInfo.data) {
this.registerUserTableColumns = []
this.registerUserTableColumns = this.cloneTableColumns.concat(resp_columnInfo.data)
}
} }
}, },
async created() { async created() {