活动-用户相关功能

This commit is contained in:
attiya 2025-10-09 10:17:56 +08:00
parent dca80cbc5b
commit 7b5059efad
13 changed files with 182 additions and 41 deletions

View File

@ -125,6 +125,12 @@
<artifactId>jackson-datatype-jsr310</artifactId> <artifactId>jackson-datatype-jsr310</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -1,7 +1,10 @@
package com.cdzy.activity.controller; package com.cdzy.activity.controller;
import com.cdzy.activity.mapper.ActivityUserMapper; import com.cdzy.activity.mapper.ActivityUserMapper;
import com.cdzy.activity.model.*; import com.cdzy.activity.model.Activity;
import com.cdzy.activity.model.JsonResult;
import com.cdzy.activity.model.PageParam;
import com.cdzy.activity.model.User;
import com.cdzy.activity.model.dto.ActivityDto; import com.cdzy.activity.model.dto.ActivityDto;
import com.cdzy.activity.model.vo.ActivityVo; import com.cdzy.activity.model.vo.ActivityVo;
import com.cdzy.activity.service.ActivityService; import com.cdzy.activity.service.ActivityService;
@ -10,7 +13,7 @@ import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired; import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -36,7 +39,8 @@ public class ActivityController {
@Resource @Resource
private UserService userService; private UserService userService;
@Autowired
@Resource
private ActivityUserMapper activityUserMapper; private ActivityUserMapper activityUserMapper;
/** /**
@ -53,6 +57,15 @@ public class ActivityController {
return JsonResult.success(paged); return JsonResult.success(paged);
} }
/**
* 用户数据导出
*
*/
@PostMapping("user/export")
public void export(HttpServletResponse response) throws Exception {
userService.exportUserData(response);
}
/** /**
* 添加 * 添加
* *
@ -113,7 +126,7 @@ public class ActivityController {
.select(USER.ALL_COLUMNS) .select(USER.ALL_COLUMNS)
.where(ACTIVITY_USER.ACTIVITY_ID.eq(activity.getActivityId())) .where(ACTIVITY_USER.ACTIVITY_ID.eq(activity.getActivityId()))
.leftJoin(USER).on(USER.USER_ID.eq(ACTIVITY_USER.USER_ID)); .leftJoin(USER).on(USER.USER_ID.eq(ACTIVITY_USER.USER_ID));
List<User> list = activityUserMapper.selectListByQueryAs(queryWrapper,User.class); List<User> list = activityUserMapper.selectListByQueryAs(queryWrapper, User.class);
ActivityDto activityDto = new ActivityDto(activity, list); ActivityDto activityDto = new ActivityDto(activity, list);
return JsonResult.success(activityDto); return JsonResult.success(activityDto);
} }

View File

@ -1,5 +1,6 @@
package com.cdzy.activity.model; package com.cdzy.activity.model;
import com.alibaba.excel.annotation.ExcelProperty;
import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.KeyType;
@ -30,49 +31,59 @@ public class User implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ExcelProperty(value = "用户ID", index = 0)
@Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId) @Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId)
private Long userId; private Long userId;
@ExcelProperty(value = "用户微信唯一标识", index = 1)
private String wxOpenId; private String wxOpenId;
/** /**
* 姓名 * 姓名
*/ */
@ExcelProperty(value = "姓名", index = 2)
private String name; private String name;
/** /**
* 手机号 * 手机号
*/ */
@ExcelProperty(value = "手机号", index = 3)
private String phone; private String phone;
/** /**
* 性别 * 性别
*/ */
@ExcelProperty(value = "性别", index = 4)
private String gender; private String gender;
/** /**
* 地址 * 地址
*/ */
@ExcelProperty(value = "地址", index = 5)
private String address; private String address;
/** /**
* 年龄 * 年龄
*/ */
@ExcelProperty(value = "年龄", index = 6)
private Integer age; private Integer age;
/** /**
* 慢性病史1- 2- * 慢性病史1- 2-
*/ */
@ExcelProperty(value = "慢性病史1-有 2-无", index = 7)
private Integer chronicDiseasesHistory; private Integer chronicDiseasesHistory;
/** /**
* 所患慢性病 * 所患慢性病
*/ */
@ExcelProperty(value = "所患慢性病", index = 8)
private String chronicDisease; private String chronicDisease;
/** /**
* 健康1-健康 2-不健康 * 健康1-健康 2-不健康
*/ */
@ExcelProperty(value = "健康状态", index = 9)
private Integer heath; private Integer heath;
/** /**

View File

@ -5,6 +5,7 @@ import com.cdzy.activity.model.vo.RegistrationVo;
import com.cdzy.activity.model.vo.UserVo; import com.cdzy.activity.model.vo.UserVo;
import com.mybatisflex.core.service.IService; import com.mybatisflex.core.service.IService;
import com.cdzy.activity.model.User; import com.cdzy.activity.model.User;
import jakarta.servlet.http.HttpServletResponse;
/** /**
* 服务层 * 服务层
@ -21,4 +22,6 @@ public interface UserService extends IService<User> {
ActivityInfo activityInfo(Long activityId); ActivityInfo activityInfo(Long activityId);
void cancel(RegistrationVo registrationVo); void cancel(RegistrationVo registrationVo);
void exportUserData(HttpServletResponse response) throws Exception;
} }

View File

@ -1,5 +1,6 @@
package com.cdzy.activity.service.impl; package com.cdzy.activity.service.impl;
import com.alibaba.excel.EasyExcel;
import com.cdzy.activity.mapper.ActivityMapper; import com.cdzy.activity.mapper.ActivityMapper;
import com.cdzy.activity.mapper.ActivityUserMapper; import com.cdzy.activity.mapper.ActivityUserMapper;
import com.cdzy.activity.mapper.UserRegistrationActivityMapper; import com.cdzy.activity.mapper.UserRegistrationActivityMapper;
@ -15,9 +16,12 @@ import com.cdzy.activity.model.User;
import com.cdzy.activity.mapper.UserMapper; import com.cdzy.activity.mapper.UserMapper;
import com.cdzy.activity.service.UserService; import com.cdzy.activity.service.UserService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.net.URLEncoder;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import static com.cdzy.activity.model.table.ActivityTableDef.ACTIVITY; import static com.cdzy.activity.model.table.ActivityTableDef.ACTIVITY;
import static com.cdzy.activity.model.table.ActivityUserTableDef.ACTIVITY_USER; import static com.cdzy.activity.model.table.ActivityUserTableDef.ACTIVITY_USER;
@ -162,4 +166,27 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
userRegistrationActivityMapper.delete(userRegistrationActivity); userRegistrationActivityMapper.delete(userRegistrationActivity);
} }
@Override
public void exportUserData(HttpServletResponse response) throws Exception {
QueryWrapper queryWrapper = QueryWrapper.create();
List<User> list = userMapper.selectListByQuery(queryWrapper);
// 2. 设置响应头
setupResponse(response, "用户数据");
// 3. 写入Excel
EasyExcel.write(response.getOutputStream(), User.class)
.sheet("用户数据")
.doWrite(list);
}
private void setupResponse(HttpServletResponse response, String fileName) throws Exception {
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName + ".xlsx");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
}
} }

Binary file not shown.

View File

@ -1,37 +0,0 @@
package com.cdzy.activity.model.vo.table;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.table.TableDef;
public class UserVoTableDef extends TableDef{
public static final UserVoTableDef USER_VO=new UserVoTableDef();
public final QueryColumn IS_FILLED =new QueryColumn(this,"");
public final QueryColumn CHRONIC_DISEASES_HISTORY =new QueryColumn(this,"chronicDiseasesHistory");
public final QueryColumn ADDRESS =new QueryColumn(this,"address");
public final QueryColumn PHONE =new QueryColumn(this,"phone");
public final QueryColumn CHRONIC_DISEASE =new QueryColumn(this,"chronicDisease");
public final QueryColumn GENDER =new QueryColumn(this,"gender");
public final QueryColumn HEATH =new QueryColumn(this,"heath");
public final QueryColumn WX_OPEN_ID =new QueryColumn(this,"wxOpenId");
public final QueryColumn AGE =new QueryColumn(this,"age");
public final QueryColumn NAME =new QueryColumn(this,"name");
/**
* 所有字段
*/
public final QueryColumn ALL_COLUMNS=new QueryColumn(this,"*");
/**
* 默认字段不包含逻辑删除或者 large 等字段
*/
public final QueryColumn[]DEFAULT_COLUMNS=new QueryColumn[]{ IS_FILLED , CHRONIC_DISEASES_HISTORY , ADDRESS , PHONE , CHRONIC_DISEASE , GENDER , HEATH , WX_OPEN_ID , AGE , NAME };
public UserVoTableDef(){super("","user");}
private UserVoTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public UserVoTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new UserVoTableDef("", "user", alias));
}
}

View File

@ -0,0 +1,3 @@
artifactId=ActivityRegistration
groupId=com.cdzy
version=0.0.1-SNAPSHOT

View File

@ -0,0 +1,64 @@
com\cdzy\activity\component\ActivityStatusScheduler.class
com\cdzy\activity\service\StaffService.class
com\cdzy\activity\model\User.class
com\cdzy\activity\model\Bulletin$BulletinBuilder.class
com\cdzy\activity\model\PageParam.class
com\cdzy\activity\controller\ImagePreviewController.class
com\cdzy\activity\model\JsonResult.class
com\cdzy\activity\model\UserRegistrationActivity.class
com\cdzy\activity\model\vo\BulletinVo$BulletinVoBuilder.class
com\cdzy\activity\mapper\BulletinMapper.class
com\cdzy\activity\component\WebMvcConfig$StringToLocalDateTimeConverter.class
com\cdzy\activity\controller\ActivityController.class
com\cdzy\activity\uitls\FileUtils.class
com\cdzy\activity\mapper\UserMapper.class
com\cdzy\activity\model\UserRegistrationActivity$UserRegistrationActivityBuilder.class
com\cdzy\activity\service\impl\UserServiceImpl.class
com\cdzy\activity\mapper\ActivityMapper.class
com\cdzy\activity\model\vo\RegistrationVo.class
com\cdzy\activity\enums\ActivityStatus.class
com\cdzy\activity\model\dto\ActivityInfo.class
com\cdzy\activity\controller\BulletinController.class
com\cdzy\activity\model\ActivityUser.class
com\cdzy\activity\mapper\StaffMapper.class
com\cdzy\activity\component\WebMvcConfig$LocalDateTimeToStringConverter.class
com\cdzy\activity\mapper\ActivityUserMapper.class
com\cdzy\activity\component\WebMvcConfig.class
com\cdzy\activity\model\vo\StaffVo.class
com\cdzy\activity\service\impl\ActivityServiceImpl.class
com\cdzy\activity\controller\StaffController.class
com\cdzy\activity\model\vo\UserVo.class
com\cdzy\activity\model\dto\ActivityDto.class
com\cdzy\activity\component\WechatConfig.class
com\cdzy\activity\model\vo\ActivityVo.class
com\cdzy\activity\model\UserCollectActivity.class
com\cdzy\activity\model\vo\UserVo$UserVoBuilder.class
com\cdzy\activity\uitls\VerifyUtil.class
com\cdzy\activity\component\SaTokenConfigure.class
com\cdzy\activity\model\Bulletin.class
com\cdzy\activity\service\impl\BulletinServiceImpl.class
com\cdzy\activity\controller\UserController.class
com\cdzy\activity\component\JacksonConfig.class
com\cdzy\activity\enums\Message.class
com\cdzy\activity\model\vo\BulletinVo.class
com\cdzy\activity\mapper\UserRegistrationActivityMapper.class
com\cdzy\activity\service\ActivityService.class
com\cdzy\activity\service\BulletinService.class
com\cdzy\activity\model\Activity.class
com\cdzy\activity\service\impl\StaffServiceImpl.class
com\cdzy\activity\model\ActivityUser$ActivityUserBuilder.class
com\cdzy\activity\ActivityRegistrationApplication.class
com\cdzy\activity\enums\Code.class
com\cdzy\activity\model\dto\ActivityInfo$ActivityInfoBuilder.class
com\cdzy\activity\component\GlobalExceptionHandler.class
com\cdzy\activity\model\vo\StaffVo$StaffVoBuilder.class
com\cdzy\activity\model\UserCollectActivity$UserCollectActivityBuilder.class
com\cdzy\activity\model\Staff.class
com\cdzy\activity\component\ImageConfig.class
com\cdzy\activity\model\Staff$StaffBuilder.class
com\cdzy\activity\uitls\ImageToBase64Converter.class
com\cdzy\activity\mapper\UserCollectActivityMapper.class
com\cdzy\activity\model\User$UserBuilder.class
com\cdzy\activity\model\Activity$ActivityBuilder.class
com\cdzy\activity\model\vo\ActivityVo$ActivityVoBuilder.class
com\cdzy\activity\service\UserService.class

View File

@ -0,0 +1,50 @@
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\ActivityRegistrationApplication.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\ActivityStatusScheduler.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\GlobalExceptionHandler.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\ImageConfig.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\JacksonConfig.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\SaTokenConfigure.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\WebMvcConfig.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\component\WechatConfig.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\controller\ActivityController.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\controller\BulletinController.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\controller\ImagePreviewController.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\controller\StaffController.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\controller\UserController.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\enums\ActivityStatus.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\enums\Code.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\enums\Message.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\ActivityMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\ActivityUserMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\BulletinMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\StaffMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\UserCollectActivityMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\UserMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\mapper\UserRegistrationActivityMapper.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\Activity.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\ActivityUser.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\Bulletin.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\dto\ActivityDto.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\dto\ActivityInfo.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\JsonResult.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\PageParam.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\Staff.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\User.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\UserCollectActivity.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\UserRegistrationActivity.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\vo\ActivityVo.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\vo\BulletinVo.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\vo\RegistrationVo.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\vo\StaffVo.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\model\vo\UserVo.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\ActivityService.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\BulletinService.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\impl\ActivityServiceImpl.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\impl\BulletinServiceImpl.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\impl\StaffServiceImpl.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\impl\UserServiceImpl.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\StaffService.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\service\UserService.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\uitls\FileUtils.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\uitls\ImageToBase64Converter.java
D:\Projects\ActivityRegistration\src\main\java\com\cdzy\activity\uitls\VerifyUtil.java

View File

@ -0,0 +1 @@
D:\Projects\ActivityRegistration\src\test\java\com\cdzy\activity\ActivityRegistrationApplicationTests.java