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.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.POST;
import org.nutz.mvc.annotation.Param;
import java.util.List;
@@ -26,7 +28,7 @@ import java.util.List;
*/
@Slf4j
@IocBean
@At("/platform/trainSingUp/manage/activity/add")
@At("/platform/trainSingUp/manage/activity")
public class TrainSignUpActivityAddController {
@Inject
@@ -35,12 +37,27 @@ public class TrainSignUpActivityAddController {
@Inject
private Dao dao;
@At("")
@At("/add")
@RequiresPermissions("trainSingUp.manage.activity.add")
@Ok("beetl:/platform/trainSingUp/manage/activity_add.html")
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
@ViReturn
@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.sys.models.Sys_dict;
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.TrainSignUpActivityCourse;
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,
@Param(value = "activityType", required = false) Integer activityType) {
CndPlus cnd = CndPlus.create();
cnd.and("isDisabled", "=", false);
cnd.andEX("`year`", "=", year);
//查询报名中
if (activityType == 2) {
cnd.and(new Static("now() > activitySignUpStartTime and now() < activitySignUpEndTime"));
}//查询已结束的
else if (activityType == 3) {
cnd.and(new Static("now() > activityEndTime"));
cnd.and(new Static("now() > activitySignUpEndTime"));
}
if(ShiroUtil.hasRole("H04") && !ShiroUtil.hasAnyRoles("sysadmin, A06")) {
cnd.and("activityMode", "=", 2).and("opBy", "=", ShiroUtil.getPlatformUid());
}
cnd.desc("activityStartTime");
List<TrainSignUpActivity> trainSignUpActivities = trainSignUpActivityService.query(cnd);
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())));
@@ -112,7 +108,7 @@ public class TrainSignUpActivityApplyController {
CndPlus cnd = CndPlus.create();
cnd.andEX("type.id","=",courseTypeId);
cnd.and("tsuc.activityId","=",activityId);
cnd.asc("tsuc.orderNum");
cnd.asc("type.code");
sql.setCondition(cnd);
Pagination pagination = trainSignUpActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -125,7 +121,9 @@ public class TrainSignUpActivityApplyController {
AtomicInteger hasRegisterNum = new AtomicInteger();
List<TrainSignUpUser> signUpUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getString("id")));
signUpUsers.forEach(item -> {
hasRegisterNum.getAndIncrement();
if(type.getSelfAddFamily()) {
hasRegisterNum.getAndIncrement();
}
if(type.getIsBringFamily() && type.getIsAddFamily()) {
List<NutMap> mapList = item.getMobileColumnsValue();
if(Lang.isNotEmpty(mapList)) {
@@ -138,7 +136,7 @@ public class TrainSignUpActivityApplyController {
});
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;
}
@@ -2,12 +2,11 @@ package io.v.nutz.zhgh.trainSignUp.controller.manage;
import cn.hutool.core.util.StrUtil;
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.utils.DateUtil;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.model.MatchConditionStructure;
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.service.TrainSignUpActivityService;
import lombok.extern.slf4j.Slf4j;
@@ -44,7 +43,6 @@ public class TrainSignUpActivityController {
@Inject
private MatchConditionStructureService matchConditionStructureService;
@Inject
private Dao dao;
@@ -76,7 +74,6 @@ public class TrainSignUpActivityController {
@RequiresPermissions("trainSingUp.manage.activity")
public Object doDelete(String id) {
Trans.exec(() -> {
TrainSignUpActivity activity = trainSignUpActivityManageService.fetch(id);
trainSignUpActivityManageService.delete(id);
dao.clear(TrainSignUpCourse.class, Cnd.where("activityId", "=", id));
dao.clear(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", id));
@@ -93,13 +90,9 @@ public class TrainSignUpActivityController {
@Ok("json:full")
@POST
@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);
activity.setActivityMode(ShiroUtil.hasAnyRoles("sysadmin, A06") ? 1 : 2);
activity.setDisabled(!flag);
if (StrUtil.isBlank(activity.getId())) {
activity.setOpBy(ShiroUtil.getPlatformUid());
trainSignUpActivityManageService.add(activity, null);
} else {
trainSignUpActivityManageService.edit(activity);
@@ -3,11 +3,11 @@ package io.v.nutz.zhgh.trainSignUp.controller.manage;
import cn.hutool.core.util.EnumUtil;
import cn.wizzer.framework.base.Result;
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.query.PageForm;
import io.v.nutz.base.service.BaseService;
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.TrainSignUpType;
import lombok.extern.slf4j.Slf4j;
@@ -11,8 +11,8 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
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.service.BaseService;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
@@ -226,10 +226,10 @@ public class TrainSignUpUserAdjustController {
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("报名未开始");
}
/*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("报名已结束");
}*/
@@ -244,11 +244,11 @@ public class TrainSignUpUserAdjustController {
for (SignUser sign : signUser) {
Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", sign.getLoginname()));
if(sysUser != null) {
if(!isSingle && courseMap.get(sign.getCourseName()) == null) {
/*if(!isSingle && courseMap.get(sign.getCourseName()) == null) {
sign.setErrMsg("分活动/培训班名称有误");
continue;
}
String courseId = isSingle ? importCourseId : courseMap.get(sign.getCourseName());
}*/
String courseId = importCourseId;
/*if(StrUtil.isNotBlank(course.getConditionStructureId())) {
NutMap nutMap = trainSignUpActivityService.validConditionStructure(course.getConditionStructureId());
if(!nutMap.getBoolean("flag")) {
@@ -290,7 +290,7 @@ public class TrainSignUpUserAdjustController {
Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", item.getLoginname()));
TrainSignUpUser trainSignUpUser = new TrainSignUpUser();
trainSignUpUser.setActivityId(activityId);
trainSignUpUser.setCourseId(isSingle ? importCourseId : courseMap.get(item.getCourseName()));
trainSignUpUser.setCourseId(importCourseId);
trainSignUpUser.setUserId(sysUser.getId());
trainSignUpUser.setMobile(sysUser.getMobile());
trainSignUpUser.setSignUpTime(new Date());
@@ -6,9 +6,8 @@ import cn.afterturn.easypoi.excel.export.ExcelExportService;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
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.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.TrainSignUpCourse;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser;
@@ -71,9 +70,6 @@ public class TrainSignUpUserBlackListManage {
cnd.andEX("tsuu.activityId", "=", activityId);
cnd.andEX("tsuu.courseId", "=", courseId);
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)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
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())){
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
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.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.data.service.MatchConditionStructureService;
import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity;
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.models.*;
import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
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.mvc.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
@@ -105,6 +101,36 @@ public class MTrainSignUpActivityController {
public Object doSignUp(TrainSignUpUser trainSignUpUser) {
try {
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);
return Result.success("报名成功");
} catch (Exception e) {
@@ -204,7 +230,7 @@ public class MTrainSignUpActivityController {
return Result.error("报名未开始");
}
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)) {
NutMap nutMap = trainSignUpActivityService.validConditionStructure(cndId);
@@ -233,6 +259,12 @@ public class MTrainSignUpActivityController {
if(signFullByUnionId) {
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) {
//课程已报人数
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
@Ok("json:full")
@ViReturn
@@ -111,6 +111,14 @@ public class TrainSignUpActivityStatisticsController {
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);
//查询课程类型
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();
ExportParams userExportParams = new ExportParams();
@@ -1,6 +1,7 @@
package io.v.nutz.zhgh.trainSignUp.models;
import cn.wizzer.framework.base.model.BaseModel;
import io.v.nutz.sys.models.Sys_file;
import io.v.nutz.zhgh.data.model.MatchConditionStructure;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -76,14 +77,14 @@ public class TrainSignUpActivity extends BaseModel implements Serializable {
private Integer limitNum;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("活动封面")
private String cover;
private Sys_file cover;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("微信群二维码")
private String wechat;
private Sys_file wechat;
@Column
@ColDefine(type = ColType.BOOLEAN)
@@ -127,21 +128,4 @@ public class TrainSignUpActivity extends BaseModel implements Serializable {
@Comment("活动类型")
@Default("1")
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)
private Boolean isAddFamily;
@Column
@Comment("本人纳入总人数")
@ColDefine(type = ColType.BOOLEAN)
@Default("1")
private Boolean selfAddFamily;
@Many(field = "typeId")
private List<TrainMobileSignColumn> trainMobileSignColumnList;
}
@@ -33,6 +33,8 @@ public interface TrainSignUpActivityStatisticsService extends ViService<TrainSig
*/
List<NutMap> registerUserList(String courseId);
List<NutMap> getTaleColumnInfo(String courseId);
/**
* 该课程下的报名人员信息
*
@@ -1,12 +1,10 @@
package io.v.nutz.zhgh.trainSignUp.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
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.service.impl.ViServiceImpl;
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.data.constant.ConditionalOperational;
@@ -57,9 +55,6 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
@Inject
private MatchConditionStructureService matchConditionStructureService;
@Inject
private MsgApi msgApi;
@Override
@Aop(TransAop.READ_COMMITTED)
public void add(TrainSignUpActivity activity, TrainSignUpCourse course) {
@@ -69,7 +64,6 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
activity.setConditionStructureId(null);
activity.setConditionStructure(null);
}
dao().insert(activity);
List<TrainSignUpCourse> courseList = activity.getCourseList();
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()));
update(activity);
List<TrainSignUpTypeLimit> typeLimits = activity.getTypeLimits();
@@ -154,7 +149,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
dao().insertOrUpdate(v);
List<TrainSignUpActivityCourse> courseTimeList = v.getCourseTimeList();
if (courseTimeList != null) {
if(courseTimeList != null) {
courseTimeList.forEach(x -> {
x.setActivityId(activity.getId());
x.setCourseId(v.getId());
@@ -184,7 +179,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
//现在的上课时间
List<String> nowCourseTimeListId = new ArrayList<>();
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()));
}
});
@@ -251,26 +246,30 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
List<TrainSignUpCourse> courseList = activity.getCourseList();
courseList.forEach(c -> {
TrainSignUpType type = dao().fetch(TrainSignUpType.class, StrUtil.isNotBlank(c.getCourseType()) ? 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()));
signUpUsers.forEach(item -> {
hasRegisterNum.getAndIncrement();
if (type.getIsBringFamily() && type.getIsAddFamily()) {
List<NutMap> mapList = item.getMobileColumnsValue();
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"));
if(StrUtil.isNotBlank(c.getCourseType())) {
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()));
signUpUsers.forEach(item -> {
if(type.getSelfAddFamily()) {
hasRegisterNum.getAndIncrement();
}
if(type.getIsBringFamily() && type.getIsAddFamily()) {
List<NutMap> mapList = item.getMobileColumnsValue();
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.setIsSign(isSignCourseByUser(c.getId(), (String) ShiroUtil.getPrincipalProperty("id")));
});
c.setHasRegisterNum(hasRegisterNum.get());
//当前用户是否报过
c.setIsSign(isSignCourseByUser(c.getId(), (String) ShiroUtil.getPrincipalProperty("id")));
}
});
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'))"
// .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("isDisabled", "=", 0);
cnd.and("isDisabled","=",0);
cnd.orderBy("activityEndTime", "desc");
cnd.orderBy("isDisabled", "desc");
Pagination pagination = listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
@@ -326,19 +325,17 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
@Override
@Aop(TransAop.READ_COMMITTED)
public void doSignUp(TrainSignUpUser trainSignUpUser) throws Exception {
String userId = (String) ShiroUtil.getPrincipalProperty("id");
//查询课程
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()));
int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己
if (hasRegisterNum > course.getCoursePeopleNumber()) {
if(hasRegisterNum > course.getCoursePeopleNumber()) {
trainSignUpUser.setState(2);
} else {
trainSignUpUser.setState(1);
@@ -348,17 +345,12 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
}
if(StrUtil.isBlank(trainSignUpUser.getUserId())) {
trainSignUpUser.setUserId((String) ShiroUtil.getPrincipalProperty("id"));
trainSignUpUser.setUserId(userId);
}
trainSignUpUser.setSignUpTime(new Date());
dao().insert(trainSignUpUser);
asyncInsertUserCourse(trainSignUpUser.getActivityId(), trainSignUpUser.getCourseId(), trainSignUpUser.getUserId());
String username = ShiroUtil.getPlatformUsername();
String description = username + "老师您好,您已成功报名(" + activity.getActivityName() + course.getCourseName() +"),请您按时参加";
// msgApi.sendWxMsg("活动报名通知", "", "text", description, List.of(ShiroUtil.getPlatformLoginname()), null);
// msgApi.sendWxMsg("");
asyncInsertUserCourse(trainSignUpUser.getActivityId(), trainSignUpUser.getCourseId(), userId);
}
@Async
@@ -419,18 +411,18 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
sql.setCondition(cnd);
//已经报名人数,这是教职工的
List<NutMap> signUpUsers = listMap(sql);
int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己
int hasRegisterNum = signUpType.getSelfAddFamily() ? signUpUsers.size() + 1 : 0;//+1是算自己
//课程已报人数(携带的家属)
int hasFamilyNum = 0;
//如果携带家属,并且纳入人数,则mdzz
if (signUpType.getIsAddFamily() && signUpType.getIsBringFamily()) {
if(signUpType.getIsAddFamily() && signUpType.getIsBringFamily()) {
//如果携带家属,已报人数=教职工+每个教职工携带的家属
AtomicInteger num = new AtomicInteger();
signUpUsers.forEach(item -> {
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);
if (nutMap != null) {
if(nutMap != null) {
num.addAndGet(nutMap.getInt("columnValue"));
}
}
@@ -451,17 +443,18 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
int coursePeopleNumber = course.getCoursePeopleNumber();
//课程已报人数
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;
//如果这个类型携带家属并且计入总人数
if (type.getIsBringFamily() && type.getIsAddFamily()) {
if(type.getIsBringFamily() && type.getIsAddFamily()) {
AtomicInteger num = new AtomicInteger();
signUpUsers.forEach(item -> {
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);
if (nutMap != null) {
if(nutMap != null) {
num.addAndGet(nutMap.getInt("columnValue"));
}
}
@@ -469,10 +462,10 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
hasFamilyNum = num.get() + (currentFamilyNumber != null ? currentFamilyNumber : 0);//currentFamilyNumber是当前报名时填的家属人数
}
//如果预留名额模式是报名人数减少
if (course.getReserveMode() == 1) {
if(course.getReserveMode() == 1) {
//如果已报人数+预留人数+当前报名(自己)+家属 > 总人数
return (hasRegisterNum + course.getCourseReservedNumber() + hasFamilyNum) > coursePeopleNumber;
} else {//如果预留名额模式是报名人数不变
}else {//如果预留名额模式是报名人数不变
//如果已报人数+当前报名(自己)+家属 > 总人数+预留人数
return (hasRegisterNum + hasFamilyNum) > (coursePeopleNumber + course.getCourseReservedNumber());
}
@@ -506,7 +499,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl<TrainSignUpAct
return true;
} else if (activity.getRestrictLimit() == 2) {
TrainSignUpTypeLimit trainSignUpTypeLimit = dao().fetch(TrainSignUpTypeLimit.class, Cnd.where("typeId", "=", courseType).and("activityId", "=", activityId));
if (trainSignUpTypeLimit == null) {
if(trainSignUpTypeLimit == null) {
return true;
}
//此类型的班最多可报几项
@@ -1,23 +1,31 @@
package io.v.nutz.zhgh.trainSignUp.service.impl;
import cn.hutool.core.util.StrUtil;
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.query.PageForm;
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.service.TrainSignUpActivityStatisticsService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -42,6 +50,9 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
tsuc.coursePeopleNumber,
tsuc.courseReservedNumber,
type.lxname as courseType,
type.isBringFamily,
type.isAddFamily,
type.selfAddFamily,
tsuc.courseLocation,
tsuc.courseInstructor,
tsuc.reserveMode,
@@ -56,7 +67,32 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
ORDER BY tsuc.orderNum
""");
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
@@ -70,7 +106,8 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
u.sex,
u.mobile,
tsuu.signUpTime,
tsuu.state
tsuu.state,
tsuu.mobileColumnsValue
FROM
train_sign_up_user tsuu
LEFT JOIN `user` u ON u.id = tsuu.userId
@@ -80,7 +117,29 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl<Trai
CndPlus cnd = new CndPlus();
cnd.andEx("tsuu.courseId", "=", courseId);
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