Merge remote-tracking branch 'origin/main'

This commit is contained in:
@jyuhsin
2025-10-31 14:50:39 +08:00
8 changed files with 613 additions and 34 deletions
@@ -132,6 +132,16 @@ public class FamilyActivity extends BaseModel implements Serializable, SysHomeCo
@ColDefine(type = ColType.VARCHAR, width = 50)
private String onlyKey;
@Column
@Comment("主办单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> hostUnitIds;
@Column
@Comment("承办单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> undertakeUnitIds;
@Override
public Sys_home_activity covertToSysHomeActivity() {
Sys_home_activity sysHomeActivity = new Sys_home_activity();
@@ -114,6 +114,16 @@ public class FellowshipActivity extends BaseModel implements Serializable, SysHo
@ColDefine(type = ColType.VARCHAR, width = 20)
private String trainType;
@Column
@Comment("主办单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> hostUnitIds;
@Column
@Comment("承办单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> undertakeUnitIds;
@Override
public Sys_home_activity covertToSysHomeActivity() {
Sys_home_activity sysHomeActivity = new Sys_home_activity();
@@ -0,0 +1,265 @@
package com.budwk.app.zhgh.activity.statistics;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
import com.budwk.app.zhgh.activity.family.models.FamilyActivity;
import com.budwk.app.zhgh.activity.fellowship.models.FellowshipActivity;
import com.budwk.app.zhgh.activity.sports.models.ActivitySchool;
import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_collection;
import com.budwk.app.zhgh.club.model.SysClub;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author zhf
* @date 2025/10/30 14:32
* @description 系统活动统计
*/
@IocBean
@Ok("json:full")
@At("/platform/activity/statistics")
public class ActivityStatisticsController {
@Inject
private Dao dao;
@At("")
@Ok("beetl:platform/zhgh/activity/statistics/index.html")
@SaCheckPermission("activity.statistics")
public void index() {
}
@At
@SaCheckPermission("activity.statistics")
@ApiOperation("每个活动统计图")
public Result getChartData(Integer year, String undertakeUnitId, String hostUnitId) {
List<NutMap> activityTypeList = this.getData(year, undertakeUnitId, hostUnitId);
return Result.success(activityTypeList);
}
@At
@Ok("void")
@SaCheckPermission("activity.statistics")
@ApiOperation("导出全部的活动")
public void doExport(Integer year, String undertakeUnitId, String hostUnitId, HttpServletResponse response) {
List<NutMap> activityTypeList = this.getData(year, undertakeUnitId, hostUnitId);
List<Sys_unit> unitList = dao.query(Sys_unit.class, Cnd.NEW());
List<SysClub> clubList = dao.query(SysClub.class, Cnd.NEW());
clubList.forEach(club -> {
Sys_unit unit = new Sys_unit();
unit.setId(club.getId());
unit.setName(club.getClubName());
unitList.add(unit);
});
List<NutMap> activityList = new ArrayList<>();
for (NutMap nutMap : activityTypeList) {
List<NutMap> asList = nutMap.getAsList("activityList", NutMap.class);
if (nutMap.getString("activityType").equals("sports")) {
if (Lang.isNotEmpty(asList)) {
for (NutMap map : asList) {
map.setv("activityName", map.getString("name"));
map.setv("activityTypeName", nutMap.getString("activityTypeName"));
List<String> hostUnitIds = map.getAsList("unitSponsor", String.class);
List<String> undertakeUnitIds = map.getAsList("undertakeUnit", String.class);
String hostUnitNames = getUnitNames(hostUnitIds, unitList);
String undertakeUnitNames = getUnitNames(undertakeUnitIds, unitList);
map.setv("hostUnitNames", hostUnitNames);
map.setv("undertakeUnitNames", undertakeUnitNames);
}
}
} else {
if (Lang.isNotEmpty(asList)) {
for (NutMap map : asList) {
map.setv("activityTypeName", nutMap.getString("activityTypeName"));
if (nutMap.getString("activityType").equals("trainSignUp")){
List<String> hostUnitIds = map.getAsList("hostUnits", String.class);
List<String> undertakeUnitIds = map.getAsList("helpUnits", String.class);
if (Lang.isNotEmpty(hostUnitIds)) {
String hostUnitNames = getUnitNames(hostUnitIds, unitList);
map.setv("hostUnitNames", hostUnitNames);
}
if (Lang.isNotEmpty(undertakeUnitIds)) {
String undertakeUnitNames = getUnitNames(undertakeUnitIds, unitList);
map.setv("undertakeUnitNames", undertakeUnitNames);
}
}else{
List<String> hostUnitIds = map.getAsList("hostUnitIds", String.class);
List<String> undertakeUnitIds = map.getAsList("undertakeUnitIds", String.class);
if (Lang.isNotEmpty(hostUnitIds)) {
String hostUnitNames = getUnitNames(hostUnitIds, unitList);
map.setv("hostUnitNames", hostUnitNames);
}
if (Lang.isNotEmpty(undertakeUnitIds)) {
String undertakeUnitNames = getUnitNames(undertakeUnitIds, unitList);
map.setv("undertakeUnitNames", undertakeUnitNames);
}
}
if (nutMap.getString("activityType").equals("culture")) {
map.setv("activityName", map.getString("name"));
} else if (nutMap.getString("activityType").equals("trainSignUp")) {
map.setv("startTime", DateUtil.format(map.getTime("activityStartTime"), "yyyy-MM-dd"));
map.setv("endTime", DateUtil.format(map.getTime("activityEndTime"), "yyyy-MM-dd"));
}else if (nutMap.getString("activityType").equals("worksCollection")){
map.setv("activityName", map.getString("name"));
map.setv("startTime", DateUtil.format(map.getTime("startDateTime"), "yyyy-MM-dd"));
map.setv("endTime", DateUtil.format(map.getTime("endDateTime"), "yyyy-MM-dd"));
}else if (nutMap.getString("activityType").equals("family")){
map.setv("startTime", DateUtil.format(map.getTime("activityStartTime"), "yyyy-MM-dd"));
map.setv("endTime", DateUtil.format(map.getTime("activityEndTime"), "yyyy-MM-dd"));
}else if (nutMap.getString("activityType").equals("fellowship")){
map.setv("startTime", DateUtil.format(map.getTime("activityStartTime"), "yyyy-MM-dd"));
map.setv("endTime", DateUtil.format(map.getTime("activityEndTime"), "yyyy-MM-dd"));
}
}
}
}
if (Lang.isNotEmpty(asList)) {
activityList.addAll(asList);
}
}
try {
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("活动类型", "activityTypeName", 20));
entityList.add(new ExcelExportEntity("活动名称", "activityName", 40));
entityList.add(new ExcelExportEntity("活动开始时间", "startTime", 40));
entityList.add(new ExcelExportEntity("活动结束时间", "endTime", 40));
entityList.add(new ExcelExportEntity("主办单位", "hostUnitNames", 40));
entityList.add(new ExcelExportEntity("承办单位", "undertakeUnitNames", 40));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, activityList);
CommonDownloadUtil.download("活动汇总表.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
public List<NutMap> getData(Integer year, String undertakeUnitId, String hostUnitId) {
List<NutMap> activityTypeList = new ArrayList<>();
activityTypeList.add(NutMap.NEW().setv("activityType", "sports").setv("activityTypeName", "体育活动"));
activityTypeList.add(NutMap.NEW().setv("activityType", "culture").setv("activityTypeName", "文化活动"));
activityTypeList.add(NutMap.NEW().setv("activityType", "trainSignUp").setv("activityTypeName", "品牌活动"));
activityTypeList.add(NutMap.NEW().setv("activityType", "worksCollection").setv("activityTypeName", "作品征集"));
activityTypeList.add(NutMap.NEW().setv("activityType", "family").setv("activityTypeName", "亲子活动"));
activityTypeList.add(NutMap.NEW().setv("activityType", "fellowship").setv("activityTypeName", "单身联谊"));
for (NutMap map : activityTypeList) {
Cnd cnd = Cnd.NEW();
if (map.getString("activityType").equals("sports")) {
cnd.andEX("YEAR(startTime)", "=", year);
if (StrUtil.isNotBlank(undertakeUnitId)) {
cnd.and(new Static("JSON_CONTAINS(undertakeUnit, JSON_ARRAY('%s'))".formatted(undertakeUnitId)));
}
if (StrUtil.isNotBlank(hostUnitId)) {
cnd.and(new Static("JSON_CONTAINS(unitSponsor, JSON_ARRAY('%s'))".formatted(hostUnitId)));
}
cnd.asc("startTime");
List<ActivitySchool> activityList = dao.query(ActivitySchool.class, cnd);
map.setv("count", activityList.size());
map.setv("activityList", activityList);
} else {
if (map.getString("activityType").equals("trainSignUp")){
if (StrUtil.isNotBlank(undertakeUnitId)) {
cnd.and(new Static("JSON_CONTAINS(helpUnits, JSON_ARRAY('%s'))".formatted(undertakeUnitId)));
}
if (StrUtil.isNotBlank(hostUnitId)) {
cnd.and(new Static("JSON_CONTAINS(hostUnits, JSON_ARRAY('%s'))".formatted(hostUnitId)));
}
}else{
if (StrUtil.isNotBlank(undertakeUnitId)) {
cnd.and(new Static("JSON_CONTAINS(undertakeUnitIds, JSON_ARRAY('%s'))".formatted(undertakeUnitId)));
}
if (StrUtil.isNotBlank(hostUnitId)) {
cnd.and(new Static("JSON_CONTAINS(hostUnitIds, JSON_ARRAY('%s'))".formatted(hostUnitId)));
}
}
if (map.getString("activityType").equals("culture")) {
cnd.andEX("YEAR(startTime)", "=", year);
cnd.asc("startTime");
List<ActivityTissue> activityList = dao.query(ActivityTissue.class, cnd);
map.setv("count", activityList.size());
map.setv("activityList", activityList);
} else if (map.getString("activityType").equals("trainSignUp")) {
cnd.andEX("year", "=", year);
cnd.asc("activitySignUpStartTime");
List<TrainSignUpActivity> activityList = dao.query(TrainSignUpActivity.class, cnd);
map.setv("count", activityList.size());
map.setv("activityList", activityList);
} else if (map.getString("activityType").equals("worksCollection")) {
cnd.andEX("YEAR(startDateTime)", "=", year);
cnd.asc("startDateTime");
List<Activity_works_collection> activityList = dao.query(Activity_works_collection.class, cnd);
map.setv("count", activityList.size());
map.setv("activityList", activityList);
} else if (map.getString("activityType").equals("family")) {
cnd.andEX("year", "=", year);
cnd.asc("activitySignUpStartTime");
List<FamilyActivity> activityList = dao.query(FamilyActivity.class, cnd);
map.setv("count", activityList.size());
map.setv("activityList", activityList);
} else if (map.getString("activityType").equals("fellowship")) {
cnd.andEX("year", "=", year);
cnd.asc("activitySignUpStartTime");
List<FellowshipActivity> activityList = dao.query(FellowshipActivity.class, cnd);
map.setv("count", activityList.size());
map.setv("activityList", activityList);
}
}
}
return activityTypeList;
}
private String getUnitNames(List<String> unitIds, List<Sys_unit> units) {
String unitNames = units.stream()
.filter(unit -> unitIds.contains(unit.getId())) // 筛选 id 为 '111' 或 '222' 的对象
.map(unit -> unit.getName()) // 获取 name 属性
.collect(Collectors.joining(",")); // 用逗号连接,你可以根据需要更改分隔符
return unitNames;
}
}
@@ -107,6 +107,16 @@ public class Activity_works_collection extends BaseModel {
@Default(value = "1")
private Boolean isSubmit;
@Column
@Comment("主办单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> hostUnitIds;
@Column
@Comment("承办单位")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> undertakeUnitIds;
@Many(field = "activityId")
private List<Activity_works_subjectType> subjectTypes;