commit
This commit is contained in:
+5
-1
@@ -15,6 +15,7 @@ import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
@@ -51,7 +52,7 @@ public class ActivitySportsReadingController {
|
||||
ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", SecurityUtil.getUnitId()));
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("close", "!=", true);
|
||||
cnd.and("YEAR(startTime)", "=", year);
|
||||
cnd.and("YEAR(applyStartTime)", "=", year);
|
||||
cnd.and("activityLevel", "=", activityLevel);
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SYSADMIN.name())) {
|
||||
if (activityLevel.equals("40002")) {
|
||||
@@ -73,6 +74,9 @@ public class ActivitySportsReadingController {
|
||||
public Result pageData(String id, String activityLevel) {
|
||||
ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", SecurityUtil.getUnitId()));
|
||||
ActivitySchool activitySchool = dao.fetch(ActivitySchool.class, id);
|
||||
if (Lang.isEmpty(activitySchool)) {
|
||||
return Result.error("暂无活动");
|
||||
}
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
|
||||
+29
-9
@@ -18,6 +18,8 @@ import com.budwk.app.zhgh.activity.sports.param.ActivitySportsApplyUserPageParam
|
||||
import com.budwk.app.zhgh.activity.sports.service.ActivitySportsApplyUserService;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
@@ -87,7 +89,10 @@ public class H5ActivitySportsApplyUserController {
|
||||
ActivitySchoolEvent schoolEvent = dao.fetch(ActivitySchoolEvent.class, schoolEventId);
|
||||
ActivityEvent activityEvent = dao.fetch(ActivityEvent.class, eventId);
|
||||
ActivitySchool activitySchool = dao.fetch(ActivitySchool.class, activityId);
|
||||
ActivitySchoolTeam schoolTeam = dao.fetch(ActivitySchoolTeam.class, teamId);
|
||||
ActivitySchoolTeam schoolTeam = null;
|
||||
if (teamId != null && !teamId.isEmpty()) {
|
||||
schoolTeam = dao.fetch(ActivitySchoolTeam.class, teamId);
|
||||
}
|
||||
|
||||
ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", SecurityUtil.getUnitId()));
|
||||
ActivityBasicUnion basicUnion = dao.fetch(ActivityBasicUnion.class, Cnd.where("id", "=", basicUnit.getUnionId()));
|
||||
@@ -105,10 +110,10 @@ public class H5ActivitySportsApplyUserController {
|
||||
}
|
||||
//如果不等于空代表是个人项目
|
||||
if (ObjectUtil.isNotEmpty(activityEvent.getIsMenWomen())) {
|
||||
if (activityEvent.getIsMenWomen() == 1 && !List.of("男","男性").contains(user.getSex())) {
|
||||
if (activityEvent.getIsMenWomen() == 1 && !List.of("男", "男性").contains(user.getSex())) {
|
||||
return Result.error("当前项目只能男性能报名!");
|
||||
}
|
||||
if (activityEvent.getIsMenWomen() == 2 && !List.of("女","女性").contains(user.getSex())) {
|
||||
if (activityEvent.getIsMenWomen() == 2 && !List.of("女", "女性").contains(user.getSex())) {
|
||||
return Result.error("当前项目只能女性能报名!");
|
||||
}
|
||||
}
|
||||
@@ -182,8 +187,10 @@ public class H5ActivitySportsApplyUserController {
|
||||
schoolApply.setStatus(2);
|
||||
}
|
||||
schoolApply.setUnitname(user.getUnitName());
|
||||
schoolApply.setTeamId(schoolTeam.getId());
|
||||
schoolApply.setTeam(schoolTeam.getName());
|
||||
if (schoolTeam != null){
|
||||
schoolApply.setTeamId(schoolTeam.getId());
|
||||
schoolApply.setTeam(schoolTeam.getName());
|
||||
}
|
||||
schoolApply.setLoginname(user.getLoginname());
|
||||
schoolApply.setUsername(user.getUsername());
|
||||
schoolApply.setMobile(user.getMobile());
|
||||
@@ -196,10 +203,23 @@ public class H5ActivitySportsApplyUserController {
|
||||
@At
|
||||
@SaCheckPermission("h5.activity.sports.applyUser")
|
||||
public Result cancelApply(@Valid String activityId, @Valid String eventId, @Valid String schoolEventId) {
|
||||
int count = dao.count(ActivitySchoolApply.class,
|
||||
Cnd.where(ActivitySchoolApply::getUserId, "=", SecurityUtil.getUserId())
|
||||
.and(ActivitySchoolApply::getActivityId, "=", activityId)
|
||||
.and(ActivitySchoolApply::getEventId, "=", eventId).and(ActivitySchoolApply::getStatus, "=", 2));
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
activity_school_apply asa
|
||||
LEFT JOIN activity_school act ON act.id = asa.activityId
|
||||
WHERE
|
||||
asa.userId = @userId
|
||||
AND asa.activityId = @activityId
|
||||
AND asa.eventId = @eventId
|
||||
AND STATUS = 2
|
||||
AND JSON_CONTAINS(act.applyWay, '[1,2]')
|
||||
""")
|
||||
.setParam("userId", SecurityUtil.getUserId())
|
||||
.setParam("activityId", activityId)
|
||||
.setParam("eventId", eventId);
|
||||
int count = activitySportsApplyUserService.count(sql);
|
||||
if (count > 0) {
|
||||
return Result.error("您已报名成功无法取消,请联系管理员取消!");
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ public class ActivitySchool extends BaseModel implements Serializable , SysHomeC
|
||||
sysHomeActivity.setName(this.getName());
|
||||
sysHomeActivity.setCover(this.getImage());
|
||||
sysHomeActivity.setUrl("/platform/activity/apply");
|
||||
sysHomeActivity.setH5Url(null);
|
||||
sysHomeActivity.setH5Url("/platform/activity/apply/h5/index?id=" + this.getId());
|
||||
sysHomeActivity.setStartDate(DateUtil.parseDate(this.getApplyStartTime()));
|
||||
sysHomeActivity.setEndDate(DateUtil.parseDate(this.getApplyEndTime()));
|
||||
sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId());
|
||||
|
||||
+3
-2
@@ -310,7 +310,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl<Activity
|
||||
userList.forEach(v -> {
|
||||
if (Strings.isNotBlank(v.getString("birthday"))) {
|
||||
v.setv("birthday", v.getString("birthday").substring(0, 10));
|
||||
v.setv("age", cn.hutool.core.date.DateUtil.ageOfNow(v.getString("birthday")));
|
||||
v.setv("age", DateUtil.ageOfNow(v.getString("birthday")));
|
||||
} else {
|
||||
v.setv("birthday", null);
|
||||
v.setv("age", 0);
|
||||
@@ -344,7 +344,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl<Activity
|
||||
|
||||
list.forEach(v -> {
|
||||
if (Strings.isNotBlank(v.getBirthday())) {
|
||||
v.setAge(cn.hutool.core.date.DateUtil.ageOfNow(v.getBirthday()));
|
||||
v.setAge(DateUtil.ageOfNow(v.getBirthday()));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -393,6 +393,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl<Activity
|
||||
dao().update(ActivitySchoolApply.class,
|
||||
Chain.make("status", 2),
|
||||
Cnd.where("activityId", "=", activityId)
|
||||
.and("eventId", "=", eventId)
|
||||
.and("activityUnionId", "=", basicUnion.getId()));
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -7,7 +7,10 @@ import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivityCourse;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService;
|
||||
import io.swagger.annotations.Api;
|
||||
|
||||
-1
@@ -9,7 +9,6 @@ import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
|
||||
|
||||
-2
@@ -27,8 +27,6 @@ import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
+60
-61
@@ -6,7 +6,6 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
@@ -24,7 +23,6 @@ import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
@@ -40,15 +38,9 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
|
||||
/**
|
||||
@@ -96,28 +88,28 @@ public class TrainSignUpActivityStatisticsController {
|
||||
@SaCheckPermission("trainSignUp.statistics")
|
||||
public Result activityList(@Param(value = "year") Integer year) {
|
||||
List<TrainSignUpActivity> list = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime"));
|
||||
if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name())) {
|
||||
// 获取当前登录用户的工会
|
||||
String unionId = SecurityUtil.getUnionId();
|
||||
// 获取当前登录用户的协会
|
||||
List<String> clubIds = SecurityUtil.getClubIds();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name())) {
|
||||
// 获取当前登录用户的工会
|
||||
String unionId = SecurityUtil.getUnionId();
|
||||
// 获取当前登录用户的协会
|
||||
List<String> clubIds = SecurityUtil.getClubIds();
|
||||
|
||||
List<TrainSignUpActivity> result = new ArrayList<>();
|
||||
for (TrainSignUpActivity activity : list) {
|
||||
if(AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
||||
if(activity.getHostUnits().contains(unionId) || activity.getHelpUnits().contains(unionId)) {
|
||||
result.add(activity);
|
||||
}
|
||||
}
|
||||
if(AuthUtil.hasRoleOr(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_OPERATOR.name())) {
|
||||
if(clubIds.stream().anyMatch(activity.getHostUnits()::contains) || clubIds.stream().anyMatch(activity.getHelpUnits()::contains)) {
|
||||
result.add(activity);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result.success(result);
|
||||
}
|
||||
return Result.success(list);
|
||||
List<TrainSignUpActivity> result = new ArrayList<>();
|
||||
for (TrainSignUpActivity activity : list) {
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
||||
if (activity.getHostUnits().contains(unionId) || activity.getHelpUnits().contains(unionId)) {
|
||||
result.add(activity);
|
||||
}
|
||||
}
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_OPERATOR.name())) {
|
||||
if (clubIds.stream().anyMatch(activity.getHostUnits()::contains) || clubIds.stream().anyMatch(activity.getHelpUnits()::contains)) {
|
||||
result.add(activity);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result.success(result);
|
||||
}
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -140,13 +132,13 @@ public class TrainSignUpActivityStatisticsController {
|
||||
return Result.success(trainSignUpActivityStatisticsService.getTaleColumnInfo(courseId));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取时间信息")
|
||||
@SaCheckPermission("trainSignUp.statistics")
|
||||
public Result selectTimes(@Param("courseId") String courseId) {
|
||||
List<TrainSignUpActivityCourse> activityCourses = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime"));
|
||||
return Result.success(activityCourses);
|
||||
}
|
||||
@At
|
||||
@ApiOperation("获取时间信息")
|
||||
@SaCheckPermission("trainSignUp.statistics")
|
||||
public Result selectTimes(@Param("courseId") String courseId) {
|
||||
List<TrainSignUpActivityCourse> activityCourses = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime"));
|
||||
return Result.success(activityCourses);
|
||||
}
|
||||
|
||||
/**
|
||||
* 培训班上课签到信息
|
||||
@@ -158,8 +150,8 @@ public class TrainSignUpActivityStatisticsController {
|
||||
@ApiOperation("获取签到信息")
|
||||
@SaCheckPermission("trainSignUp.statistics")
|
||||
public Result getSignInfo(PageForm pageForm,
|
||||
@Param("courseId") String courseId,
|
||||
String timeId) {
|
||||
@Param("courseId") String courseId,
|
||||
String timeId) {
|
||||
return Result.success(trainSignUpActivityStatisticsService.getSignInfo(pageForm, courseId, timeId));
|
||||
}
|
||||
|
||||
@@ -172,21 +164,30 @@ public class TrainSignUpActivityStatisticsController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("设置签到")
|
||||
@SaCheckPermission("trainSignUp.statistics")
|
||||
public Result adjustSign(@Param("id") String id) {
|
||||
TrainSignUpUserCourse userCourse = dao.fetch(TrainSignUpUserCourse.class, id);
|
||||
if(userCourse.isAttend()) {
|
||||
userCourse.setAttend(false);
|
||||
userCourse.setAttendTime(null);
|
||||
} else {
|
||||
userCourse.setAttend(true);
|
||||
userCourse.setAttendTime(userCourse.getCourseStartTime());
|
||||
}
|
||||
dao.update(userCourse);
|
||||
return Result.success();
|
||||
}
|
||||
@At
|
||||
@ApiOperation("设置签到")
|
||||
@SaCheckPermission("trainSignUp.statistics")
|
||||
public Result adjustSign(@Param("id") String id) {
|
||||
TrainSignUpUserCourse userCourse = dao.fetch(TrainSignUpUserCourse.class, id);
|
||||
Date courseStartTime = userCourse.getCourseStartTime();
|
||||
Date courseEndTime = userCourse.getCourseEndTime();
|
||||
Date now = new Date();
|
||||
if (courseStartTime == null || courseStartTime.after(now)) {
|
||||
return Result.error("签到时间未开始!");
|
||||
}
|
||||
if (courseEndTime != null && courseEndTime.before(now)) {
|
||||
return Result.error("签到已结束!");
|
||||
}
|
||||
if (userCourse.isAttend()) {
|
||||
userCourse.setAttend(false);
|
||||
userCourse.setAttendTime(null);
|
||||
} else {
|
||||
userCourse.setAttend(true);
|
||||
userCourse.setAttendTime(userCourse.getCourseStartTime());
|
||||
}
|
||||
dao.update(userCourse);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@@ -236,7 +237,7 @@ public class TrainSignUpActivityStatisticsController {
|
||||
|
||||
for (TrainSignUpCourse c : courseList) {
|
||||
String k = c.getCourseName();
|
||||
List<NutMap> v = userList.stream().filter(x -> x.getString("courseName").equals(k)).collect(Collectors.toList());
|
||||
List<NutMap> v = userList.stream().filter(x -> StrUtil.isNotBlank(x.getString("courseName")) && x.getString("courseName").equals(k)).collect(Collectors.toList());
|
||||
ExportParams userExportParams = new ExportParams();
|
||||
userExportParams.setSheetName(k);
|
||||
userExportParams.setType(ExcelType.HSSF);
|
||||
@@ -251,7 +252,7 @@ public class TrainSignUpActivityStatisticsController {
|
||||
entity.setName(column.getColumnName());
|
||||
entity.setKey(column.getColumnCode());
|
||||
entity.setWidth(20);
|
||||
if (column.getColumnFormType().equals("FILE")) {
|
||||
if ("FILE".equals(column.getColumnFormType())) {
|
||||
entity.setType(2);
|
||||
entity.setExportImageType(2);
|
||||
}
|
||||
@@ -267,9 +268,9 @@ public class TrainSignUpActivityStatisticsController {
|
||||
userSignData.put(cv.getString("columnCode"), cv.getString("columnValue"));
|
||||
} else {
|
||||
if (StrUtil.isNotBlank(cv.getString("columnValue"))) {
|
||||
List<JSONObject> columnValue = Json.fromJsonAsList(JSONObject.class, cv.getString("columnValue"));
|
||||
List<NutMap> columnValue = cv.getAsList("columnValue", NutMap.class);
|
||||
if (columnValue.size() == 1) {
|
||||
JSONObject sysFile = columnValue.get(0);
|
||||
NutMap sysFile = columnValue.get(0);
|
||||
Sys_file file = dao.fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", sysFile.get("url")));
|
||||
byte[] imageBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
||||
if (imageBytes.length > 0) {
|
||||
@@ -285,6 +286,7 @@ public class TrainSignUpActivityStatisticsController {
|
||||
|
||||
Map<String, Object> userExportMap = new HashMap<>();
|
||||
userExportMap.put("name", k);
|
||||
userExportParams.setType(ExcelType.HSSF);
|
||||
userExportMap.put("title", userExportParams);
|
||||
userExportMap.put("entity", currentEntities);
|
||||
userExportMap.put("data", v);
|
||||
@@ -297,10 +299,7 @@ public class TrainSignUpActivityStatisticsController {
|
||||
ExcelExportService service = new ExcelExportService();
|
||||
service.createSheetForMap(workbook, (ExportParams) map.get("title"), (List<ExcelExportEntity>) map.get("entity"), (Collection<?>) map.get("data"));
|
||||
}
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
|
||||
CommonDownloadUtil.download(activity.getActivityName() + "报名人员名单" + ".xlsx", workbook, response);
|
||||
CommonDownloadUtil.download(activity.getActivityName() + "报名人员名单" + ".xls", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
-2
@@ -5,9 +5,7 @@ import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpType;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser;
|
||||
import io.swagger.models.auth.In;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
|
||||
-1
@@ -7,7 +7,6 @@ import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author zxy
|
||||
|
||||
+18
-5
@@ -7,10 +7,6 @@ import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_home_activity;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.activity.family.models.FamilyActivity;
|
||||
import com.budwk.app.zhgh.activity.family.models.FamilyCourse;
|
||||
import com.budwk.app.zhgh.activity.family.models.FamilyType;
|
||||
import com.budwk.app.zhgh.activity.family.service.FamilyActivityStatisticsService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService;
|
||||
@@ -31,7 +27,6 @@ import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -91,6 +86,24 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl<TrainSignUpA
|
||||
if (Lang.isEmpty(courseList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Set<String> newIds = courseList.stream()
|
||||
.map(TrainSignUpCourse::getId)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
List<TrainSignUpCourse> oldCourses = dao().query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activity.getId()));
|
||||
|
||||
Set<String> oldIds = oldCourses.stream()
|
||||
.map(TrainSignUpCourse::getId)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
Set<String> deletedIds = Sets.difference(oldIds, newIds).immutableCopy();
|
||||
if(Lang.isNotEmpty(deletedIds)) {
|
||||
dao().clear(TrainSignUpCourse.class, Cnd.where("id", "in", deletedIds));
|
||||
}
|
||||
|
||||
for (TrainSignUpCourse course : courseList) {
|
||||
course.setActivityId(activity.getId());
|
||||
dao().insertOrUpdate(course);
|
||||
|
||||
+5
-5
@@ -4,10 +4,10 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.zhgh.activity.family.models.FamilyType;
|
||||
import com.budwk.app.zhgh.activity.family.models.FamilyUser;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainMobileSignColumn;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpType;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -20,7 +20,7 @@ import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
+9
-1
@@ -1,8 +1,10 @@
|
||||
package com.budwk.app.zhgh.activity.trainSignUp.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpBlackList;
|
||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpBlackListService;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -42,6 +44,8 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl<TrainSignUpBlack
|
||||
tsuu.state,
|
||||
( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId $var) courseTotal,
|
||||
( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId AND isAttend = 0 and tsuu.state!=2 AND now()> courseEndTime $var) AS absentCount,
|
||||
( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId AND isAttend = 1 and tsuu.state!=2 AND now()> courseEndTime $var) AS signCount,
|
||||
( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId and tsuu.state!=2 $var) AS totalCount,
|
||||
if(tsubl.isDisabled=1,true,false) isDisabled,
|
||||
group_CONCAT( tsuc.courseName ) AS courseNames
|
||||
FROM
|
||||
@@ -51,7 +55,6 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl<TrainSignUpBlack
|
||||
LEFT JOIN train_sign_up_course tsuc ON tsuc.id = tsuu.courseId
|
||||
LEFT JOIN train_sign_up_black_list tsubl on tsubl.userId = tsuu.userId
|
||||
$condition
|
||||
ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 )
|
||||
""");
|
||||
cnd.groupBy("tsuu.userId");
|
||||
Criteria varCnd = Cnd.cri();
|
||||
@@ -61,6 +64,11 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl<TrainSignUpBlack
|
||||
if (!varCnd.where().isEmpty()) {
|
||||
sql.vars().set("var", "and " + varCnd.toSql(null));
|
||||
}
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.desc("tsuu.unitId");
|
||||
} else {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
+54
-40
@@ -4,9 +4,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.date.ChineseDate;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.pinyin.PinyinUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
@@ -132,12 +130,14 @@ public class TeacherCongressDelegateServiceImpl extends BaseServiceImpl<Teacher_
|
||||
|
||||
//查询所有的团长、副团长
|
||||
Sys_role tzRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||
Sys_role ftzRole = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
|
||||
Sql tzSql = Sqls.create("""
|
||||
SELECT
|
||||
t2.id,
|
||||
t2.username,
|
||||
t2.sex,
|
||||
t1.tcDelegationId
|
||||
t1.tcDelegationId,
|
||||
t1.roleId
|
||||
FROM
|
||||
sys_user_role t1
|
||||
LEFT JOIN sys_user t2 ON t2.id = t1.userId
|
||||
@@ -146,7 +146,7 @@ public class TeacherCongressDelegateServiceImpl extends BaseServiceImpl<Teacher_
|
||||
AND t1.roleId IN (@tzRoles)
|
||||
""");
|
||||
tzSql.setParam("sessionId", pageForm.getSessionId());
|
||||
tzSql.setParam("tzRoles", List.of(tzRole.getId()));
|
||||
tzSql.setParam("tzRoles", List.of(tzRole.getId(), ftzRole.getId()));
|
||||
List<NutMap> tzList = listMap(tzSql);
|
||||
|
||||
//查询代表
|
||||
@@ -155,7 +155,8 @@ public class TeacherCongressDelegateServiceImpl extends BaseServiceImpl<Teacher_
|
||||
t1.*,
|
||||
t2.`name` AS delegationName,
|
||||
t3.`fullName` AS sessionName,
|
||||
t4.`name` AS roleName
|
||||
t4.`name` AS roleName,
|
||||
t4.`code` AS roleCode
|
||||
FROM
|
||||
teacher_congress_delegate t1
|
||||
LEFT JOIN teacher_congress_delegation t2 ON t2.id = t1.delegationId
|
||||
@@ -167,44 +168,57 @@ public class TeacherCongressDelegateServiceImpl extends BaseServiceImpl<Teacher_
|
||||
List<NutMap> delegateAllList = listMap(delegateSql);
|
||||
|
||||
for (NutMap delegation : delegationList) {
|
||||
delegation.put("tz", tzList.stream().filter(tz -> tz.getString("tcDelegationId").equals(delegation.getString("id"))).toList());
|
||||
//过滤本代表团的代表
|
||||
List<NutMap> delegateList = delegateAllList.stream()
|
||||
.filter(delegate -> delegation.getString("id").equals(delegate.getString("delegationId")))
|
||||
.collect(Collectors.toList());
|
||||
Comparator<NutMap> comparator = Comparator.comparing((NutMap map) -> {
|
||||
String userName = map.getString("userName");
|
||||
if (userName == null || userName.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
// 获取第一个字的笔画数作为主排序键
|
||||
return getStrokeCount(String.valueOf(userName.charAt(0)));
|
||||
}).thenComparing(map -> {
|
||||
String userName = map.getString("userName");
|
||||
// 如果名字长度大于 1,获取第二个字的笔画数
|
||||
if (userName != null && userName.length() > 1) {
|
||||
return getStrokeCount(String.valueOf(userName.charAt(1)));
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
delegateList.sort(comparator);
|
||||
//按5人平均分组
|
||||
List<List<NutMap>> delegateGroupList = ListUtil.split(delegateList, 5);
|
||||
delegation.put("tz", tzList.stream().filter(tz -> tz.getString("tcDelegationId").equals(delegation.getString("id"))
|
||||
&& tz.getString("roleId").equals(tzRole.getId())).toList());
|
||||
delegation.put("ftz", tzList.stream().filter(tz -> tz.getString("tcDelegationId").equals(delegation.getString("id"))
|
||||
&& tz.getString("roleId").equals(ftzRole.getId())).toList());
|
||||
|
||||
List<NutMap> buildMaps = new ArrayList<>();
|
||||
for (int i = 0; i < delegateGroupList.size(); i++) {
|
||||
NutMap buildMap = NutMap.NEW();
|
||||
for (int j = 0; j < delegateGroupList.get(i).size(); j++) {
|
||||
delegateGroupList.get(i).get(j).put("username" + j, delegateGroupList.get(i).get(j).getString("userName"));
|
||||
delegateGroupList.get(i).get(j).put("sex" + j, delegateGroupList.get(i).get(j).getString("sex"));
|
||||
buildMap.put("username" + j, delegateGroupList.get(i).get(j).getString("userName"));
|
||||
if(StrUtil.isNotBlank(delegateGroupList.get(i).get(j).getString("sex"))) {
|
||||
buildMap.put("sex" + j, "(" + delegateGroupList.get(i).get(j).getString("sex") + ")");
|
||||
}
|
||||
List<Object> dbDataFormatList = List.of(RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL, RoleConstant.TEACHER_CONGRESS_DELEGATE_ATTENDANCE);
|
||||
|
||||
for (Object role : dbDataFormatList) {
|
||||
//过滤本代表团的代表
|
||||
List<NutMap> delegateList = delegateAllList.stream()
|
||||
.filter(delegate -> delegation.getString("id").equals(delegate.getString("delegationId"))
|
||||
&& delegate.getString("roleCode").equals(role.toString()))
|
||||
.collect(Collectors.toList());
|
||||
Comparator<NutMap> comparator = Comparator.comparing((NutMap map) -> {
|
||||
String userName = map.getString("userName");
|
||||
if (userName == null || userName.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
// 获取第一个字的笔画数作为主排序键
|
||||
return getStrokeCount(String.valueOf(userName.charAt(0)));
|
||||
}).thenComparing(map -> {
|
||||
String userName = map.getString("userName");
|
||||
// 如果名字长度大于 1,获取第二个字的笔画数
|
||||
if (userName != null && userName.length() > 1) {
|
||||
return getStrokeCount(String.valueOf(userName.charAt(1)));
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
delegateList.sort(comparator);
|
||||
//按5人平均分组
|
||||
List<List<NutMap>> delegateGroupList = ListUtil.split(delegateList, 5);
|
||||
|
||||
List<NutMap> buildMaps = new ArrayList<>();
|
||||
for (int i = 0; i < delegateGroupList.size(); i++) {
|
||||
NutMap buildMap = NutMap.NEW();
|
||||
for (int j = 0; j < delegateGroupList.get(i).size(); j++) {
|
||||
delegateGroupList.get(i).get(j).put("username" + j, delegateGroupList.get(i).get(j).getString("userName"));
|
||||
delegateGroupList.get(i).get(j).put("sex" + j, delegateGroupList.get(i).get(j).getString("sex"));
|
||||
buildMap.put("username" + j, delegateGroupList.get(i).get(j).getString("userName"));
|
||||
if (StrUtil.isNotBlank(delegateGroupList.get(i).get(j).getString("sex"))) {
|
||||
buildMap.put("sex" + j, "(" + delegateGroupList.get(i).get(j).getString("sex") + ")");
|
||||
}
|
||||
}
|
||||
buildMaps.add(buildMap);
|
||||
}
|
||||
if (role.equals(RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL)) {
|
||||
delegation.put("dbs", buildMaps);
|
||||
} else {
|
||||
delegation.put("tyDbs", buildMaps);
|
||||
}
|
||||
buildMaps.add(buildMap);
|
||||
}
|
||||
delegation.put("dbs", buildMaps);
|
||||
}
|
||||
|
||||
LoopRowTableRenderPolicy hackLoopTableRenderPolicy = new LoopRowTableRenderPolicy();
|
||||
|
||||
+8
@@ -106,6 +106,14 @@ public class WelfareSelectionSituationController {
|
||||
situationService.exportXlsx(pageForm, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("welfare.selection.situation")
|
||||
@Ok("void")
|
||||
@ApiOperation("导出Excel")
|
||||
public void receiveXlsx(@Valid @Param("pageForm") WelfareSelectionSituationPageForm pageForm, HttpServletResponse response) {
|
||||
situationService.receiveXlsx(pageForm, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result getMobileByUserId(String userId) {
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ public class WelfareUserSelectController {
|
||||
cnd.andEX("YEAR(wp.choiceTimeStart)", "in", year);
|
||||
cnd.and("wp.isDisabled", "=", 0);
|
||||
cnd.groupBy("wp.id");
|
||||
cnd.desc("YEAR(wp.choiceTimeStart)");
|
||||
cnd.desc("wp.choiceTimeStart");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = welfareProjectService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
|
||||
@@ -50,6 +50,11 @@ public class WelfareUserSelection extends BaseModel implements Serializable {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String selectUserId;
|
||||
|
||||
@Column
|
||||
@Comment("选择用户")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@Comment("选择时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
|
||||
@@ -12,5 +12,6 @@ public interface WelfareSelectionSituationService extends BaseService<WelfareLis
|
||||
Pagination pageData(WelfareSelectionSituationPageForm pageForm);
|
||||
|
||||
void exportXlsx(WelfareSelectionSituationPageForm pageForm, HttpServletResponse response);
|
||||
void receiveXlsx(WelfareSelectionSituationPageForm pageForm, HttpServletResponse response);
|
||||
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
|
||||
WHERE
|
||||
wl.projectId = @welfareId
|
||||
AND wpus.selectOptionId = @selectOptionId and wpus.selectNum!=0
|
||||
|
||||
|
||||
""").setParam("welfareId", projectId).setParam("selectOptionId", optionId);
|
||||
|
||||
List<NutMap> mapList = listMap(sql);
|
||||
@@ -345,7 +345,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
|
||||
FROM
|
||||
`vw_user`
|
||||
$condition
|
||||
""");
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("id", "not in", userIds);
|
||||
cnd.and("unionCode", "is not", null);
|
||||
@@ -392,7 +392,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
|
||||
t2.birthday
|
||||
FROM
|
||||
`welfare_list` t1
|
||||
LEFT JOIN sys_user t2 ON t2.id = t1.userId
|
||||
LEFT JOIN `vw_user` t2 ON t2.id = t1.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
@@ -408,6 +408,9 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
|
||||
if (pageForm.getBirthMonths() != null && pageForm.getBirthMonths().length > 0) {
|
||||
cnd.andEX("MONTH(t2.birthday)", "in", pageForm.getBirthMonths());
|
||||
}
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) {
|
||||
cnd.and("t2.unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.andEX("t1.welfareUnitId", "in", pageForm.getUnitIds());
|
||||
cnd.andEX("t1.welfareUnionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("t1.personType", "in", pageForm.getPersonTypes());
|
||||
@@ -467,7 +470,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
|
||||
cnd.andEX("u.personType", "in", pageForm.getPersonTypes());
|
||||
cnd.andEX("u.preparedBy", "in", pageForm.getPreparedBys());
|
||||
cnd.andEX("u.userState", "in", pageForm.getUserStates());
|
||||
cnd.andEX("u.member","=",pageForm.getIsMember());
|
||||
cnd.andEX("u.member", "=", pageForm.getIsMember());
|
||||
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.asc("u.unionCode");
|
||||
@@ -519,7 +522,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
|
||||
cnd.andEX("personType", "in", pageForm.getPersonTypes());
|
||||
cnd.andEX("preparedBy", "in", pageForm.getPreparedBys());
|
||||
cnd.andEX("userState", "in", pageForm.getUserStates());
|
||||
cnd.andEX("member","=",pageForm.getIsMember());
|
||||
cnd.andEX("member", "=", pageForm.getIsMember());
|
||||
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.asc("unionCode");
|
||||
|
||||
+22
-6
@@ -20,9 +20,7 @@ import org.nutz.lang.util.NutMap;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -42,7 +40,7 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl<WelfareProject> i
|
||||
@Override
|
||||
public WelfareProject projectInfo(String projectId) {
|
||||
WelfareProject project = fetch(projectId);
|
||||
fetchLinks(project, "options",Cnd.NEW().asc("optionSort"));
|
||||
fetchLinks(project, "options", Cnd.NEW().asc("optionSort"));
|
||||
return project;
|
||||
}
|
||||
|
||||
@@ -63,9 +61,27 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl<WelfareProject> i
|
||||
public void updateProject(WelfareProject project) {
|
||||
// 更新项目
|
||||
update(project);
|
||||
dao().clear(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", project.getId()));
|
||||
List<WelfareProjectSubjectOption> optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", project.getId()));
|
||||
List<String> dbOptionIds = optionList.stream()
|
||||
.map(WelfareProjectSubjectOption::getId)
|
||||
.toList();
|
||||
// 2. 获取 project 中的所有选项 ID(注意 null 安全)
|
||||
List<String> projectOptionIds = project.getOptions() == null ?
|
||||
Collections.emptyList() :
|
||||
project.getOptions().stream()
|
||||
.map(WelfareProjectSubjectOption::getId)
|
||||
.filter(Objects::nonNull) // 避免 null id
|
||||
.toList();
|
||||
// 3. 找出需要删除的 ID:在 db 中但不在 project 中
|
||||
List<String> toDeleteIds = dbOptionIds.stream()
|
||||
.filter(id -> !projectOptionIds.contains(id))
|
||||
.collect(Collectors.toList());
|
||||
// 4. 批量删除
|
||||
if (!toDeleteIds.isEmpty()) {
|
||||
dao().clear(WelfareProjectSubjectOption.class,
|
||||
Cnd.where(WelfareProjectSubjectOption::getId, "in", toDeleteIds));
|
||||
}
|
||||
|
||||
// 新增或更新选项
|
||||
for (WelfareProjectSubjectOption option : project.getOptions()) {
|
||||
option.setWelfareId(project.getId());
|
||||
dao().insertOrUpdate(option);
|
||||
|
||||
+103
-7
@@ -4,30 +4,37 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.sys.models.Sys_file;
|
||||
import com.budwk.app.sys.services.SysFileService;
|
||||
import com.budwk.app.sys.utils.SysFileMinIoUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.welfare.model.WelfareList;
|
||||
import com.budwk.app.zhgh.welfare.model.WelfareProject;
|
||||
import com.budwk.app.zhgh.welfare.model.WelfareProjectSubjectOption;
|
||||
import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm;
|
||||
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
@Slf4j
|
||||
@@ -36,6 +43,10 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
super(dao);
|
||||
}
|
||||
|
||||
|
||||
@Inject
|
||||
private SysFileService sysFileService;
|
||||
|
||||
@Override
|
||||
public Pagination pageData(WelfareSelectionSituationPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
@@ -46,7 +57,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
t1.welfareUnionName,
|
||||
t1.welfareUnitName,
|
||||
t1.welfareUnitId,
|
||||
GROUP_CONCAT(DISTINCT t3.optionName) AS selectedOptions,
|
||||
GROUP_CONCAT(DISTINCT t3.optionName ,'(',t2.selectNum,'份)') AS selectedOptions,
|
||||
GROUP_CONCAT(DISTINCT t2.mobile) AS mobile,
|
||||
GROUP_CONCAT(DISTINCT t2.receiveAddress) AS receiveAddress,
|
||||
t4.username AS userName,
|
||||
@@ -62,7 +73,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_OPERATOR.name())) {
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) {
|
||||
cnd.and("t1.welfareUnionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
|
||||
@@ -105,8 +116,9 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
t1.id,
|
||||
t1.welfareUnionName,
|
||||
t1.welfareUnitName,
|
||||
GROUP_CONCAT(DISTINCT t3.optionName) AS selectedOptions,
|
||||
GROUP_CONCAT(DISTINCT t3.optionName,'(',t2.selectNum,'份)') AS selectedOptions,
|
||||
GROUP_CONCAT(DISTINCT t2.mobile) AS mobile,
|
||||
GROUP_CONCAT(DISTINCT t2.userName) AS userName2,
|
||||
GROUP_CONCAT(DISTINCT t2.receiveAddress) AS receiveAddress,
|
||||
t4.username AS userName,
|
||||
t4.loginname AS loginName,
|
||||
@@ -120,7 +132,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_OPERATOR.name())) {
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) {
|
||||
cnd.and("t1.welfareUnionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
|
||||
@@ -167,9 +179,10 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
entities.add(new ExcelExportEntity("所属单位", "welfareUnitName", 20));
|
||||
entities.add(new ExcelExportEntity("所属工会", "welfareUnionName", 20));
|
||||
entities.add(new ExcelExportEntity("所选福利", "selectedOptions", 20));
|
||||
entities.add(new ExcelExportEntity("收货人", "userName2", 20));
|
||||
entities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
|
||||
if(project.getProvideMode() == 3){
|
||||
if (project.getProvideMode() == 3) {
|
||||
entities.add(new ExcelExportEntity("收货地址", "receiveAddress", 40));
|
||||
}
|
||||
|
||||
@@ -183,4 +196,87 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
log.error("导出Excel失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveXlsx(WelfareSelectionSituationPageForm pageForm, HttpServletResponse response) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.*,
|
||||
t2.userSign,
|
||||
t3.username userName,
|
||||
t3.loginname loginName,
|
||||
GROUP_CONCAT(DISTINCT t2.selectOptionId) AS selectOptionIds
|
||||
FROM
|
||||
welfare_list t1
|
||||
LEFT JOIN welfare_project_user_selection t2 ON t2.welfareId = t1.projectId
|
||||
AND t2.selectUserId = t1.userId
|
||||
LEFT JOIN sys_user t3 ON t3.id = t1.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t1.projectId", "=", pageForm.getProjectId());
|
||||
cnd.groupBy("t1.id");
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) {
|
||||
cnd.and("t1.welfareUnionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.asc("t1.welfareUnitId");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = listMap(sql);
|
||||
List<WelfareProjectSubjectOption> optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", pageForm.getProjectId()).asc("optionSort"));
|
||||
|
||||
for (NutMap map : list) {
|
||||
if (map.get("selectOptionIds") != null) {
|
||||
String[] selectOptionIds = map.getString("selectOptionIds").split(",");
|
||||
for (WelfareProjectSubjectOption option : optionList) {
|
||||
if (Arrays.asList(selectOptionIds).contains(option.getId())) {
|
||||
map.put(option.getOptionName(), "√");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (map.get("userSign") != null) {
|
||||
try {
|
||||
Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", map.getString("userSign")));
|
||||
byte[] userSignBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
||||
map.put("userSign", userSignBytes);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("下载图片失败", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<Map<String, Object>> safeList = list.stream().map(nutMap -> {
|
||||
Map<String, Object> map = new HashMap<>(nutMap);
|
||||
return map;
|
||||
}).toList();
|
||||
|
||||
// 分组
|
||||
Map<String, List<Map<String, Object>>> listMap = safeList.stream()
|
||||
.collect(Collectors.groupingBy(n -> (String) n.get("welfareUnionName")));
|
||||
|
||||
// 构建 Excel 列
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
optionList.forEach(option -> {
|
||||
entities.add(new ExcelExportEntity(option.getOptionName(), option.getOptionName(), 20));
|
||||
});
|
||||
ExcelExportEntity userSignEntity = new ExcelExportEntity("签字", "userSign", 20);
|
||||
userSignEntity.setType(2);
|
||||
userSignEntity.setExportImageType(2);
|
||||
entities.add(userSignEntity);
|
||||
|
||||
// 导出
|
||||
Workbook workbook = new HSSFWorkbook();
|
||||
listMap.forEach((k, v) -> {
|
||||
ExcelExportService service = new ExcelExportService();
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setSheetName(k);
|
||||
exportParams.setType(ExcelType.HSSF);
|
||||
service.createSheetForMap(workbook, exportParams, entities, v);
|
||||
});
|
||||
|
||||
CommonDownloadUtil.download("领取表.xls", workbook, response);
|
||||
}
|
||||
}
|
||||
|
||||
+66
-13
@@ -7,11 +7,14 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.welfare.model.WelfareProject;
|
||||
import com.budwk.app.zhgh.welfare.model.WelfareProjectSubjectOption;
|
||||
import com.budwk.app.zhgh.welfare.service.WelfareStatisticsService;
|
||||
@@ -44,9 +47,15 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
@Override
|
||||
public NutMap pageData(String projectId, String unionId) {
|
||||
// 分工会数据
|
||||
List<Sys_union> unions = dao().query(Sys_union.class, Cnd.NEW().andEX(Sys_union::getId, "=", unionId).asc(Sys_union::getUnionCode));
|
||||
List<Sys_union> unions;
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) {
|
||||
unions = dao().query(Sys_union.class, Cnd.NEW().andEX(Sys_union::getId, "=", SecurityUtil.getUnionId()).asc(Sys_union::getUnionCode));
|
||||
} else {
|
||||
unions = dao().query(Sys_union.class, Cnd.NEW().andEX(Sys_union::getId, "=", unionId).asc(Sys_union::getUnionCode));
|
||||
}
|
||||
List<NutMap> mapUnions = BeanUtil.copyToList(unions, NutMap.class);
|
||||
|
||||
|
||||
// 表格动态列数据
|
||||
List<NutMap> dynamicTableColumns = new ArrayList<>() {{
|
||||
add(NutMap.NEW().addv("label", "分工会").addv("prop", "name"));
|
||||
@@ -97,11 +106,12 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
|
||||
for (NutMap union : mapUnions) {
|
||||
// 福利人数
|
||||
long teacherSum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id"))).count();
|
||||
long teacherSum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id"))).count();
|
||||
union.put("teacherSum", teacherSum);
|
||||
|
||||
|
||||
// 已选人数
|
||||
long selectedNum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count();
|
||||
long selectedNum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count();
|
||||
union.put("selectedNum", selectedNum);
|
||||
|
||||
// 未选人数
|
||||
@@ -109,8 +119,25 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
|
||||
// 各选项的选择人数
|
||||
for (WelfareProjectSubjectOption option : welfareOptions) {
|
||||
long count = userSelections.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId").equals(union.getString("id")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count();
|
||||
union.put(option.getId(), count);
|
||||
int total = userSelections.stream()
|
||||
.filter(v ->
|
||||
StrUtil.isNotBlank(v.getString("welfareUnionId"))
|
||||
&& v.getString("welfareUnionId").equals(union.getString("id"))
|
||||
&& StrUtil.isNotBlank(v.getString("selectOptionId"))
|
||||
&& v.getString("selectOptionId").equals(option.getId())
|
||||
&& StrUtil.isNotBlank(v.getString("selectUserId")) // 确保 userId 有效
|
||||
)
|
||||
.collect(Collectors.toMap(
|
||||
v -> v.getString("selectUserId"),
|
||||
v -> v,
|
||||
(existing, replacement) -> existing // 保留第一个
|
||||
// 不传第四个参数,默认用 HashMap
|
||||
))
|
||||
.values()
|
||||
.stream()
|
||||
.mapToInt(v -> v.getInt("selectNum"))
|
||||
.sum();
|
||||
union.put(option.getId(), total);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -305,7 +332,6 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
entities.add(new ExcelExportEntity("单位", "welfareUnitName", 20));
|
||||
entities.add(new ExcelExportEntity("工会", "welfareUnionName", 20));
|
||||
|
||||
@@ -360,7 +386,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
exportEntities.add(new ExcelExportEntity("电话号码", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所在分工会", "welfareUnionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所在单位", "welfareUnitName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所在福利", "optionName", 50));
|
||||
exportEntities.add(new ExcelExportEntity("所选福利", "selectOptionName", 50));
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -419,14 +445,22 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("分工会", "name", 20));
|
||||
entities.add(new ExcelExportEntity("本次福利会员人数", "teacherSum", 20));
|
||||
entities.add(new ExcelExportEntity("已选人数", "selectedNum", 20));
|
||||
entities.add(new ExcelExportEntity("未选人数", "unSelectedNum", 20));
|
||||
ExcelExportEntity teacherSumEntity = new ExcelExportEntity("本次福利会员人数", "teacherSum", 20);
|
||||
teacherSumEntity.setType(10);
|
||||
entities.add(teacherSumEntity);
|
||||
ExcelExportEntity selectedNumEntity = new ExcelExportEntity("已选人数", "selectedNum", 20);
|
||||
selectedNumEntity.setType(10);
|
||||
entities.add(selectedNumEntity);
|
||||
ExcelExportEntity unSelectedNumEntity = new ExcelExportEntity("未选人数", "unSelectedNum", 20);
|
||||
unSelectedNumEntity.setType(10);
|
||||
entities.add(unSelectedNumEntity);
|
||||
|
||||
// 选项数据
|
||||
List<WelfareProjectSubjectOption> welfareOptions = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", projectId));
|
||||
for (WelfareProjectSubjectOption welfareOption : welfareOptions) {
|
||||
entities.add(new ExcelExportEntity(welfareOption.getOptionName(), welfareOption.getId(), 20));
|
||||
ExcelExportEntity entity = new ExcelExportEntity(welfareOption.getOptionName(), welfareOption.getId(), 20);
|
||||
entity.setType(10);
|
||||
entities.add(entity);
|
||||
}
|
||||
|
||||
// 查询福利名单以及查询出选项数据
|
||||
@@ -442,6 +476,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t1.projectId", "=", projectId);
|
||||
cnd.groupBy("t1.userId");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> welfareSelectionList = listMap(sql);
|
||||
|
||||
@@ -457,6 +492,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
""");
|
||||
Cnd cnd2 = Cnd.NEW();
|
||||
cnd2.and("t1.welfareId", "=", projectId);
|
||||
|
||||
sql2.setCondition(cnd2);
|
||||
List<NutMap> userSelections = listMap(sql2);
|
||||
|
||||
@@ -474,8 +510,25 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
||||
|
||||
// 各选项的选择人数
|
||||
for (WelfareProjectSubjectOption option : welfareOptions) {
|
||||
long count = userSelections.stream().filter(v -> v.getString("welfareUnionId").equals(union.getString("id")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count();
|
||||
union.put(option.getId(), count);
|
||||
int total = userSelections.stream()
|
||||
.filter(v ->
|
||||
StrUtil.isNotBlank(v.getString("welfareUnionId"))
|
||||
&& v.getString("welfareUnionId").equals(union.getString("id"))
|
||||
&& StrUtil.isNotBlank(v.getString("selectOptionId"))
|
||||
&& v.getString("selectOptionId").equals(option.getId())
|
||||
&& StrUtil.isNotBlank(v.getString("selectUserId")) // 确保 userId 有效
|
||||
)
|
||||
.collect(Collectors.toMap(
|
||||
v -> v.getString("selectUserId"),
|
||||
v -> v,
|
||||
(existing, replacement) -> existing // 保留第一个
|
||||
// 不传第四个参数,默认用 HashMap
|
||||
))
|
||||
.values()
|
||||
.stream()
|
||||
.mapToInt(v -> v.getInt("selectNum"))
|
||||
.sum();
|
||||
union.put(option.getId(), total);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user