first commit

This commit is contained in:
2026-09-08 20:09:15 +08:00
commit c7e76e98ab
1647 changed files with 210480 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>3.6.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<modules>
<module>ruoyi-system</module>
<module>ruoyi-job</module>
<module>ruoyi-file</module>
<module>ruoyi-member</module>
<module>ruoyi-jdh</module>
<module>ruoyi-proposal</module>
<module>ruoyi-activity</module>
<module>ruoyi-staffService</module>
<module>ruoyi-threeEducation</module>
<module>ruoyi-additional</module>
</modules>
<artifactId>ruoyi-modules</artifactId>
<packaging>pom</packaging>
<description>
ruoyi-modules业务模块
</description>
</project>
+131
View File
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi-modules</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.6.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-modules-activity</artifactId>
<properties>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.fox.version}</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- RuoYi Common DataSource -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId>
</dependency>
<!-- RuoYi Common DataScope -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-swagger</artifactId>
</dependency>
<!-- nutz -->
<dependency>
<groupId>org.nutz</groupId>
<artifactId>nutz-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api-activity</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api-system</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>15</source>
<target>15</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,24 @@
package com.ruoyi.activity;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @ClassName RuoYiActivityApplication
* @Description TODO
* @Author JyuHsin
* @Date 2022/12/13 16:54
* @Version 1.0
*/
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
public class RuoYiActivityApplication {
public static void main(String[] args) {
SpringApplication.run(RuoYiActivityApplication.class, args);
}
}
@@ -0,0 +1,28 @@
package com.ruoyi.activity.config;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName TomcatConfig
* @Description TODO
* @Author zhaoxinyu
* @Date 2022/12/19 13:46
* @Version 1.0
*/
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}
@@ -0,0 +1,161 @@
package com.ruoyi.activity.controller.basic;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.constant.ActivityBasicScopePageForm;
import com.ruoyi.activity.api.domain.template.UserTemp;
import com.ruoyi.activity.service.basic.ActivityBasicScopeService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/4
* @Description
*/
@RestController
@RequestMapping("/basic/scope")
public class ActivityBasicScopeController {
@Autowired
private Dao dao;
@Autowired
public RedisTemplate redisTemplate;
@Autowired
private ActivityBasicScopeService activityBasicScopeService;
@Autowired
public ActivityBasicScopeController(ActivityBasicScopeService activityBasicScopeService) {
this.activityBasicScopeService = activityBasicScopeService;
}
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody ActivityBasicScopePageForm pageForm) {
Pagination pagination = activityBasicScopeService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@GetMapping("getActivityUserScopeGroup")
public AjaxResult getActivityUserScopeGroup() {
Sql sql = Sqls.create("""
SELECT
groupId,
groupName
FROM
activity_user_scope
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin,H06,H10")) {
if (AuthUtil.hasAnyRoles("H04, H02")) {
cnd.and("creator", "=", SecurityUtils.getUserId());
}
}
cnd.and("groupId", "IS NOT", null);
cnd.and("groupName", "IS NOT", null);
cnd.groupBy("groupId");
sql.setCondition(cnd);
List list = activityBasicScopeService.listMap(sql);
return AjaxResult.success(list);
}
/**
* @param pageForm
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 设置活动人员
* @author zhf
* @date 2023/1/11 13:46
*/
@PostMapping("/doSetActivityUser")
public AjaxResult doSetActivityUser(@RequestBody ActivityBasicScopePageForm pageForm,
@RequestParam(required = false, value = "setGroupType") Integer setGroupType,
@RequestParam(required = false, value = "setGroupId") Integer setGroupId,
@RequestParam(required = false, value = "setGroupName") String setGroupName) {
Integer activityUser = activityBasicScopeService.doSetActivityUser(pageForm, setGroupType, setGroupId, setGroupName);
return AjaxResult.success(activityUser);
}
@PostMapping("/doImport")
public Object doImport(MultipartFile file) {
String matchUserLoginNamesKey = "ActivityBasicScopeController.doImport.time=" + System.currentTimeMillis();
try {
List<UserTemp> userImportList = ExcelImportUtil.importExcel(file.getInputStream(), UserTemp.class, new ImportParams());
//判断人员哪些存在哪些不存在
Sql sql = Sqls.queryString("""
SELECT
u.loginName
FROM
`user` u
""");
dao.execute(sql);
String[] sysLoginNames = (String[]) sql.getResult();
//存在的工号
List<String> existsLoginNames = new ArrayList<>();
for (UserTemp excelUser : userImportList) {
if (ArrayUtil.contains(sysLoginNames, excelUser.getLoginName())) {
existsLoginNames.add(excelUser.getLoginName());
} else {
excelUser.setRemarks("系统查不到此人");
}
}
//匹配不到的用户
List<UserTemp> errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getRemarks())).collect(Collectors.toList());
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", userImportList.size());
nutMap.setv("successCount", existsLoginNames.size());
nutMap.setv("errorCount", errorExcelTempUsers.size());
nutMap.setv("errorList", errorExcelTempUsers.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getRemarks());
}).collect(Collectors.toList()));
nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey);
//保存存在的工号
if (Lang.isNotEmpty(existsLoginNames)) {
redisTemplate.opsForList().leftPushAll(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0]));
redisTemplate.expire(matchUserLoginNamesKey, Duration.ofDays(60 * 3));
}
return AjaxResult.success("核对成功", nutMap);
} catch (Exception e) {
e.printStackTrace();
}
return AjaxResult.error();
}
@PostMapping("/doExportUser")
public void doExportUser(@RequestParam String props, @RequestBody ActivityBasicScopePageForm pageForm, HttpServletResponse response) {
activityBasicScopeService.doExportUser(props, pageForm, response);
}
}
@@ -0,0 +1,99 @@
package com.ruoyi.activity.controller.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicSettings;
import com.ruoyi.activity.service.basic.ActivityBasicSettingsService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* TODO
* 活动基础设置
*
* @Author zhf
* @Date 2023/1/9 9:25
*/
@RestController
@RequestMapping("/basic/settings")
public class ActivityBasicSettingsController {
@Autowired
private ActivityBasicSettingsService basicSettingsService;
@PostMapping("pageData")
@RequiresPermissions("activity:basic:settings")
public Object pageData(@RequestParam(value = "parentId", required = false) String parentId, @RequestBody PageForm pageForm) {
Cnd cnd = Cnd.NEW();
cnd.andEX("parentId", "=", parentId);
cnd.asc("code");
return AjaxResult.success(basicSettingsService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd));
}
@GetMapping("getTreeData")
@RequiresPermissions("activity:basic:settings")
public Object getTreeData() {
List list = new ArrayList();
ActivityBasicSettings parentId = basicSettingsService.fetch(Cnd.where("parentId", "=", "0"));
if (parentId != null) {
parentId.setChildren(child(parentId.getId()));
list.add(parentId);
return AjaxResult.success(list);
}
return null;
}
private List<ActivityBasicSettings> child(String parentId) {
List<ActivityBasicSettings> basicSettings = basicSettingsService.query(Cnd.where("parentId", "=", parentId).asc("code"));
basicSettings.forEach(v -> {
v.setChildren(child(v.getId()));
});
return basicSettings;
}
@PostMapping("/doAddType")
@RequiresPermissions("activity:basic:settings")
public AjaxResult doAddType(@RequestBody ActivityBasicSettings activityBasicSettings) {
if (basicSettingsService.count(Cnd.where("code", "=", activityBasicSettings.getCode())) > 0) {
return AjaxResult.error("代码已存在");
}
basicSettingsService.update(Chain.make("hasChildren", true), Cnd.where("id", "=", activityBasicSettings.getParentId()));
basicSettingsService.insert(activityBasicSettings);
return AjaxResult.success();
}
@PostMapping("/doEditType")
@RequiresPermissions("activity:basic:settings")
public AjaxResult doEditType(@RequestBody ActivityBasicSettings activityBasicSettings) {
basicSettingsService.updateIgnoreNull(activityBasicSettings);
return AjaxResult.success();
}
@PostMapping("/doDelete")
@RequiresPermissions("activity:basic:settings")
public Object doDelete(@RequestParam String id) {
basicSettingsService.delete(id);
basicSettingsService.clear(Cnd.where("parentId", "=", id));
return AjaxResult.success();
}
@GetMapping("/getActivityTwoLevelType")
@RequiresPermissions("activity:basic:settings")
public Object getActivityTwoLevelType(@RequestParam String code) {
ActivityBasicSettings fetch = basicSettingsService.fetch(Cnd.where("code", "=", code));
List<ActivityBasicSettings> query = basicSettingsService.query(Cnd.where("parentId", "=", fetch.getId()).asc("code"));
return AjaxResult.success(query);
}
}
@@ -0,0 +1,256 @@
package com.ruoyi.activity.controller.basic;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.constant.ActivityBasicScopePageForm;
import com.ruoyi.activity.api.domain.template.UserTemp;
import com.ruoyi.activity.service.basic.ActivityBasicScopeService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.annotation.RequiresRoles;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/11 16:03
*/
@RestController
@RequestMapping("/basic/user")
public class ActivityBasicUserController {
@Autowired
private ActivityBasicScopeService basicScopeService;
@Autowired
public RedisTemplate redisTemplate;
@PostMapping("/pageData")
@RequiresRoles(value = {"admin", "A06", "H01"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody ActivityBasicScopePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
aus.id,
u.userName,
u.loginName ,
u.sex,
u.birthday,
u.mobile,
u.personType,
u.userState,
u.deptName AS unitName,
u.unionName,
aus.groupId,
aus.groupName,
actun.unionname AS activityUnionName
FROM
activity_user_scope aus
LEFT JOIN `user` u ON u.userId = aus.userId
LEFT JOIN activity_basic_unit actit ON actit.dept_id = u.deptId
LEFT JOIN activity_basic_union actun ON actit.union_id = actun.id
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.andEX("actit.union_id", "=", pageForm.getActivityUnionId());
cnd.andEX("actit.dept_id", "=", pageForm.getActivityUnitId());
cnd.andEX("aus.groupId", "=", pageForm.getActivityGroupId());
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
cnd.andEX("u.userState", "=", pageForm.getUserState());
cnd.andEX("u.unionGroupId", "=", pageForm.getUnionGroupId());
cnd.andEX("u.threeUnitId", "=", pageForm.getThreeUnitId());
if (!AuthUtil.hasAnyRoles("admin,A06")) {
cnd.andEX("aus.creator", "=", SecurityUtils.getUserId());
}
if (StrUtil.isNotBlank(pageForm.getExistsLoginNameRedisKey()) && redisTemplate.hasKey(pageForm.getExistsLoginNameRedisKey())) {
List<String> loginNames = redisTemplate.opsForList().range(pageForm.getExistsLoginNameRedisKey(), 0, -1);
cnd.andEX("u.loginname", "in", loginNames);
}
sql.setCondition(cnd);
Pagination pagination = basicScopeService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("/doDelete")
@RequiresPermissions("activity:basic:user")
public AjaxResult doDelete(@RequestParam(required = false, value = "id") String id,
@RequestBody ActivityBasicScopePageForm pageForm) {
basicScopeService.doDelete(id, pageForm);
return AjaxResult.success();
}
@PostMapping("/downloadImport")
@RequiresPermissions("activity.basic.user")
public void downloadImport(HttpServletResponse response) {
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("人员导入模板.xlsx", StandardCharsets.UTF_8)));
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("姓名", "username", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, new ArrayList<>());
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
@PostMapping("/doExportUser")
public void doExportUser(@RequestParam Integer groupId, HttpServletResponse response) {
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("活动分组人员.xlsx", StandardCharsets.UTF_8)));
Sql sql = Sqls.create("""
SELECT
u.userName,
u.loginName,
u.sex,
u.mobile,
u.deptName AS unitName,
u.unionName AS unionName
FROM
activity_user_scope aus
LEFT JOIN `user` u ON u.userId = aus.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("aus.groupId", "=", groupId);
sql.setCondition(cnd);
List<NutMap> listMap = basicScopeService.listMap(sql);
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
exportEntities.add(new ExcelExportEntity("工号", "loginName", 20));
exportEntities.add(new ExcelExportEntity("工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
exportEntities.add(new ExcelExportEntity("手机号码", "mobile", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, listMap);
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 清空查询条件
*
* @param existsLoginNameRedisKey
* @return java.lang.Object
* @author zhf
* @description
*/
@PostMapping("/clearSearchCnd")
@RequiresPermissions("activity.basic.user")
public Object clearSearchCnd(String existsLoginNameRedisKey) {
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
redisTemplate.delete(existsLoginNameRedisKey);
}
return AjaxResult.success();
}
@PostMapping("/doImport")
@RequiresPermissions("activity.basic.user")
public Object doImport(@RequestParam String groupId, MultipartFile file) {
String matchUserLoginNamesKey = "ActivityBasicUserController.doImport.groupId=" + groupId + "time=" + System.currentTimeMillis();
try {
List<UserTemp> userImportList = ExcelImportUtil.importExcel(file.getInputStream(), UserTemp.class, new ImportParams());
//判断人员哪些存在哪些不存在
Sql sql = Sqls.queryString("""
SELECT
u.loginName
FROM
activity_user_scope aus
LEFT JOIN user u ON u.userId = aus.userId
WHERE
aus.groupId = @groupId
""").setParam("groupId", groupId);
basicScopeService.execute(sql);
String[] sysLoginNames = (String[]) sql.getResult();
//存在的工号
List<String> existsLoginNames = new ArrayList<>();
for (UserTemp excelUser : userImportList) {
if (ArrayUtil.contains(sysLoginNames, excelUser.getLoginName())) {
existsLoginNames.add(excelUser.getLoginName());
} else {
excelUser.setRemarks("系统查不到此人");
}
}
//匹配不到的用户
List<UserTemp> errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getRemarks())).collect(Collectors.toList());
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", userImportList.size());
nutMap.setv("successCount", existsLoginNames.size());
nutMap.setv("errorCount", errorExcelTempUsers.size());
nutMap.setv("errorList", errorExcelTempUsers.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getRemarks());
}).collect(Collectors.toList()));
nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey);
//保存存在的工号
if (Lang.isNotEmpty(existsLoginNames)) {
redisTemplate.opsForList().leftPushAll(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0]));
redisTemplate.expire(matchUserLoginNamesKey, Duration.ofDays(60 * 3));
}
return AjaxResult.success("核对成功", nutMap);
} catch (Exception e) {
e.printStackTrace();
}
return AjaxResult.error();
}
}
@@ -0,0 +1,159 @@
package com.ruoyi.activity.controller.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicSettings;
import com.ruoyi.activity.api.domain.basic.ActivityEvent;
import com.ruoyi.activity.service.basic.ActivityBasicSettingsService;
import com.ruoyi.activity.service.basic.ActivityEventService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* TODO
* 比赛项目
*
* @Author zhf
* @Date 2023/1/9 14:50
*/
@RestController
@RequestMapping("/basic/event")
public class ActivityEventController {
@Autowired
private ActivityBasicSettingsService basicSettingsService;
@Autowired
private ActivityEventService activityEventService;
@PostMapping("/pageData")
@RequiresPermissions("activity:basic:event")
public Object pageData(@RequestBody PageForm page,
@RequestParam(required = false) String group,
@RequestParam(required = false) String events,
@RequestParam(required = false, name = "isMenWomen[]") List<String> isMenWomen,
@RequestParam(required = false) String activityId) {
Sql sql = Sqls.create("""
SELECT
even.*,
ba.`name` baname,
di.`name` diname,
sp.`name` spname,
exe.`name` exename
FROM
activity_event even
LEFT JOIN activity_school_event ase ON ase.eventId = even.id
LEFT JOIN activity_basic_settings ba ON even.competitionCategory = ba.id
LEFT JOIN activity_basic_settings di ON even.distance = di.id
LEFT JOIN activity_basic_settings sp ON even.sports = sp.id
LEFT JOIN activity_basic_settings exe ON even.exerciseType = exe.id $condition
""");
Cnd cnd = Cnd.NEW();
SqlExpressionGroup sqlExpressionGroup = new SqlExpressionGroup();
if (Lang.isNotEmpty(isMenWomen)) {
if (isMenWomen.stream().anyMatch(a -> a.equals("2"))) {
sqlExpressionGroup.and("even.isMenWomen", "=", 1);
}
if (isMenWomen.stream().anyMatch(a -> a.equals("3"))) {
sqlExpressionGroup.or("even.isMenWomen", "=", 2);
}
if (isMenWomen.stream().anyMatch(a -> a.equals("4"))) {
sqlExpressionGroup.and("even.projectType", "=", 1);
}
if (isMenWomen.stream().anyMatch(a -> a.equals("5"))) {
sqlExpressionGroup.or("even.projectType", "=", 2);
}
}
if (sqlExpressionGroup.getExps().size() > 0) {
cnd.and(sqlExpressionGroup);
}
cnd.groupBy("even.id");
cnd.andEX("even.competitionCategory", "=", group);
cnd.andEX("exe.id", "=", events);
cnd.andEX("ase.activityId", "=", activityId);
cnd.desc("projectCode");
cnd.asc("projectType");
cnd.desc("baname");
cnd.asc("isMenWomen");
sql.setCondition(cnd);
return AjaxResult.success(activityEventService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
/**
* 根据code查询下面的子集
*
* @param code
* @return
*/
@GetMapping("/getParentIdByCodeOrId")
@RequiresPermissions("activity:basic:event")
public AjaxResult getParentIdByCodeOrId(@RequestParam(value = "code", required = false) Integer code,
@RequestParam(value = "id", required = false) String id) {
if (code != null || Strings.isNotBlank(id)) {
Cnd cnd = Cnd.NEW();
cnd.orEX("code", "=", code);
cnd.orEX("id", "=", id);
ActivityBasicSettings basicSettings = basicSettingsService.fetch(cnd);
List<ActivityBasicSettings> basicSettingsList = basicSettingsService.query(Cnd.where("parentId", "=", basicSettings.getId()).asc("code"));
return AjaxResult.success(basicSettingsList);
}
return AjaxResult.success(new ArrayList<>());
}
@PostMapping("/doAdd")
@RequiresPermissions("activity:basic:event")
public AjaxResult doAdd(@RequestBody ActivityEvent activityEvent) {
int projectCode = activityEventService.count(Cnd.where("projectCode", "=", activityEvent.getProjectCode()));
if (projectCode > 0) {
return AjaxResult.error("编号已存在");
}
activityEvent.setWhetherEnable(true);
activityEventService.insert(activityEvent);
return AjaxResult.success();
}
@PostMapping("/doEdit")
@RequiresPermissions("activity:basic:event")
public AjaxResult doEdit(@RequestBody ActivityEvent activityEvent) {
activityEventService.update(activityEvent);
return AjaxResult.success();
}
@PostMapping("/doAssignmentDate")
@RequiresPermissions("activity:basic:event")
public AjaxResult doAssignmentDate(@RequestParam(required = false, name = "eventIds[]") List<String> eventIds,
@RequestParam String startAgeDate,
@RequestParam String endAgeDate) {
for (String eventId : eventIds) {
activityEventService.update(Chain.make("startAgeDate", startAgeDate).add("endAgeDate", endAgeDate), Cnd.where("id", "=", eventId));
}
return AjaxResult.success();
}
@DeleteMapping("/doDelete/{id}")
@RequiresPermissions("activity:basic:event")
public AjaxResult doDelete(@PathVariable String id) {
activityEventService.delete(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,195 @@
package com.ruoyi.activity.controller.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnion;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnit;
import com.ruoyi.activity.service.basic.ActivityUnionService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.stream.Collectors;
/**
* TODO
* 活动工会
*
* @Author zhf
* @Date 2023/1/12 11:19
*/
@RestController
@RequestMapping("/basic/union")
public class ActivityUnionController {
@Autowired
private ActivityUnionService basicUnionService;
@Autowired
private RemoteUserRoleService remoteUserRoleService;
/**
* 树形数据
*/
@RequestMapping("/tree")
@RequiresPermissions("activity:basic:union")
public AjaxResult tree() {
NutMap nutMap = NutMap.NEW();
nutMap.setv("unionName", "工会委员会");
List<ActivityBasicUnion> list = basicUnionService.query();
nutMap.setv("children", list);
return AjaxResult.success(Lang.list(nutMap));
}
/**
* 分页数据
*/
@RequestMapping("/listPage")
@RequiresPermissions("activity:basic:union")
public AjaxResult listPage(Integer pageNumber, Integer pageSize, String unionName) {
return AjaxResult.success(basicUnionService.pageData(pageNumber, pageSize, unionName));
}
/**
* 修改分工会
*/
@PostMapping("/update")
@RequiresPermissions("activity:basic:union")
public AjaxResult update(@RequestBody ActivityBasicUnion union) {
basicUnionService.updateIgnoreNull(union);
return AjaxResult.success();
}
/**
* 新增分工会
*/
@PostMapping("/add")
@RequiresPermissions("activity:basic:union")
public AjaxResult add(@RequestBody ActivityBasicUnion union) {
basicUnionService.insert(union);
return AjaxResult.success();
}
/**
* 删除分工会
*/
@PostMapping("/remove/{id}")
@RequiresPermissions("activity:basic:union")
public AjaxResult remove(@PathVariable String id) {
basicUnionService.remove(id);
return AjaxResult.success();
}
/**
* 查询该分工会下的人
*/
@RequestMapping("/unionUsers/{id}")
public AjaxResult unionUsers(@PathVariable String id) {
Sql sql = Sqls.create("""
SELECT
u.userId,
u.deptId,
u.loginName,
u.userName,
u.deptName
FROM
`user` u
LEFT JOIN activity_basic_unit it ON u.deptId = it.dept_id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("it.union_id", "=", id);
sql.setCondition(cnd);
return AjaxResult.success(basicUnionService.listMap(sql));
}
/**
* 查询该分工会下的管理员
*/
@RequestMapping("/unionAdmins/{id}")
public AjaxResult unionAdmins(@PathVariable String id) {
Sql sql = Sqls.create("""
SELECT
u.userId,
u.deptId,
u.loginName,
u.userName,
dept.dept_name AS deptNames
FROM
`user` u
LEFT JOIN activity_basic_unit dept ON dept.dept_id = u.deptId
$condition
""").setParam("unionId", id);
List<FeignCnd> cndList = List.of(
new FeignCnd("role_id", "=", Roles.FGH_ADMIN)
);
List<SysUserRole> sysUserRoles = remoteUserRoleService.getUserRole(cndList).getData();
List<Long> userids = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
Cnd cnd = Cnd.NEW();
cnd.and("dept.union_id", "=", id);
cnd.and("u.userId", "in", userids);
sql.setCondition(cnd);
return AjaxResult.success(basicUnionService.listMap(sql));
}
/**
* 没有分配分工会的二级单位
*/
@GetMapping("/units")
public AjaxResult units(@Valid @RequestParam String id) {
Cnd cnd = Cnd.NEW();
cnd.and("parentId", "=", 100);
cnd.and("status", "=", 0);
cnd.and("delFlag", "=", 0);
cnd.and("union_id", "is", null);
List<ActivityBasicUnit> units = basicUnionService.dao().query(ActivityBasicUnit.class, cnd);
return AjaxResult.success(units);
}
/**
* 本分工会的二级单位
*/
@GetMapping("/selfUnits")
public AjaxResult selfUnits(@Valid @RequestParam String id) {
Cnd cnd = Cnd.NEW();
cnd.and("unit_level", "=", 2);
// cnd.and("status", "=", 0);
// cnd.and("delFlag", "=", 0);
cnd.and("unionId", "=", id);
List<ActivityBasicUnit> units = basicUnionService.dao().query(ActivityBasicUnit.class, cnd);
return AjaxResult.success(units);
}
/**
* 分配二级单位
*/
@PostMapping("/setUnit")
public AjaxResult setUnit(@RequestParam String units, @RequestParam String unionId) {
String[] unitArray = units.split(",");
if (unitArray.length > 0) {
try {
basicUnionService.setUnit(unionId, unitArray);
return AjaxResult.success();
} catch (Exception e) {
return AjaxResult.error();
}
} else {
return AjaxResult.error();
}
}
}
@@ -0,0 +1,91 @@
package com.ruoyi.activity.controller.basic;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnit;
import com.ruoyi.activity.service.basic.ActivityUnitService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* TODO
* 活动单位
*
* @Author zhf
* @Date 2023/1/12 9:11
*/
@RestController
@RequestMapping("/basic/unit")
public class ActivityUnitController extends BaseController {
@Autowired
private ActivityUnitService activityUnitService;
/**
* 获取部门列表
*/
@RequiresPermissions("activity:basic:unit")
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody ActivityBasicUnit basicUnit) {
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(basicUnit.getDeptName())) {
cnd.and(Cnd.likeEX("deptName", basicUnit.getDeptName()));
}
cnd.andEX("deptCode", "=", basicUnit.getDeptCode());
cnd.andEX("status", "=", basicUnit.getStatus());
cnd.desc("deptCode");
List<ActivityBasicUnit> basicUnits = activityUnitService.query(cnd);
return success(basicUnits);
}
/**
* 修改部门
*/
@RequiresPermissions("activity:basic:unit")
@PostMapping("/updateDept")
public AjaxResult updateDept(@RequestBody ActivityBasicUnit basicUnit) {
AjaxResult ajaxResult = activityUnitService.updateDept(basicUnit);
return ajaxResult;
}
/**
* 新增部门
*/
@RequiresPermissions("activity:basic:unit")
@PostMapping("/addDept")
public AjaxResult addDept(@RequestBody ActivityBasicUnit basicUnit) {
AjaxResult ajaxResult = activityUnitService.addDept(basicUnit);
return ajaxResult;
}
/**
* 删除部门
*/
@RequiresPermissions("activity:basic:unit")
@DeleteMapping("handleDelete/{deptId}")
public AjaxResult handleDelete(@PathVariable Long deptId) {
int count = activityUnitService.count(Cnd.where("parentId", "=", deptId));
if (count > 0) {
return warn("存在下级部门,不允许删除");
}
activityUnitService.delete(deptId);
return success();
}
/**
* 根据部门编号获取详细信息
*/
@RequiresPermissions("activity:basic:unit")
@GetMapping(value = "/getInfo/{deptId}")
public AjaxResult getInfo(@PathVariable Long deptId) {
return success(activityUnitService.fetch(deptId));
}
}
@@ -0,0 +1,227 @@
package com.ruoyi.activity.controller.common;
import com.ruoyi.activity.api.domain.basic.ActivityBasicSettings;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnion;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnit;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.activity.service.basic.ActivityBasicScopeService;
import com.ruoyi.activity.service.basic.ActivityBasicSettingsService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.api.RemoteDeptService;
import com.ruoyi.system.api.RemoteUnionService;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/5
* @Description
*/
@RestController
@RequestMapping("/common")
public class ActivityCommonController {
@Autowired
private Dao dao;
@Autowired
private ActivityBasicScopeService activityBasicScopeService;
@Autowired
private ActivityBasicSettingsService basicSettingsService;
@Autowired
private RemoteUserRoleService remoteUserRoleService;
@Autowired
private RemoteUnionService remoteUnionService;
@Autowired
private RemoteDeptService remoteDeptService;
@RequestMapping("getEnumSelect")
public AjaxResult getEnumSelect(String enumName) {
try {
String enumPackage = "com.ruoyi.activity.api.constant";
Class<Enum> clazz = (Class<Enum>) Class.forName(enumPackage + "." + enumName);
Enum[] objs = clazz.getEnumConstants();
List<NutMap> ls = new ArrayList<>();
for (Enum obj : objs) {
String name = obj.name();
NutMap nutMap = Lang.obj2nutmap(obj);
nutMap.put("name", name);
ls.add(nutMap);
}
return AjaxResult.success(ls);
} catch (Exception e) {
return AjaxResult.error();
}
}
/**
* 查询全部角色
*
* @return
*/
@GetMapping("/getRoleList")
public AjaxResult getRoleList() {
List<Record> roleList = remoteUserRoleService.getAllRole().getData();
return AjaxResult.success(roleList);
}
/**
* 查询全部活动工会
*
* @return
*/
@GetMapping("/getActivityUnions")
public AjaxResult getActivityUnions() {
List<ActivityBasicUnion> basicUnions = dao.query(ActivityBasicUnion.class, Cnd.NEW().asc("unionCode"));
return AjaxResult.success(basicUnions);
}
/**
* 查询全部活动单位
*
* @return
*/
@GetMapping("/getActivityUnits")
public AjaxResult getActivityUnits(@RequestParam(required = false, value = "unionId") String id) {
Cnd cnd = Cnd.NEW();
cnd.andEX("unionId", "=", id);
cnd.asc("deptCode");
List<ActivityBasicUnit> basicUnits = dao.query(ActivityBasicUnit.class, cnd);
return AjaxResult.success(basicUnits);
}
/**
* 查询当前人管理的协会
*
* @return
*/
@GetMapping("/getClubsByRole")
public AjaxResult getClubsByRole() {
return AjaxResult.success();
}
/**
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 查询所有活动组别
* @author zhf
* @date 2023/1/10 17:13
*/
@GetMapping("/getActivityUserScopeGroup")
public AjaxResult getActivityUserScopeGroup() {
List<NutMap> activityUserScopeGroup = activityBasicScopeService.getActivityUserScopeGroup();
return AjaxResult.success(activityUserScopeGroup);
}
private static final NutMap activityCodeMap = new NutMap() {{
put("40002", "JC");
put("40003", "XH");
put("40001", "GH");
}};
/**
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description活动编号生成
* @author zhf
* @date 2023/1/16 9:47
*/
@GetMapping("/generateActivityCode")
public AjaxResult generateActivityCode(String activity_type) {
Cnd cnd = Cnd.NEW();
int year = Calendar.getInstance().get(Calendar.YEAR);
cnd.and("LEFT(activityCode,6)", "=", year + activityCodeMap.getString(activity_type));
String code = String.format("%03d", activityBasicScopeService.dao().count(ActivityTissue.class, cnd) + 1);
String activityCode = year + activityCodeMap.getString(activity_type) + code;
return AjaxResult.success().put("data", activityCode);
}
/**
* @param code
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 查询活动基础二级信息
* @author zhf
* @date 2023/1/31 14:45
*/
@GetMapping("/getActivityTwoLevelType")
public AjaxResult getActivityTwoLevelType(String code) {
ActivityBasicSettings fetch = basicSettingsService.fetch(Cnd.where("code", "=", code));
List<ActivityBasicSettings> query = basicSettingsService.query(Cnd.where("parentId", "=", fetch.getId()).asc("code"));
return AjaxResult.success(query);
}
/**
* @param unionId
* @param roleId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 根据角色id或者工会查询用户信息
* @author zhf
* @date 2023/1/31 14:45
*/
@GetMapping("/getUserByRoleOrUnionId")
public AjaxResult getUserByRoleOrUnionId(@RequestParam(required = false, value = "unionId") String unionId,
@RequestParam(required = false, value = "roleId") Integer roleId) {
List<FeignCnd> cndList = List.of(
new FeignCnd("unionId", "=", unionId),
new FeignCnd("role_id", "=", roleId)
);
List<SysUserRole> sysUserRoles = remoteUserRoleService.getUserRole(cndList).getData();
if (Lang.isNotEmpty(sysUserRoles)) {
Sql sql = Sqls.create("select userName,loginName,mobile from `user` $condition");
List<Long> ids = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
Cnd cnd = Cnd.NEW();
cnd.and("userId", "in", ids);
sql.setCondition(cnd);
List<NutMap> nutMapList = basicSettingsService.listMap(sql);
return AjaxResult.success(nutMapList);
}
return AjaxResult.success();
}
@GetMapping("/getScopeUserCount")
public AjaxResult getScopeUserCount(Integer activityGroupId) {
return AjaxResult.success(activityBasicScopeService.getScopeUserCount(activityGroupId));
}
@GetMapping("/getUserScope")
public AjaxResult getUserScope(Integer activityGroupId) {
return AjaxResult.success(activityBasicScopeService.getUserScope(activityGroupId));
}
}
@@ -0,0 +1,105 @@
package com.ruoyi.activity.controller.common;
import com.ruoyi.activity.service.basic.ActivityBasicScopeService;
import com.ruoyi.activity.service.culture.ActivityCultureApplyService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* TODO
* 文化活动公用查询
*
* @Author zhf
* @Date 2023/1/13 14:52
*/
@RestController
@RequestMapping("/culture/common")
public class CultureActivityCommonController {
@Autowired
private BaseService baseService;
@Autowired
private ActivityBasicScopeService basicScopeService;
@Autowired
private RemoteUserRoleService remoteUserRoleService;
@Autowired
private ActivityCultureApplyService cultureApplyService;
@GetMapping("/findUser")
public AjaxResult findUser(@RequestParam(value = "searchWord", required = false) String searchWord,
@RequestParam(value = "activityType", required = false) Integer activityType) {
Sql sql = Sqls.create("""
SELECT
userId,
userName,
loginName,
sex,
mobile,
deptName unitName,
unionName
FROM
`user`
$condition
limit 0,20
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRole("admin")) {
if (activityType == 40002) {
cnd.and("unionId", "=", SecurityUtils.getUnionId());
} else if (activityType == 40003) {
List<FeignCnd> cndList = List.of(
new FeignCnd("userId", "=", SecurityUtils.getUserId()),
new FeignCnd("roleId", "=", Roles.CLUB_PRESIDENT)
);
List<SysUserRole> userRoles = remoteUserRoleService.getUserRole(cndList).getData();
if (Lang.isNotEmpty(userRoles)) {
} else {
cnd.and("1", "!=", "1");
}
}
}
if (Strings.isNotBlank(searchWord)) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.andLike("userName", searchWord);
group.orLike("loginName", searchWord);
cnd.and(group);
}
sql.setCondition(cnd);
return AjaxResult.success(baseService.listMap(sql));
}
@GetMapping("/findOne")
public AjaxResult findOne(String id) {
return cultureApplyService.findOne(id);
}
}
@@ -0,0 +1,96 @@
package com.ruoyi.activity.controller.culture;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.activity.service.culture.ActivityCultureApplyService;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
* 文化活动申请
*
* @Author zhf
* @Date 2023/1/13 14:19
*/
@RestController
@RequestMapping("/culture/apply")
public class ActivityCultureApplyController {
@Autowired
private BaseService baseService;
@Autowired
private ActivityCultureApplyService cultureApplyService;
/**
* @param activityScopeGroupId 空查所有人,不为空查这个组别下的人数
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 查询每个分工会下的人数,
* @author zhf
* @date 2023/1/15 13:54
*/
@GetMapping("/getUnionData")
public AjaxResult getUnionData(@RequestParam(value = "activityScopeGroupId", required = false) String activityScopeGroupId) {
if (StrUtil.isBlank(activityScopeGroupId)) {
Sql sql = Sqls.create("""
SELECT
gh.id,
gh.unionname AS unionName,
count( u.userId ) AS unionNum,
ROUND( count( u.userId ) * 0.5 ) AS limitNum
FROM
`union` gh
LEFT JOIN `user` u ON u.unionid = gh.id
GROUP BY
gh.id
""");
return AjaxResult.success(baseService.listMap(sql));
} else {
Sql sql = Sqls.create("""
SELECT
gh.id,
gh.unionname AS unionName,
(
SELECT
count( 1 )
FROM
`user`
WHERE
userId IN ( SELECT userid FROM activity_user_scope WHERE groupId = @activityScopeGroupId )\s
AND unionId = gh.id
) AS unionNum,
ROUND( count( u.userId ) * 0.5 ) AS limitNum
FROM
`union` gh
LEFT JOIN `user` u ON u.unionid = gh.id
GROUP BY
gh.id
""").setParam("activityScopeGroupId", activityScopeGroupId);
return AjaxResult.success(baseService.listMap(sql));
}
}
@PostMapping("/doAdd")
public AjaxResult doAdd(@RequestBody ActivityTissue tissue) {
cultureApplyService.doAdd(tissue);
return AjaxResult.success("创建成功");
}
@PostMapping("/doEdit")
public AjaxResult doEdit(@RequestBody ActivityTissue tissue) {
cultureApplyService.doEdit(tissue);
return AjaxResult.success("修改成功");
}
}
@@ -0,0 +1,141 @@
package com.ruoyi.activity.controller.culture;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.culture.ActivityTissuePerson;
import com.ruoyi.activity.service.culture.ActivityCultureApplyUserService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @ClassName ActivityCultureApplyUserController
* @Description TODO
* @Author zhf
* @Date 2024/6/18 16:35
*/
@RestController
@RequestMapping("/culture/applyUser")
public class ActivityCultureApplyUserController {
@Autowired
private BaseService baseService;
@Autowired
private ActivityCultureApplyUserService activityCultureApplyUserService;
@PostMapping("/pageData")
@RequiresPermissions(value = {"activity:culture:SchoolActivityApplyUser","activity:culture:UnionActivityApplyUser","activity:culture:ClubActivityApplyUser"}, logical = Logical.OR)
public Object pageData(@RequestBody PageForm page,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "activityType", required = false) Integer activityType) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
tissue.*,
uni.unionname ,
abs.`name` projectTypeName
FROM
activity_tissue tissue
LEFT JOIN `union` uni ON uni.id = tissue.unionId
LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode
$condition
""");
cnd.andEX("YEAR(tissue.startTime)", "=", year);
cnd.andEX("tissue.type", "=", activityType);
cnd.andEX("tissue.state", "=", 3);
cnd.andEX("tissue.projectTypeCode", "!=", 50004);
cnd.andEX("tissue.signUpMethod", "in", List.of(1, 2,3));
if (Strings.isNotBlank(name)) {
cnd.where().andLike("tissue.name", name);
}
if (!AuthUtil.hasAnyRoles("A06,admin")) {
}
cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=tissue.groupId AND userId='%s') >0".formatted(SecurityUtils.getUserId())));
if (StrUtil.isNotBlank(page.getPageOrderName()) && StrUtil.isNotBlank(page.getPageOrderBy())) {
cnd.orderBy(page.getPageOrderName(), page.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
} else {
cnd.desc("tissue.startTime");
}
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
List<NutMap> list = pagination.getList();
list.forEach(v -> {
String activityId = v.getString("id");
int signUpMethod = v.getInt("signUpMethod");
if (signUpMethod == 1 || signUpMethod == 3) {
int count = baseService.dao().count(ActivityTissuePerson.class,
Cnd.where("tissueId", "=", activityId)
.and("applyUserId", "=", SecurityUtils.getUserId()));
v.setv("countUser", count);
} else if (signUpMethod == 2) {
Sql sqlApplyUser = Sqls.create("""
SELECT
COUNT(*)
FROM
`activity_tissue_person` atp
LEFT JOIN `user` u ON u.userId = atp.userId
where atp.tissueId=@tissueId and u.unionid=@unionid
""").setParam("tissueId", activityId).setParam("unionid", SecurityUtils.getUnionId());
int count = baseService.count(sqlApplyUser);
v.setv("countUser", count);
}
});
pagination.setList(list);
return AjaxResult.success(pagination);
}
@PostMapping("/doSingleRegister")
@RequiresPermissions(value = {"activity:culture:SchoolActivityApplyUser","activity:culture:UnionActivityApplyUser","activity:culture:ClubActivityApplyUser"}, logical = Logical.OR)
public AjaxResult doSingleRegister(@RequestParam String activityId) {
return activityCultureApplyUserService.doSingleRegister(activityId);
}
@DeleteMapping("/doSingleCancelRegister")
@RequiresPermissions(value = {"activity:culture:SchoolActivityApplyUser","activity:culture:UnionActivityApplyUser","activity:culture:ClubActivityApplyUser"}, logical = Logical.OR)
public AjaxResult doSingleCancelRegister(@RequestParam String activityId) {
return activityCultureApplyUserService.doSingleCancelRegister(activityId);
}
@GetMapping("/selfUnionUsers")
@RequiresPermissions(value = {"activity:culture:SchoolActivityApplyUser","activity:culture:UnionActivityApplyUser","activity:culture:ClubActivityApplyUser"}, logical = Logical.OR)
public AjaxResult selfUnionUsers(@RequestParam String groupId) {
return AjaxResult.success(activityCultureApplyUserService.selfUnionUsers(groupId));
}
@GetMapping("/getReportedUser")
@RequiresPermissions(value = {"activity:culture:SchoolActivityApplyUser","activity:culture:UnionActivityApplyUser","activity:culture:ClubActivityApplyUser"}, logical = Logical.OR)
public AjaxResult getReportedUser(@RequestParam String tissueId) {
return AjaxResult.success(activityCultureApplyUserService.getReportedUser(tissueId));
}
@PostMapping("/doSaveUnionRegister")
@RequiresPermissions(value = {"activity:culture:SchoolActivityApplyUser","activity:culture:UnionActivityApplyUser","activity:culture:ClubActivityApplyUser"}, logical = Logical.OR)
public AjaxResult doSaveUnionRegister(@RequestParam String activityId,
@RequestParam(name = "personIds[]") Long[] personIds) {
return activityCultureApplyUserService.doSaveUnionRegister(activityId,personIds);
}
}
@@ -0,0 +1,115 @@
package com.ruoyi.activity.controller.culture;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.activity.service.culture.ActivityCultureApplyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteClubService;
import com.ruoyi.system.api.RemoteUnionService;
import com.ruoyi.system.api.domain.SysUnion;
import com.ruoyi.system.api.domain.club.Sys_club;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/17
* @Description
*/
@RestController
@RequestMapping("/culture/audit")
public class ActivityCultureAuditController {
@Autowired
private ActivityCultureApplyService cultureApplyService;
@Autowired
private RemoteUnionService remoteUnionService;
@Autowired
private RemoteClubService remoteClubService;
@PostMapping("pageData")
@RequiresPermissions(value = {"activity:culture:unionActivityAudit", "activity:culture:clubActivityAudit"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "state", required = false) String state,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "type", required = false) Integer type) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
tissue.*,
abs.`name` projectTypeName
FROM
activity_tissue tissue
LEFT JOIN activity_basic_settings abs ON abs.`code` = tissue.projectTypeCode
$condition
""");
cnd.andEX("YEAR(tissue.startTime)", "=", year);
cnd.andEX("tissue.unionId", "=", unionId);
cnd.andEX("tissue.type", "=", type);
if (Strings.isNotBlank(state)) {
cnd.andEX("tissue.state", state.equals("1") ? ">" : "=", 1);
}
if (Strings.isNotBlank(name)) {
cnd.where().andLike("tissue.name", name);
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.desc("tissue.startTime");
}
sql.setCondition(cnd);
Pagination pagination = cultureApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
//查询所有工会
List<SysUnion> unionList = remoteUnionService.listAll().getData();
Map<String, String> unionMap = unionList.stream().collect(Collectors.toMap(SysUnion::getId, SysUnion::getUnionName));
//查询所有协会
List<Sys_club> clubList = remoteClubService.getClubs().getData();
Map<String, String> clubMap = clubList.stream().collect(Collectors.toMap(Sys_club::getId, Sys_club::getName));
list.forEach(item -> {
item.put("unionName", unionMap.get(item.getString("unionId")));
item.put("clubName", clubMap.get(item.getString("clubId")));
});
return AjaxResult.success(pagination);
}
@PostMapping("doReview")
@RequiresPermissions(value = {"activity:culture:unionActivityAudit", "activity:culture:clubActivityAudit"}, logical = Logical.OR)
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(value = "id", required = false) String id,
@RequestParam(value = "flag", required = false) boolean flag) {
audit.setLoginName(SecurityUtils.getNickName());
cultureApplyService.dao().insert(audit);
cultureApplyService.dao().update(ActivityTissue.class, Chain.make("state", flag ? 3 : 2).add("auditId", audit.getId()), Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,61 @@
package com.ruoyi.activity.controller.culture;
import com.ruoyi.activity.api.domain.culture.ActivityTissuePerson;
import com.ruoyi.activity.service.culture.ActivityCultureApplyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/16 14:02
*/
@RestController
@RequestMapping("/culture/manage")
public class ActivityCultureManageController {
@Autowired
private ActivityCultureApplyService cultureApplyService;
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "clubId", required = false) String clubId,
@RequestParam(value = "activityType", required = false) Integer activityType) {
return cultureApplyService.pageData(page, year, name, unionId, clubId, activityType);
}
@DeleteMapping("/doDelete")
public AjaxResult doDelete(String id) {
cultureApplyService.doDelete(id);
return AjaxResult.success("删除成功");
}
@GetMapping("/searchTissueUser")
public AjaxResult searchTissueUser(String id, @RequestParam(required = false) String search) {
Cnd cnd = Cnd.NEW();
cnd.and("tissueId", "=", id);
if (Strings.isNotBlank(search)) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.andLike("userName", search);
group.orLike("loginName", search);
cnd.and(group);
}
return AjaxResult.success(cultureApplyService.dao().query(ActivityTissuePerson.class, cnd));
}
}
@@ -0,0 +1,186 @@
package com.ruoyi.activity.controller.culture;
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.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.activity.api.domain.culture.ActivityTissuePerson;
import com.ruoyi.activity.service.culture.ActivityCultureApplyUserService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteClubService;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName ActivityCultureUserStatisticsController
* @Description 报名人员统计
* @Author zhf
* @Date 2024/6/19 14:35
*/
@RestController
@RequestMapping("/culture/applyUser/statistics")
public class ActivityCultureUserStatisticsController {
@Autowired
private ActivityCultureApplyUserService activityCultureApplyUserService;
@Autowired
private RemoteClubService remoteClubService;
@PostMapping("/pageData")
@RequiresPermissions(value = {"activity:culture:SchoolActivityUserStatistics", "activity:culture:UnionActivityUserStatistics", "activity:culture:ClubActivityUserStatistics"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(value = "activityType", required = false) Integer activityType,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "unionId", required = false) String unionId) {
Sql sql = Sqls.create("""
SELECT
atp.id,
atp.tissueId,
atp.userId,
atp.loginName,
atp.userName,
atp.unitName,
atp.unionName,
atp.sex,
atp.mobile,
atp.applyUserId,
atp.applyUserName,
atp.applyDateTime
FROM
`activity_tissue_person` atp
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("atp.tissueId", "=", activityId);
cnd.andEX("atp.unionId", "=", unionId);
if (!AuthUtil.hasAnyRoles("admin,A06")) {
if (List.of(40001, 40002).contains(activityType)) {
cnd.and("atp.unionId", "=", SecurityUtils.getUnionId());
} else if (activityType == 40003) {
List<NutMap> clubMap = remoteClubService.getClubsByRole().getData();
List<String> stids = clubMap.stream().map(v -> v.getString("stid")).collect(Collectors.toList());
cnd.and("atp.userId", "in", remoteClubService.getClubUserIdByIdList(stids).getData());
}
}
if (Strings.isNotBlank(page.getSearchName()) && Strings.isNotBlank(page.getSearchKeyword())) {
cnd.where().andLike(page.getSearchName(), page.getSearchKeyword());
}else if (Strings.isBlank(page.getSearchName())&&Strings.isNotBlank(page.getSearchKeyword())){
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("atp.userName", page.getSearchKeyword());
seg.orLike("atp.loginName", page.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isNotBlank(page.getPageOrderName()) && StrUtil.isNotBlank(page.getPageOrderBy())) {
cnd.orderBy(page.getPageOrderName(), page.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
} else {
cnd.desc("atp.applyDateTime");
}
sql.setCondition(cnd);
return AjaxResult.success(activityCultureApplyUserService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@GetMapping("/getActivityByYearOrType")
@RequiresPermissions(value = {"activity:culture:SchoolActivityUserStatistics", "activity:culture:UnionActivityUserStatistics", "activity:culture:ClubActivityUserStatistics"}, logical = Logical.OR)
public AjaxResult getActivityByYearOrType(@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "activityType", required = false) Integer activityType) {
Cnd cnd = Cnd.where("type", "=", activityType);
if (!AuthUtil.hasAnyRoles("admin,A06")) {
cnd.and("signUpMethod", "in", List.of(1, 2, 3));
if (activityType == 40002) {
cnd.and("unionId", "=", SecurityUtils.getUnionId());
}
}
cnd.and("projectTypeCode", "!=", 50004);
cnd.andEX("YEAR(startTime)", "=", year).desc("startTime");
return AjaxResult.success(activityCultureApplyUserService.dao().query(ActivityTissue.class, cnd));
}
@DeleteMapping("/doDeleteActivityUser")
@RequiresPermissions(value = {"activity:culture:SchoolActivityUserStatistics", "activity:culture:UnionActivityUserStatistics", "activity:culture:ClubActivityUserStatistics"}, logical = Logical.OR)
public AjaxResult doDeleteActivityUser(@RequestParam String activityId,
@RequestParam String applyUserId,
@RequestParam String id) {
activityCultureApplyUserService.doDeleteActivityUser(activityId, applyUserId, id);
return AjaxResult.success();
}
@PostMapping("/doExportUser")
@RequiresPermissions(value = {"activity:culture:SchoolActivityUserStatistics", "activity:culture:UnionActivityUserStatistics", "activity:culture:ClubActivityUserStatistics"}, logical = Logical.OR)
public void doExportUser(@RequestParam String activityId,
@RequestParam(value = "unionId", required = false) String unionId, HttpServletResponse response) {
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("活动报名人员.xlsx", StandardCharsets.UTF_8)));
Sql sql = Sqls.create("""
SELECT
atp.loginName,
atp.userName,
atp.unitName,
atp.unionName,
atp.sex,
atp.mobile,
atp.applyUserName,
atp.applyDateTime
FROM
`activity_tissue_person` atp
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("atp.tissueId", "=", activityId);
cnd.andEX("u.unionId", "=", unionId);
sql.setCondition(cnd);
List<ActivityTissuePerson> tissuePeople = activityCultureApplyUserService.listEntity(sql);
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("姓名", "userName", 20));
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
entityList.add(new ExcelExportEntity("性别", "sex", 20));
entityList.add(new ExcelExportEntity("联系方式", "mobile", 20));
entityList.add(new ExcelExportEntity("单位", "unitName", 20));
entityList.add(new ExcelExportEntity("工会", "unionName", 20));
entityList.add(new ExcelExportEntity("报名人", "applyUserName", 20));
entityList.add(new ExcelExportEntity("报名时间", "applyDateTime", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, tissuePeople);
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,371 @@
package com.ruoyi.activity.controller.culture.mobile;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.activity.api.domain.culture.ActivityTissuePerson;
import com.ruoyi.activity.service.culture.ActivityCultureApplyService;
import com.ruoyi.activity.service.culture.mobile.MobileActivityCultureApplyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
/**
* @ClassName mobileActivityCultureManageController
* @Description TODO
* @Author zhf
* @Date 2023/3/1 19:36
*/
@RestController
@RequestMapping("/mobile/culture/manage")
public class MobileActivityCultureManageController {
@Autowired
private ActivityCultureApplyService cultureApplyService;
@Autowired
private MobileActivityCultureApplyService mobileActivityCultureApplyService;
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "activityStatus", required = false) int activityStatus,
@RequestParam(value = "activityLevel", required = false) String activityLevel) {
Sql sql = Sqls.create("""
SELECT
id,
`name`,
address,
startTime,
endTime,
applyStartTime,
applyEndTime,
projectTypeCode,
signUpMethod,
cover
FROM
activity_tissue ti
$condition
UNION
SELECT
id,
`name`,
address,
startTime,
endTime,
applyStartTime,
applyEndTime,
'50004' AS projectTypeCode,
1 AS signUpMethod,
image AS cover
FROM
activity_school sc
$school
$schoolTime
$schoolLevel
$orderBy
""");
Cnd allCnd = Cnd.NEW();
allCnd.andEX("type", "=", activityLevel);
if (Lang.isNotEmpty(year)) {
allCnd.and(Cnd.exps("YEAR(applyStartTime)", "=", year).or("YEAR(applyEndTime)", "=", year));
}
allCnd.and("state", "=", "3");
allCnd.andEX("projectTypeCode", "!=", "50004");
allCnd.and("signUpMethod", "is not", null);
allCnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId= ti.groupId AND userId='%s') >0".formatted(SecurityUtils.getUserId())));
if (!AuthUtil.hasAnyRoles("admin,A06")) {
if (AuthUtil.hasRole("H04")) {
allCnd.andEX("signUpMethod", "in", Lang.array(1, 2));
} else {
allCnd.andEX("signUpMethod", "=", 1);
}
}
sql.setVar("school", """
WHERE
YEAR ( startTime )= %s
AND ( SELECT COUNT( 1 ) FROM activity_user_scope WHERE groupId = sc.activityGroupId AND userId = '%s' ) > 0
AND JSON_CONTAINS(applyWay -> '$[*]','1','$' )
""".formatted(year, SecurityUtils.getUserId()));
switch (activityStatus) {
case 2 -> {
allCnd.and(new Static("applyStartTime < now()"));
allCnd.and(new Static("applyEndTime > now()"));
sql.setVar("schoolTime", "AND applyStartTime < now() AND applyEndTime > now()");
}
case 3 -> {
allCnd.and(new Static("startTime < now()"));
allCnd.and(new Static("endTime > now()"));
sql.setVar("schoolTime", "AND startTime < now() AND endTime > now()");
}
case 4 -> {
allCnd.and(new Static("endTime < now()"));
sql.setVar("schoolTime", "AND endTime < now()");
}
}
if (Strings.isNotBlank(activityLevel)) {
sql.setVar("schoolLevel", "AND activityLevel='%s'".formatted(activityLevel));
}
sql.setVar("orderBy", "ORDER BY startTime DESC");
sql.setCondition(allCnd);
return AjaxResult.success(cultureApplyService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
/**
* @param activityId
* @return
* @author zhf
* @description 验证当前用户是否报名
*/
@GetMapping("/isRegisterForMe")
public AjaxResult isRegisterForMe(String activityId) {
int count = cultureApplyService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId).and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success(count > 0);
}
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 是否签到
*/
@GetMapping("/isSign")
public AjaxResult isSign(String activityId) {
ActivityTissue tissue = cultureApplyService.dao().fetch(ActivityTissue.class, Cnd.where("id", "=", activityId));
ActivityTissuePerson tissuePerson = cultureApplyService.dao().fetch(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId).and("userId", "=", SecurityUtils.getUserId()));
if (Lang.isEmpty(tissuePerson)) {
return AjaxResult.success(false);
}
return AjaxResult.success(tissuePerson.isSign());
}
/**
* @param activityId
* @return 人数
* @author zhf
* @description 查询当前活动报名人数
*/
@GetMapping("/getHasRegUserNum")
public AjaxResult getHasRegUserNum(String activityId) {
ActivityTissue tissue = cultureApplyService.dao().fetch(ActivityTissue.class, Cnd.where("id", "=", activityId));
Integer userNumberLimit = tissue.getUserNumberLimit();
if (userNumberLimit == null || userNumberLimit == 1) {
return AjaxResult.success(cultureApplyService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId)));
} else if (userNumberLimit == 2) {
Sql sql = Sqls.create("""
SELECT
count( 1 )
FROM
activity_tissue_person atp
LEFT JOIN `user` u ON u.userId = atp.userId
WHERE
u.unionid = @unionId
AND atp.tissueId = @activityId
""");
sql.setParam("unionId", SecurityUtils.getUnionId()).setParam("activityId", activityId);
return AjaxResult.success(cultureApplyService.count(sql));
}
return AjaxResult.success(0);
}
@PostMapping("/singleSignUp")
public AjaxResult singleSignUp(String activityId) {
mobileActivityCultureApplyService.singleSignUp(activityId);
return AjaxResult.success("签到成功!");
}
/**
* @param page
* @return java.lang.Object
* @author zhf
* @description 我的活动
*/
@PostMapping("/myPageData")
public Object myPageData(@RequestBody PageForm page) {
String sqlStr = """
SELECT
act.id,
act.`name`,
act.activityCode,
act.applyStartTime,
act.applyEndTime,
act.startTime,
act.endTime,
act.address,
act.activityContent,
act.signUpMethod,
act.userNumberLimit,
act.totalUserNumberLimit,
act.unionUserNumberLimit,
act.cover,
act.location,
act.rangeMeter,
act.needSign,
act.projectTypeCode,
abs.`name` AS projectTypeName,
creater.userName AS createUserName,
creater.mobile as createUserMobile
FROM
activity_tissue act
LEFT JOIN activity_basic_settings abs ON abs.`code`=act.projectTypeCode
LEFT JOIN `user` creater ON creater.userId = act.userId
WHERE
(
act.id IN (SELECT tissueId FROM activity_tissue_person where userId = @userId AND tissueId IS NOT NULL)
OR
act.id IN (SELECT activityId FROM activity_school_apply where userId = @userId AND activityId IS NOT NULL)
)
""";
Sql sql = Sqls.create(sqlStr).setParam("userId", SecurityUtils.getUserId());
return AjaxResult.success(cultureApplyService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
/**
* @param id
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 单个活动信息
*/
@GetMapping("/findOne")
public AjaxResult findOne(String id) {
Sql sql = Sqls.create("""
SELECT
act.id,
act.`name`,
act.activityCode,
act.applyStartTime,
act.applyEndTime,
act.startTime,
act.endTime,
act.address,
act.activityContent,
act.signUpMethod,
act.userNumberLimit,
act.totalUserNumberLimit,
act.unionUserNumberLimit,
act.cover,
act.location,
act.rangeMeter,
act.needSign,
act.projectTypeCode,
act.teamNum,
abs.`name` AS projectTypeName,
creater.userName AS createUserName,
creater.mobile as createUserMobile
FROM
activity_tissue act
LEFT JOIN activity_basic_settings abs ON abs.`code`=act.projectTypeCode
LEFT JOIN `user` creater ON creater.userId = act.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("act.id", "=", id);
sql.setCondition(cnd);
NutMap activityMap = cultureApplyService.fetch(sql);
if (Lang.isNotEmpty(activityMap.getInt("userNumberLimit")) && activityMap.getInt("userNumberLimit") == 2) {
List<NutMap> unionUserNumberLimit = activityMap.getAs("unionUserNumberLimit", List.class);
Optional<NutMap> limitUnionOptional = unionUserNumberLimit.stream().filter(v -> v.getString("id").equals(SecurityUtils.getUnionId())).findFirst();
limitUnionOptional.ifPresent(map -> activityMap.put("limitUnion", map));
}
return AjaxResult.success(activityMap);
}
/**
* @param searchKey
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 查询可报名的人员
*/
@GetMapping("/searchNoRegisterUser")
public AjaxResult searchNoRegisterUser(@RequestParam(required = false) String searchKey, @RequestParam(required = false) String activityId) {
ActivityTissue tissue = cultureApplyService.dao().fetch(ActivityTissue.class, Cnd.where("id", "=", activityId));
Sql sql = Sqls.create("""
SELECT
userId id,
loginName,
userName,
sex,
deptName AS unitName
FROM
`user`
$condition
""");
String unionId = SecurityUtils.getUnionId();
Cnd cnd = Cnd.NEW();
cnd.andEX("unionId", "=", unionId);
if (Lang.isNotEmpty(searchKey)) {
cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim())));
}
cnd.and(new Static("""
userId not in (SELECT userid FROM activity_tissue_person WHERE tissueId = '%s')
""".formatted(activityId)));
if (tissue.getGroupId() != null) {
cnd.and(new Static("""
userId IN ( SELECT userid FROM activity_user_scope WHERE groupId IN ( SELECT groupId FROM activity_tissue WHERE id = '%s' AND groupId IS NOT NULL ) )
""".formatted(activityId)));
}
sql.setCondition(cnd);
return AjaxResult.success(cultureApplyService.listPageMap(1, 10, sql));
}
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 查询已经报名的人员
*/
@GetMapping("/selectRegisterList")
public AjaxResult selectRegisterList(String activityId) {
ActivityTissue activityTissue = mobileActivityCultureApplyService.dao().fetch(ActivityTissue.class, activityId);
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
atp.userId AS id,
atp.userName,
atp.unionId,
atp.applyUserId
FROM
activity_tissue_person atp
$condition
""");
cnd.and("atp.tissueId", "=", activityId);
if (activityTissue.getSignUpMethod() != 3) {
cnd.and("atp.unionId", "=", SecurityUtils.getUnionId());
}
sql.setCondition(cnd);
List<NutMap> list = mobileActivityCultureApplyService.listMap(sql);
return AjaxResult.success(list);
}
}
@@ -0,0 +1,124 @@
package com.ruoyi.activity.controller.fitnessWalk.mp;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalk;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalkEnroll;
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkActivityManageService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/fitnessWalk/h5/activity")
public class FitnessWalkActivityH5Controller {
@Autowired
private FitnessWalkActivityManageService fitnessWalkActivityManageService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param active 1->最新 2->历史
* @return {@link AjaxResult}
*/
@RequestMapping("/pageData")
public AjaxResult pageData(@RequestParam Integer active) {
Sql sql = Sqls.create("""
SELECT
w.id,
w.mainName,
w.branchName,
w.activityModel,
w.apply_start_time,
w.apply_end_time,
w.start_time,
w.end_time,
w.surface,
( SELECT count( 1 ) FROM fitness_walk_enroll fwe WHERE fwe.fitnessWalkId = w.id AND fwe.userId = @userId ) enrollCount
FROM
fitness_walk w
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("w.start_time", active == 1 ? ">=" : "<", DateUtil.format(new Date(), "yyyy-MM-dd"));
sql.setCondition(cnd);
sql.setParam("userId", SecurityUtils.getLoginUser().getUserid());
List<NutMap> list = fitnessWalkActivityManageService.listMap(sql);
return AjaxResult.success(list);
}
/**
* 活动报名信息
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("/activityInfo")
public AjaxResult activityInfo(@RequestParam String id) {
FitnessWalk fitnessWalk = fitnessWalkActivityManageService.fetch(id);
fitnessWalkActivityManageService.fetchLinks(fitnessWalk, "pts", Cnd.NEW().asc("code"));
return AjaxResult.success(fitnessWalk);
}
/**
* 获得报名人数
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("/registerNum")
public AjaxResult registerNum(@RequestParam String id) {
int count = dao.count(FitnessWalkEnroll.class, Cnd.where("fitnessWalkId", "=", id));
return AjaxResult.success(count);
}
/**
* 我的报名信息
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("/myRegisterInfo")
public AjaxResult myRegisterInfo(@RequestParam String id) {
FitnessWalkEnroll enroll = dao.fetch(FitnessWalkEnroll.class, Cnd.where("fitnessWalkId", "=", id).and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success(enroll);
}
/**
* 活动报名
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("/doEnroll")
public AjaxResult doEnroll(@RequestParam String id) {
int count = dao.count(FitnessWalkEnroll.class, Cnd.where("fitnessWalkId", "=", id).and("userId", "=", SecurityUtils.getUserId()));
if (count > 0) {
return AjaxResult.warn("您似乎已经报过名了!");
}
FitnessWalkEnroll fitnessWalkEnroll = new FitnessWalkEnroll();
fitnessWalkEnroll.setFitnessWalkId(id);
fitnessWalkEnroll.setUserId(String.valueOf(SecurityUtils.getUserId()));
fitnessWalkEnroll.setDeptId(String.valueOf(SecurityUtils.getDeptId()));
fitnessWalkEnroll.setUnionId(SecurityUtils.getUnionId());
dao.insert(fitnessWalkEnroll);
return AjaxResult.success("报名成功");
}
}
@@ -0,0 +1,111 @@
package com.ruoyi.activity.controller.fitnessWalk.mp;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalkGift;
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkActivityManageService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/fitnessWalk/h5/gift")
public class FitnessWalkGiftH5Controller {
@Autowired
private Dao dao;
@Autowired
private FitnessWalkActivityManageService walkActivityManageService;
/**
* 礼物券记录
*
* @param active 1->未使用 2—>已使用
* @return {@link AjaxResult}
*/
@RequestMapping("/gifts")
public AjaxResult gifts(@RequestParam Integer active) {
Sql sql = Sqls.create("""
SELECT
fwg.*,
fw.mainName,
fw.branchName,
fw.gift_name,
fw.id as activityId
FROM
`fitness_walk_gift` fwg
LEFT JOIN fitness_walk fw ON fw.id = fwg.fitnessWalkId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("used", "=", active == 1 ? 0 : 1);
cnd.and("userId", "=", SecurityUtils.getUserId());
sql.setCondition(cnd);
List<NutMap> list = walkActivityManageService.listMap(sql);
return AjaxResult.success(list);
}
/**
* 该活动的礼品券信息
*
* @param fitnessWalkId 健身走id
* @return {@link AjaxResult}
*/
@RequestMapping("/giftTicketInfoByActId")
public AjaxResult giftTicketInfoByActId(@RequestParam String fitnessWalkId) {
FitnessWalkGift gift = dao.fetch(FitnessWalkGift.class, Cnd.where("fitnessWalkId", "=", fitnessWalkId).and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success(gift);
}
/**
* 我的领取信息
*
* @param giftId 礼品券id
* @return {@link AjaxResult}
*/
@RequestMapping("/giftTicketInfoById")
public AjaxResult giftTicketInfoById(@RequestParam String giftId) {
FitnessWalkGift gift = dao.fetch(FitnessWalkGift.class, Cnd.where("id", "=", giftId));
return AjaxResult.success(gift);
}
/**
* 生成礼品券
*
* @param fitnessWalkId 健身走id
* @return {@link AjaxResult}
*/
@RequestMapping("/generateGiftTicket")
public AjaxResult generateGiftTicket(@RequestParam String fitnessWalkId) {
FitnessWalkGift gift = new FitnessWalkGift();
gift.setFitnessWalkId(fitnessWalkId);
gift.setUserId(String.valueOf(SecurityUtils.getUserId()));
gift.setGrantTime(new Date());
gift.setUsed(false);
dao.insert(gift);
return AjaxResult.success().put("data", gift.getId());
}
/**
* 使用礼品券
*
* @param giftId 礼物id
* @return {@link AjaxResult}
*/
@GetMapping("/userGiftTicket/{giftId}")
public AjaxResult userGiftTicket(@PathVariable String giftId) {
dao.update(FitnessWalkGift.class, Chain.make("useTime", new Date()).add("used", true), Cnd.where("id", "=", giftId));
return AjaxResult.success();
}
}
@@ -0,0 +1,75 @@
package com.ruoyi.activity.controller.fitnessWalk.mp;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalkGps;
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkActivityManageService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/fitnessWalk/h5/gps")
public class FitnessWalkGpsH5Controller {
@Autowired
private Dao dao;
@Autowired
private FitnessWalkActivityManageService activityManageService;
/**
* 保存
*
* @param fitnessWalkGps 健身走gps模式运动记录
* @return {@link AjaxResult}
*/
@RequestMapping("save")
public AjaxResult save(@RequestBody FitnessWalkGps fitnessWalkGps) {
fitnessWalkGps.setUserId(String.valueOf(SecurityUtils.getUserId()));
dao.insert(fitnessWalkGps);
return AjaxResult.success();
}
/**
* 总距离
*
* @param fitnessWalkId 健身走id
* @return {@link AjaxResult}
*/
@GetMapping("/totalDistance/{fitnessWalkId}")
public AjaxResult totalDistance(@PathVariable String fitnessWalkId) {
Sql sql = Sqls.create("SELECT sum(distance) FROM `fitness_walk_gps` $condition");
Cnd cnd = Cnd.NEW();
cnd.and("userId", "=", SecurityUtils.getUserId());
cnd.and("fitnessWalkId", "=", fitnessWalkId);
sql.setCondition(cnd);
Long totalDistance = (Long) Daos.query(dao, sql.toString(), Sqls.callback.longValue());
return AjaxResult.success().put("data", totalDistance);
}
/**
* 运动历史数据
*
* @param fitnessWalkId 健身走id
* @return {@link AjaxResult}
*/
@GetMapping("/historyData/{fitnessWalkId}")
public AjaxResult historyData(@PathVariable String fitnessWalkId) {
List<FitnessWalkGps> list = dao.query(FitnessWalkGps.class, Cnd.where("fitnessWalkId", "=", fitnessWalkId).and("userId", "=", SecurityUtils.getUserId()).desc("startTime"));
return AjaxResult.success(list);
}
@GetMapping("/historyOneData/{fitnessWalkId}")
public AjaxResult historyOneData(@PathVariable String fitnessWalkId) {
FitnessWalkGps oneData = dao.fetch(FitnessWalkGps.class, Cnd.where("id", "=", fitnessWalkId));
return AjaxResult.success(oneData);
}
}
@@ -0,0 +1,90 @@
package com.ruoyi.activity.controller.fitnessWalk.mp;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.activity.api.domain.basic.ActivityUserScope;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteConfigService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 健身走小程序登录
*
* @author jug
* @date 2023/03/14
*/
@RestController
@RequestMapping("/fitnessWalk/mp")
public class FitnessWalkMpLoginController {
@Autowired
private Dao dao;
@Autowired
private RemoteConfigService remoteConfigService;
@RequestMapping("/getUserInfo")
public AjaxResult getUserInfo() {
R<String> schoolCodeR = remoteConfigService.selectConfigByKey("sys.schoolCode");
String schoolCode = null;
if (schoolCodeR.getCode() == R.SUCCESS) {
schoolCode = schoolCodeR.getMsg();
}
DynamicDataSourceContextHolder.push("system");
Sql sql = Sqls.create("""
SELECT
u.userId AS userid,
u.userName as username,
u.loginName as loginname,
u.sex,
u.mobile,
u.birthday,
u.deptName as unitname,
u.deptId as unitid,
u.member,
u.unionId as unionid,
u.unionName as unionname,
group_concat(r.role_key) roles
FROM
`user` u
left join sys_user_role sur on sur.user_id = u.userId
left join sys_role r on r.role_id = sur.role_id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.userId", "=", SecurityUtils.getLoginUser().getSysUser().getUserId());
cnd.groupBy("u.userId");
sql.setCondition(cnd);
NutMap userMap = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map());
DynamicDataSourceContextHolder.clear();
if (Lang.isNotEmpty(userMap)) {
userMap.setv("schoolCode", schoolCode);
return AjaxResult.success(userMap);
} else {
return AjaxResult.error("系统查询不到您的信息,请与工会管理员联系!");
}
}
/**
* 验证用户范围
*
* @return {@link NutMap}
*/
@RequestMapping("/validateUserScope")
public AjaxResult validateUserScope(@RequestParam String activityGroupId, @RequestParam String userId) {
int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activityGroupId).and("userId", "=", userId));
return AjaxResult.success().put("data", count);
}
}
@@ -0,0 +1,73 @@
package com.ruoyi.activity.controller.fitnessWalk.mp;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalkGift;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalkSign;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
/**
* 健身走签到
*
* @author jug
* @date 2023/04/12
*/
@RestController
@RequestMapping("/fitnessWalk/h5/sign")
public class FitnessWalkSignH5Controller {
@Autowired
private Dao dao;
/**
* 签到信息
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("/signInfo")
public AjaxResult signInfo(@RequestParam String id) {
List<FitnessWalkSign> signList = dao.query(FitnessWalkSign.class, Cnd.where("fitnessWalkId", "=", id).and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success(signList);
}
/**
* 签到
*
* @param fitnessWalkId 活动id
* @param pointId 点id
* @return {@link AjaxResult}
*/
@RequestMapping("/doSign")
public AjaxResult doSign(@RequestParam String fitnessWalkId, @RequestParam String pointId) {
FitnessWalkSign sign = new FitnessWalkSign();
sign.setFitnessWalkId(fitnessWalkId);
sign.setPointId(pointId);
sign.setSignTime(new Date());
sign.setUserId(String.valueOf(SecurityUtils.getUserId()));
dao.insert(sign);
return AjaxResult.success("签到成功");
}
/**
* 该活动的礼品券信息
*
* @param fitnessWalkId 健身走id
* @return {@link AjaxResult}
*/
@RequestMapping("/giftTicketInfoByActId")
public AjaxResult giftTicketInfoByActId(@RequestParam String fitnessWalkId) {
FitnessWalkGift gift = dao.fetch(FitnessWalkGift.class, Cnd.where("fitnessWalkId", "=", fitnessWalkId).and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success(gift);
}
}
@@ -0,0 +1,65 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
/**
* @Author JyuHsin
* @Date 2023/4/14
* @Description
*/
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkSignInStatisticsService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/fitnessWalk/distanceRank")
public class FitNessWalkDistanceRankController {
@Autowired
private Dao dao;
@Autowired
private FitnessWalkSignInStatisticsService fitnessWalkSignInStatisticsService;
@PostMapping("/pageData")
@RequiresPermissions("activity:fitnessWalk:distanceRank")
public AjaxResult pageData(@RequestParam(required = false) Integer year,
@RequestParam(required = false) String mainName,
@RequestParam(required = false) String branchActivity,
@RequestParam(required = false) String unionId,
@RequestParam(required = false) Integer limit) {
List<String> fitNessActivityId = fitnessWalkSignInStatisticsService.getFitNessActivityId(mainName, branchActivity, year);
Sql sql = Sqls.create("""
SELECT
sum(g.distance) as distance,
u.userName,
u.loginName,
u.deptName,
u.unionName,
u.sex
FROM
fitness_walk_gps g
left join `user` u on u.userId = g.userId
$condition
limit %s
""".formatted(limit == null ? 10 : limit));
Cnd cnd = Cnd.NEW();
cnd.and("fitnessWalkId", "in", fitNessActivityId);
cnd.andEX("u.unionId", "=", unionId);
cnd.groupBy("g.userId");
sql.setCondition(cnd);
return AjaxResult.success(fitnessWalkSignInStatisticsService.listMap(sql));
}
}
@@ -0,0 +1,123 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalk;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalkPoint;
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 健身走活动管理
*
* @author jug
* @date 2023/02/13
*/
@RestController
@RequestMapping("/fitnessWalk/activityManage")
public class FitnessWalkActivityManageController {
@Autowired
private FitnessWalkActivityManageService fitnessWalkActivityManageService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @param year 年度
* @param activityName 活动名称
* @return {@link AjaxResult}
*/
@PostMapping("/pageData")
@RequiresPermissions("activity:fitnessWalk:activityManage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false) Integer year,
@RequestParam(required = false) String activityName
) {
Pagination pagination = fitnessWalkActivityManageService.pageData(pageForm, year, activityName);
return AjaxResult.success(pagination);
}
@RequestMapping("/historyActivities")
@RequiresPermissions("activity:fitnessWalk:activityManage")
public AjaxResult historyActivities() {
Sql sql = Sqls.create("select id,mainName,branchName from fitness_walk");
List<NutMap> list = fitnessWalkActivityManageService.listMap(sql);
return AjaxResult.success(list);
}
@GetMapping("/activityGroup")
@RequiresPermissions("activity:fitnessWalk:activityManage")
public AjaxResult activityGroup() {
return AjaxResult.success();
}
@PostMapping("/doSubmit")
@RequiresPermissions("activity:fitnessWalk:activityManage")
@Transactional(rollbackFor = Exception.class)
public AjaxResult doSubmit(@RequestBody FitnessWalk fitnessWalk) {
try {
if (StrUtil.isBlank(fitnessWalk.getId())) {
fitnessWalkActivityManageService.insertWith(fitnessWalk, "pts");
} else {
for (FitnessWalkPoint pt : fitnessWalk.getPts()) {
pt.setFitnessWalkId(fitnessWalk.getId());
}
dao.insertOrUpdate(fitnessWalk.getPts());
fitnessWalkActivityManageService.update(fitnessWalk);
}
return AjaxResult.success();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.warn(e.getMessage());
}
}
/**
* 删除
*
* @param id id
* @return {@link AjaxResult}
*/
@PostMapping("/delete")
@RequiresPermissions("activity:fitnessWalk:activityManage")
public AjaxResult delete(@RequestParam String id) {
try {
fitnessWalkActivityManageService.deleteActivity(id);
return AjaxResult.success();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
}
/**
* 活动信息
*
* @param id id
* @return {@link AjaxResult}
*/
@GetMapping("/activityInfo")
@RequiresPermissions("activity:fitnessWalk:activityManage")
public AjaxResult activityInfo(@RequestParam String id) {
FitnessWalk fitnessWalk = fitnessWalkActivityManageService.fetch(id);
fitnessWalkActivityManageService.fetchLinks(fitnessWalk, "pts", Cnd.NEW().asc("code"));
return AjaxResult.success(fitnessWalk);
}
}
@@ -0,0 +1,57 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkStepService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 健身走计步模式排行榜
*
* @author jug
* @date 2023/03/14
*/
@RestController
@RequestMapping("/fitnessWalk/leaderBoard")
public class FitnessWalkLeaderBoardController {
@Autowired
private FitnessWalkStepService fitnessWalkStepService;
@RequestMapping("getData")
public AjaxResult getData(String hdid, Integer type, String userId) {
List<NutMap> data = new ArrayList<>();
if (type == 1 || type == 0) {
data = fitnessWalkStepService.getDataOfLeaderboard(hdid, type, userId, "", "", "", "");
} else if (type == 2) {
data = fitnessWalkStepService.getDataOfPrize(hdid, "", "", "", "");
}
return AjaxResult.success(data);
}
@RequestMapping("pageData")
public AjaxResult pageData(String hdid, String searchName, String searchKeyword, String unionId, String unitId) {
if (StrUtil.isBlank(hdid)) {
return AjaxResult.warn("参数错误!");
}
String userId = String.valueOf(SecurityUtils.getUserId());
List<NutMap> today = fitnessWalkStepService.getDataOfLeaderboard(hdid, 0, userId, unionId, unitId, searchName, searchKeyword);
List<NutMap> summary = fitnessWalkStepService.getDataOfLeaderboard(hdid, 1, userId, unionId, unitId, searchName, searchKeyword);
List<NutMap> yesterday = fitnessWalkStepService.getDataOfPrize(hdid, unionId, unitId, searchName, searchKeyword);
NutMap map = NutMap.NEW();
map.put("today", Map.of("list", today));
map.put("summary", Map.of("list", summary));
map.put("yesterday", Map.of("list", yesterday));
return AjaxResult.success(map);
}
}
@@ -0,0 +1,99 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
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.hutool.core.date.DateUtil;
import com.ruoyi.common.core.web.domain.AjaxResult;
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.dao.util.Daos;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/fitnessWalk/prize")
public class FitnessWalkPrizeController {
@Autowired
private Dao dao;
private String getSql() {
return """
SELECT
u.loginname,
u.username,
u.unionname,
u.deptName as unitname,
al.applyDate,
date_format( al.applyDate, '%Y-%m-%d' ) AS prizeData\s
FROM
`jsz_award_list` al
LEFT JOIN `user` u ON u.userId = al.userId
$condition
""";
}
@RequestMapping("/prizeDataList")
public AjaxResult prizeDataList(@Param("activityId") String activityId) {
Date toDay = new Date();
Sql sql = Sqls.create(getSql());
Cnd cnd = Cnd.NEW();
cnd.and("activityId", "=", activityId);
sql.setCondition(cnd);
List<NutMap> list = (List<NutMap>) Daos.query(dao, sql.toString(), Sqls.callback.maps());
List<NutMap> yesterdayList = list.stream().filter(v -> v.getString("applyDate").substring(0, 10).equals(DateUtil.format(DateUtil.offsetDay(toDay, -1), "yyyy-MM-dd"))).collect(Collectors.toList());
return AjaxResult.success(Map.of("toDayList", Collections.emptyList(), "yesterdayList", yesterdayList, "totalList", list));
}
@RequestMapping("/exportExcel")
public void exportExcel(@Param("activityId") String activityId,
@Param("currentSelectedType") String currentSelectedType,
HttpServletResponse response) {
Date toDay = new Date();
Sql sql = Sqls.create(getSql());
Cnd cnd = Cnd.NEW();
cnd.and("activityId", "=", activityId);
sql.setCondition(cnd);
List<NutMap> exportList = new ArrayList<>();
List<NutMap> list = (List<NutMap>) Daos.query(dao, sql.toString(), Sqls.callback.maps());
if ("yesterdayList".equals(currentSelectedType)) {
exportList = list.stream().filter(v -> v.getString("applyDate").substring(0, 10).equals(DateUtil.format(DateUtil.offsetDay(toDay, -1), "yyyy-MM-dd"))).collect(Collectors.toList());
} else {
exportList = list;
}
List<ExcelExportEntity> entityList = new ArrayList<>() {{
add(new ExcelExportEntity("姓名", "username", 20));
add(new ExcelExportEntity("工号", "loginname", 20));
add(new ExcelExportEntity("单位", "unitname", 20));
add(new ExcelExportEntity("分工会", "unionname", 20));
add(new ExcelExportEntity("日期", "prizeData", 20));
}};
try {
// ViTool.excelResponse(response, "导出数据.xlsx");
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, exportList);
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,42 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
import com.ruoyi.activity.service.fitnessWalk.WxMpCloudHttpConstants;
import com.ruoyi.activity.service.fitnessWalk.WxMpCloudHttpUtil;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.api.RemoteConfigService;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 健身走运动排行榜
*
* @author jug
* @date 2023/02/15
*/
@RestController
@RequestMapping("/fitnessWalk/runRank")
public class FitnessWalkRunRankController {
@Autowired
private RemoteConfigService remoteConfigService;
@GetMapping("/pageData")
public AjaxResult pageData() {
try {
R<String> schoolCodeR = remoteConfigService.selectConfigByKey("sys.schoolCode");
String schoolCode = null;
if (schoolCodeR.getCode() == R.SUCCESS) {
schoolCode = schoolCodeR.getMsg();
}
NutMap rankAll = WxMpCloudHttpUtil.getCloudResult(WxMpCloudHttpConstants.CLOUD_URL, "rankAll", NutMap.NEW().addv("schoolCode", schoolCode));
return AjaxResult.success(rankAll);
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}
}
@@ -0,0 +1,316 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
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 com.ruoyi.activity.service.fitnessWalk.FitnessWalkActivityManageService;
import com.ruoyi.activity.service.fitnessWalk.FitnessWalkSignInStatisticsService;
import com.ruoyi.activity.service.fitnessWalk.WxMpCloudHttpConstants;
import com.ruoyi.activity.service.fitnessWalk.WxMpCloudHttpUtil;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.RemoteConfigService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/fitnessWalk/signInStatistics")
@Slf4j
public class FitnessWalkSignInStatisticsController {
@Autowired
private FitnessWalkActivityManageService activityManageService;
@Autowired
private FitnessWalkSignInStatisticsService signInStatisticsService;
@Autowired
private RemoteConfigService remoteConfigService;
@GetMapping("/mainActivity")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public AjaxResult mainActivity(@RequestParam int year, @RequestParam String mode) {
List<NutMap> list = activityManageService.mainActivity(year, mode);
return AjaxResult.success(list);
}
@GetMapping("/branchActivity")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public AjaxResult branchActivity(@RequestParam String mainName, @RequestParam int year, @RequestParam String mode) {
List<NutMap> list = activityManageService.branchActivity(mainName, year, mode);
return AjaxResult.success(list);
}
@GetMapping("/getFitnessData")
@RequiresLogin
public AjaxResult getFitnessData() {
R<String> schoolCodeR = remoteConfigService.selectConfigByKey("sys.schoolCode");
String schoolCode = null;
if (schoolCodeR.getCode() == R.SUCCESS) {
schoolCode = schoolCodeR.getMsg();
}
String query = "db.collection('activity').where({schoolCode:'%s'}).orderBy('apply_start_time', 'desc').get()".formatted(schoolCode);
NutMap result = WxMpCloudHttpUtil.getWxResult(WxMpCloudHttpConstants.QUERY_URL, query);
List<NutMap> data = result.getList("data", NutMap.class);
return AjaxResult.success(data.size() > 0 ? data : new ArrayList<>());
}
/**
* 分工会报名参加人数
*
* @param mainName 主活动
* @param branchActivity 分活动
* @return {@link AjaxResult}
*/
@PostMapping("/unionNumData")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public AjaxResult unionNumData(@RequestParam(required = false) String mainName,
@RequestParam(required = false) Integer year,
@RequestParam(required = false) String branchActivity) {
List<NutMap> list = null;
try {
list = signInStatisticsService.unionNumData(mainName, branchActivity, year);
return AjaxResult.success(list);
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
}
/**
* 获取分工会报名用户
*
* @param pageForm 页面形式
* @param mainName 主活动
* @param branchActivity 分活动
* @param unionId 工会id
* @return {@link AjaxResult}
*/
@PostMapping("/getRegisterUser")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public AjaxResult getRegisterUser(@RequestBody PageForm pageForm,
@RequestParam(required = false) String mainName,
@RequestParam(required = false) String branchActivity,
@RequestParam String unionId) {
try {
Pagination pagination = signInStatisticsService.getRegisterUser(pageForm, mainName, branchActivity, unionId);
return AjaxResult.success(pagination);
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}
/**
* 获取分工会签到用户
*
* @param pageForm 页面形式
* @param mainName 主活动
* @param branchActivity 分活动
* @param unionId 工会id
* @return {@link AjaxResult}
*/
@PostMapping("/getSignUser")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public AjaxResult getSignUser(@RequestBody PageForm pageForm,
@RequestParam(required = false) String mainName,
@RequestParam(required = false) String branchActivity,
@RequestParam String unionId) {
try {
Pagination pagination = signInStatisticsService.getSignUser(pageForm, mainName, branchActivity, unionId);
return AjaxResult.success(pagination);
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}
/**
* 导出活动报名人员
*
* @param mainName 主活动
* @param branchActivity 分活动
* @param response 响应
*/
@PostMapping("/doExportRegister")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public void doExportRegister(@RequestParam(required = false) String mainName, @RequestParam(required = false) String branchActivity, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> dataList = signInStatisticsService.doExportRegister(mainName, branchActivity);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("单位", "deptName", 20));
entities.add(new ExcelExportEntity("工会", "unionName", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, dataList);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("活动报名人员.xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 导出礼品领取情况
*
* @param mainName 主活动
* @param branchActivity 分活动
* @param flag 是否领取
* @param response 响应
*/
@PostMapping("/doGiftExport")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public void doGiftExport(@RequestParam(required = false) String mainName, @RequestParam(required = false) String branchActivity, @RequestParam boolean flag, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> dataList = signInStatisticsService.doGiftExport(mainName, branchActivity, flag);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("单位", "deptName", 20));
entities.add(new ExcelExportEntity("工会", "unionName", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, dataList);
response.setContentType("application/octet-stream");
String fileName = flag ? "已领取礼品的用户" : "未领取礼品的用户";
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 按分工会导出导出全部
*
* @param mainName 主活动
* @param branchActivity 分活动
* @param year 年份
* @param response 响应
*/
@PostMapping("/exportAllUnionData")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public void exportAllUnionData(@RequestParam(required = false) String mainName,
@RequestParam(required = false) Integer year,
@RequestParam(required = false) String branchActivity,
HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> dataList = signInStatisticsService.unionNumData(mainName, branchActivity, year);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("院级工会", "unionName", 20));
entities.add(new ExcelExportEntity("报名人数", "enrollCount", 20));
entities.add(new ExcelExportEntity("参加人数", "signCount", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, dataList);
response.setContentType("application/octet-stream");
String fileName = "院级工会报名统计表";
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
@PostMapping("/doExportSummary")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public void doExportSummary(@RequestParam(required = false) String mainName, @RequestParam(required = false) String branchActivity, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> dataList = signInStatisticsService.doExportSummary(mainName, branchActivity);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("性别", "sex", 20));
entities.add(new ExcelExportEntity("电话", "mobile", 20));
entities.add(new ExcelExportEntity("工会", "unionName", 20));
entities.add(new ExcelExportEntity("单位", "deptName", 20));
entities.add(new ExcelExportEntity("是否参加", "isTakePartIn", 20));
entities.add(new ExcelExportEntity("签到点位数", "signCount", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, dataList);
response.setContentType("application/octet-stream");
String fileName = "活动汇总表";
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 导出签到人员
*
* @param mainName 活动id
* @param branchActivity 活动标签
* @param response 响应
*/
@PostMapping("/doExportSign")
@RequiresPermissions("activity:fitnessWalk:signInStatistics")
public void doExportSign(@RequestParam(required = false) String mainName, @RequestParam(required = false) String branchActivity, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> dataList = signInStatisticsService.doExportSign(mainName, branchActivity);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("性别", "sex", 20));
entities.add(new ExcelExportEntity("电话", "mobile", 20));
entities.add(new ExcelExportEntity("工会", "unionName", 20));
entities.add(new ExcelExportEntity("单位", "deptName", 20));
entities.add(new ExcelExportEntity("点位总数", "pointCount", 20));
entities.add(new ExcelExportEntity("签到点位数", "signCount", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, dataList);
response.setContentType("application/octet-stream");
String fileName = "活动参与人员";
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
}
@@ -0,0 +1,94 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import com.ruoyi.activity.api.domain.fitnessWalk.JszWxStep;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.Lang;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
/**
* 健身走步数
*
* @author jug
* @date 2023/03/14
*/
@RestController
@RequestMapping("/fitnessWalk/stepCount")
public class FitnessWalkStepCountController {
@Autowired
private Dao dao;
/**
* get week step
*
* @param userId user id
* @return {@link Object}
*/
@RequestMapping("getWeekStep")
public AjaxResult getWeekStep(@Param("userId") String userId, @Param("activityId") String activityId) {
Assert.notBlank(activityId);
Assert.notBlank(userId);
Cnd cnd = Cnd.where("userId", "=", userId);
cnd.and("activityId", "=", activityId);
cnd.and("applyDate", ">", DateUtil.offsetDay(new Date(), -7));
cnd.asc("applyDate");
List<JszWxStep> wxSteps = dao.query(JszWxStep.class, cnd);
List<HashMap> results = new ArrayList<>();
for (int i = 7; i >= 0; i--) {
int offset = (i) * -1;
DateTime offsetDay = DateUtil.offsetDay(new Date(), offset);
String dateStr = offsetDay.toString("yyyy-MM-dd");
Optional<JszWxStep> jszWxStepOptional = wxSteps.stream().filter(v -> DateUtil.format(v.getApplyDate(), "yyyy-MM-dd").equals(dateStr)).findFirst();
results.add(new HashMap<>() {{
put("day", dateStr);
put("step", jszWxStepOptional.isPresent() ? jszWxStepOptional.get().getStep() : 0);
}});
}
return AjaxResult.success(results);
}
/**
* 更新步数
*
* @param activityId 活动id
* @param userId 用户id
* @param step 一步
* @return {@link Object}
*/
@RequestMapping("updateStep")
public Object updateStep(String activityId, String userId, Integer step) {
Assert.notBlank(activityId);
Assert.notBlank(userId);
Cnd cnd = Cnd.NEW();
cnd.and("userId", "=", userId);
cnd.and("applyDate", "=", DateUtil.format(new Date(), "yyyy-MM-dd"));
cnd.and("activityId", "=", activityId);
JszWxStep wxStep = dao.fetch(JszWxStep.class, cnd);
if (Lang.isEmpty(wxStep)) {
wxStep = new JszWxStep();
wxStep.setActivityId(activityId);
wxStep.setUserId(userId);
wxStep.setApplyDate(new Date());
}
wxStep.setStep(step);
dao.insertOrUpdate(wxStep);
return AjaxResult.success();
}
}
@@ -0,0 +1,4 @@
package com.ruoyi.activity.controller.fitnessWalk.pc;
public class FitnessWalkStepCountRankController {
}
@@ -0,0 +1,78 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.activity.api.constant.FourOneActivityForm;
import com.ruoyi.activity.service.fourOneActivity.FourOneActivityService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:05
*/
@RestController
@RequestMapping("/fourOneActivity/apply")
public class FourOneActivityApplyController {
@Autowired
private FourOneActivityService fourOneActivityService;
@PostMapping("/doEdit")
@RequiresPermissions("activity:fourOneActivity:fourOneApply")
public AjaxResult doEdit(@RequestBody FourOneActivityForm fourOneActivityForm, @RequestParam Boolean flag) {
fourOneActivityService.doEdit(fourOneActivityForm, flag);
return AjaxResult.success();
}
@PostMapping("/doSave")
@RequiresPermissions("activity:fourOneActivity:fourOneApply")
public AjaxResult doSave(@RequestBody FourOneActivityForm fourOneActivityForm, @RequestParam Boolean flag) {
fourOneActivityService.doSave(fourOneActivityForm, flag);
return AjaxResult.success();
}
@GetMapping("/findUser")
@RequiresPermissions("activity:fourOneActivity:fourOneApply")
public AjaxResult findUser(@RequestParam(value = "searchWord", required = false) String searchWord,Integer userId) {
Sql sql = Sqls.create("""
SELECT
userId,
userName,
loginName,
sex,
mobile,
deptName unitName,
unionName
FROM
`user`
$condition
limit 0,20
""");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(searchWord)) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.andLike("userName", searchWord);
group.orLike("loginName", searchWord);
cnd.and(group);
}
cnd.andEX("userId", "=", userId);
sql.setCondition(cnd);
return AjaxResult.success(fourOneActivityService.listMap(sql));
}
}
@@ -0,0 +1,78 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.activity.api.constant.FourOneActivityForm;
import com.ruoyi.activity.service.fourOneActivity.FourOneActivityService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:14
*/
@RestController
@RequestMapping("/fourOneActivity/applyList")
public class FourOneActivityApplyListController {
@Autowired
private FourOneActivityService fourOneActivityService;
@PostMapping("/pageData")
@RequiresPermissions("activity:fourOneActivity:fourOneApplyList")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") String year) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT YEAR
( a.activityApplyDate ) AS `year`,
a.*,
st.stateName
FROM
`four_one_activity` a
LEFT JOIN audit_state st ON st.stateId = a.stateId
$condition
""");
cnd.andEX("YEAR(a.activityApplyDate)", "=", year);
if (!AuthUtil.hasRole("admin")) {
cnd.and("a.activityApplyUserId", "=", SecurityUtils.getUserId());
}
sql.setCondition(cnd);
return AjaxResult.success(fourOneActivityService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@GetMapping("/findOne")
public AjaxResult findOne(@RequestParam String id) {
return AjaxResult.success(fourOneActivityService.findOne(id));
}
@DeleteMapping("/doDelete")
@RequiresPermissions("activity:fourOneActivity:fourOneApplyList")
public AjaxResult doDelete(String id) {
fourOneActivityService.doDelete(id);
return AjaxResult.success();
}
@PostMapping("/doMakings")
@RequiresPermissions("activity:fourOneActivity:fourOneApplyList")
public AjaxResult doMakings(@RequestBody FourOneActivityForm fourOneActivityForm,
@RequestParam Boolean flag,
@RequestParam String id) {
fourOneActivityService.doMakings(fourOneActivityForm, flag, id);
return AjaxResult.success();
}
}
@@ -0,0 +1,64 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.activity.api.domain.fourOneActivity.FourOneActivity;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
* 评审
*
* @Author zhf
* @Date 2023/2/8 14:14
*/
@RestController
@RequestMapping("/fourOneActivity/assess")
public class FourOneActivityAssessController {
@Autowired
private BaseService baseService;
@PostMapping("/pageData")
@RequiresPermissions("activity:fourOneActivity:fourOneAssess")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") String year,
@RequestParam(required = false, value = "isAudit") boolean isAudit,
@RequestParam(required = false, value = "unionId") String unionId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT YEAR
( a.activityApplyDate ) AS `year`,
a.*,
st.stateName
FROM
`four_one_activity` a
LEFT JOIN audit_state st ON st.stateId = a.stateId
$condition
""");
cnd.and("a.stateId", isAudit ? ">" : "=", "4580");
cnd.andEX("a.activityApplyUserUnionId", "=", unionId);
cnd.andEX("YEAR(a.activityApplyDate)", "=", year);
sql.setCondition(cnd);
return AjaxResult.success(baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@PostMapping("/doReview")
@RequiresPermissions("activity:fourOneActivity:fourOneAssess")
public AjaxResult doReview(String id, String assessGrade) {
baseService.dao().update(FourOneActivity.class, Chain.make("assessGrade", assessGrade).add("stateId", "4590"), Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,64 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.service.fourOneActivity.FourOneActivityService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:14
*/
@RestController
@RequestMapping("/fourOneActivity/schoolAudit")
public class FourOneActivitySchoolAuditController {
@Autowired
private FourOneActivityService fourOneActivityService;
@PostMapping("/pageData")
@RequiresPermissions("activity:fourOneActivity:fourOneSchoolAudit")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") String year,
@RequestParam boolean isAudit,
@RequestParam(required = false, value = "unionId") String unionId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT YEAR
( a.activityApplyDate ) AS `year`,
a.*,
st.stateName
FROM
`four_one_activity` a
LEFT JOIN audit_state st ON st.stateId = a.stateId
$condition
""");
cnd.and("a.stateId", isAudit ? ">" : "=", "4550");
cnd.andEX("a.activityApplyUserUnionId", "=", unionId);
cnd.andEX("YEAR(a.activityApplyDate)", "=", year);
sql.setCondition(cnd);
return AjaxResult.success(fourOneActivityService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@PostMapping("/doReview")
@RequiresPermissions("activity:fourOneActivity:fourOneSchoolAudit")
public AjaxResult doReview(@RequestParam String id, @RequestParam(required = false, value = "flag") Boolean flag, @RequestBody Audit audit) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getLoginUser().toString());
audit.setAuditPass(flag);
fourOneActivityService.insert(audit);
fourOneActivityService.update(Chain.make("stateId", flag ? 4570 : 4560).add("schoolAuditId", audit.getId()), Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:15
*/
@RestController
@RequestMapping("/fourOneActivity/statistics")
public class FourOneActivityStatisticsController {
@Autowired
private BaseService baseService;
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") String year,
@RequestParam(required = false, value = "assessGrade") String assessGrade,
@RequestParam(required = false, value = "unionId") String unionId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT YEAR
( a.activityApplyDate ) AS `year`,
a.*,
st.stateName
FROM
`four_one_activity` a
LEFT JOIN audit_state st ON st.stateId = a.stateId
$condition
""");
cnd.and("a.stateId", "=", "4590");
cnd.andEX("a.assessGrade", "=", assessGrade);
cnd.andEX("a.activityApplyUserUnionId", "=", unionId);
cnd.andEX("YEAR(a.activityApplyDate)", "=", year);
sql.setCondition(cnd);
return AjaxResult.success(baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
}
@@ -0,0 +1,69 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.service.fourOneActivity.FourOneActivityService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:26
*/
@RestController
@RequestMapping("/fourOneActivity/unionAudit")
public class FourOneActivityUnionAuditController {
@Autowired
private FourOneActivityService fourOneActivityService;
@PostMapping("/pageData")
@RequiresPermissions("activity:fourOneActivity:fourOneUnionAudit")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") String year,
@RequestParam boolean isAudit) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT YEAR
( a.activityApplyDate ) AS `year`,
a.*,
st.stateName
FROM
`four_one_activity` a
LEFT JOIN audit_state st ON st.stateId = a.stateId
$condition
""");
cnd.and("a.stateId", isAudit ? ">" : "=", "4510");
if (!AuthUtil.hasAnyRoles("admin")) {
cnd.andEX("a.activityApplyUserUnionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("YEAR(a.activityApplyDate)", "=", year);
sql.setCondition(cnd);
return AjaxResult.success(fourOneActivityService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@PostMapping("/doReview")
@RequiresPermissions("activity:fourOneActivity:fourOneUnionAudit")
public AjaxResult doReview(@RequestParam String id, @RequestParam(required = false, value = "flag") Boolean flag, @RequestBody Audit audit) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getLoginUser().toString());
audit.setAuditPass(flag);
fourOneActivityService.insert(audit);
fourOneActivityService.update(Chain.make("stateId", flag ? 4530 : 4520).add("unionAuditId", audit.getId()), Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,67 @@
package com.ruoyi.activity.controller.fourOneActivity;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.service.fourOneActivity.FourOneActivityService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:27
*/
@RestController
@RequestMapping("/fourOneActivity/unionPartyAudit")
public class FourOneActivityUnionPartyAuditController {
@Autowired
private FourOneActivityService fourOneActivityService;
@PostMapping("/pageData")
@RequiresPermissions("activity:fourOneActivity:fourOneUnionPartyAudit")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") String year,
@RequestParam boolean isAudit) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT YEAR
( a.activityApplyDate ) AS `year`,
a.*,
st.stateName
FROM
`four_one_activity` a
LEFT JOIN audit_state st ON st.stateId = a.stateId
$condition
""");
cnd.and("a.stateId", isAudit ? ">" : "=", "4530");
if (!AuthUtil.hasAnyRoles("sysamin")) {
cnd.andEX("a.activityApplyUserUnionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("YEAR(a.activityApplyDate)", "=", year);
sql.setCondition(cnd);
return AjaxResult.success(fourOneActivityService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@PostMapping("/doReview")
@RequiresPermissions("activity:fourOneActivity:fourOneUnionPartyAudit")
public AjaxResult doReview(@RequestParam String id, @RequestParam(required = false, value = "flag") Boolean flag, @RequestBody Audit audit) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getLoginUser().toString());
audit.setAuditPass(flag);
fourOneActivityService.insert(audit);
fourOneActivityService.update(Chain.make("stateId", flag ? 4550 : 4540).add("unionPartyAuditId", audit.getId()), Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,236 @@
package com.ruoyi.activity.controller.opusLevy;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevy;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevyChildType;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevyParentType;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevySubmitInfo;
import com.ruoyi.activity.service.opusLevy.OpusActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.apache.commons.codec.binary.Base64;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/13
* @Description
*/
@RestController
@RequestMapping("/opusLevy/activityManage")
public class ActivityManageController {
@Autowired
private Dao dao;
@Autowired
private OpusActivityManageService opusActivityManageService;
@PostMapping("pageData")
@RequiresPermissions("activity:opusLevy:activityManage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "activityName", required = false) String activityName,
@RequestParam(value = "activityType", required = false) String activityType) {
Sql sql = Sqls.create("""
SELECT
hd.*,
u.`userName` createUserName
FROM
hd_wm_xx hd
LEFT JOIN `user` u ON hd.createUserId = u.`userId`
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("type", "=", activityType);
if (Strings.isNotBlank(activityName)) {
cnd.where().andLike("activityName", activityName);
}
if (year != null) {
cnd.and("YEAR(createTime)", "=", year);
}
if (!AuthUtil.hasRole("admin")) {
cnd.and("hd.createUserId", "=", SecurityUtils.getUserId());
}
cnd.desc("createTime");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("mobilePageData")
@RequiresLogin
public AjaxResult mobilePageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "type", required = false) Integer type) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
xx.*,
u.username
FROM
hd_wm_xx xx
LEFT JOIN `user` u ON u.userId = xx.createUserId
WHERE
activityGroupId IN ( SELECT groupId FROM `activity_user_scope` $condition)
AND YEAR ( startTime )= @year
""").setParam("year", year);
cnd.and("xx.state", "=", true);
cnd.andEX("xx.type", "=", type);
if (!AuthUtil.hasRole("admin")) {
cnd.and("userId", "=", SecurityUtils.getUserId());
}
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doHandle")
@RequiresPermissions("activity:opusLevy:activityManage")
@Transactional(rollbackFor = Exception.class)
public AjaxResult doHandle(@RequestBody OpusLevy opusLevy) {
if (StrUtil.isNotBlank(opusLevy.getId())) {
opusActivityManageService.doEdit(opusLevy);
} else {
opusLevy.setState(false);
opusActivityManageService.doAdd(opusLevy);
}
return AjaxResult.success();
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("activity:opusLevy:activityManage")
@Transactional(rollbackFor = Exception.class)
public AjaxResult doDelete(@PathVariable String id) {
dao.clear(OpusLevySubmitInfo.class, Cnd.where("activityId", "=", id));
dao.clear(OpusLevyParentType.class, Cnd.where("activityId", "=", id));
dao.clear(OpusLevyChildType.class, Cnd.where("activityId", "=", id));
dao.clear(OpusLevy.class, Cnd.where("id", "=", id));
return AjaxResult.success();
}
@PostMapping("changeStatus")
@RequiresPermissions("activity:opusLevy:activityManage")
public AjaxResult changeStatus(String id, Boolean flag) {
dao.update(OpusLevy.class, Chain.make("state", flag), Cnd.where("id", "=", id));
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
public AjaxResult findOne(@PathVariable String id) {
OpusLevy opusLevy = dao.fetch(OpusLevy.class, id);
dao.fetchLinks(opusLevy, "^parentTypeList$", Cnd.orderBy().asc("location"));
if (opusLevy.getParentTypeList() != null && opusLevy.getParentTypeList().size() > 0) {
opusLevy.getParentTypeList().forEach(item -> {
dao.fetchLinks(opusLevy.getParentTypeList(), "^childTypeList$", Cnd.orderBy().asc("location"));
});
}
return AjaxResult.success(opusLevy);
}
@GetMapping("getActivityByGroup")
@RequiresLogin
public AjaxResult getActivityByGroup(Integer type) {
Cnd cnd = Cnd.NEW();
Cnd xxCnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT * FROM hd_wm_xx $xxCnd and activityGroupId in (SELECT groupId FROM `activity_user_scope` $condition)
""");
if (!AuthUtil.hasRole("admin")) {
cnd.and("userId", "=", SecurityUtils.getUserId());
}
xxCnd.and("state", "=", true);
xxCnd.andEX("type", "=", type);
sql.setVar("xxCnd", xxCnd);
sql.setCondition(cnd);
return AjaxResult.success(opusActivityManageService.listMap(sql));
}
@GetMapping("getActivityList")
@RequiresLogin
public AjaxResult getActivityList(Integer type, Integer year) {
List<OpusLevy> list = dao.query(OpusLevy.class, Cnd.NEW().andEX("type", "=", type)
.andEX("year(createTime)", "=", year));
return AjaxResult.success(list);
}
@GetMapping("getParentTypeList")
@RequiresLogin
public AjaxResult getParentTypeList(String id) {
List<OpusLevyParentType> list = dao.query(OpusLevyParentType.class, Cnd.where("activityId", "=", id)
.asc("location"));
return AjaxResult.success(list);
}
@GetMapping("getChildTypeList")
@RequiresLogin
public AjaxResult getChildTypeList(String id) {
List<OpusLevyChildType> list = dao.query(OpusLevyChildType.class, Cnd.where("parentTypeId", "=", id)
.asc("location"));
return AjaxResult.success(list);
}
@RequestMapping(value = "getByteArrayByFile")
public String getByteArrayByFile(@RequestParam(required = false) MultipartFile file,
@RequestParam(required = false) String link,
HttpServletResponse response) throws IOException {
InputStream inputStream = null;
if (file != null) {
inputStream = file.getInputStream();
return this.getBase64FromInputStream(inputStream);
} else if (StrUtil.isNotBlank(link)) {
inputStream = HttpUtil.createGet(link).execute().bodyStream();
}
return this.getBase64FromInputStream(inputStream);
}
public String getBase64FromInputStream(InputStream in) {
// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
byte[] data = null;
// 读取图片字节数组
try {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = in.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
} catch (IOException e) {
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
}
//返回的字符串传到前台,添加到src属性中去,即可显示图片
return "data:image/jpeg;base64," + new String(Base64.encodeBase64(data));
}
}
@@ -0,0 +1,164 @@
package com.ruoyi.activity.controller.opusLevy;
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 com.ruoyi.activity.api.constant.opusLevy.OpusLevyAuditState;
import com.ruoyi.activity.service.opusLevy.OpusActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
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.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/14
* @Description
*/
@RestController
@RequestMapping("/opusLevy/awardInfo")
public class AwardInfoController {
@Autowired
private Dao dao;
@Autowired
private OpusActivityManageService opusActivityManageService;
@PostMapping("pageData")
@RequiresPermissions("activity:opusLevy:awardInfo")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "activityType", required = false) String activityType,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Sql sql = Sqls.create("""
SELECT DISTINCT
( xx.submitUserId ),
u.userName,
u.loginName,
u.deptName,
u.unionName,
( SELECT COUNT( DISTINCT ( a.parentTypeId )) FROM hd_wm_sbxx a WHERE a.submitUserId = xx.`submitUserId` and a.activityId = @hdid AND state=@state) AS prizeCount
FROM
hd_wm_sbxx xx
LEFT JOIN `user` u ON u.userId = xx.submitUserId
$condition
""");
sql.setParam("hdid", activityId).setParam("state", OpusLevyAuditState.SCHOOL_PASS);
Cnd cnd = Cnd.NEW();
cnd.andEX("xx.activityId", "=", activityId);
cnd.andEX("YEAR(xx.submitTime)", "=", year);
cnd.andEX("xx.state", "=", OpusLevyAuditState.SCHOOL_PASS);
if (!AuthUtil.hasRole("H10") && !AuthUtil.hasRole("A06") && !AuthUtil.hasRole("admin")) {
cnd.andEX("u.unionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.deptId", "=", unionId);
cnd.asc("u.userName").asc("u.unionId").asc("u.deptId");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@RequestMapping("exportExcel")
@RequiresLogin
public void exportExcel(String id, Integer num, HttpServletResponse response) throws IOException {
if (num == 1) {
Sql sql = Sqls.create("""
SELECT DISTINCT
( xx.submitUserId ),
u.userName,
u.loginName,
u.deptName,
u.unionName,
( SELECT COUNT( DISTINCT ( a.parentTypeId )) FROM hd_wm_sbxx a WHERE a.submitUserId = xx.`submitUserId` and a.activityId = @hdid AND state=@state) AS prizeCount
FROM
hd_wm_sbxx xx
LEFT JOIN `user` u ON u.userId = xx.submitUserId
$condition
""");
sql.setParam("hdid", id).setParam("state", OpusLevyAuditState.SCHOOL_PASS);
Cnd cnd = Cnd.NEW();
cnd.andEX("xx.activityId", "=", id);
cnd.andEX("xx.state", "=", OpusLevyAuditState.SCHOOL_PASS);
cnd.asc("u.userName").asc("u.unionId").asc("u.deptId");
sql.setCondition(cnd);
List<NutMap> winnerList = opusActivityManageService.listMap(sql);
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
exportEntities.add(new ExcelExportEntity("工号", "loginName", 20));
exportEntities.add(new ExcelExportEntity("单位", "deptName", 20));
exportEntities.add(new ExcelExportEntity("分工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("获奖次数", "prizeCount", 20));
String fileName = "获奖人员名单.xlsx";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, winnerList);
workbook.write(response.getOutputStream());
} else {
Sql sql = Sqls.create("""
SELECT
gh.unionName,
count( DISTINCT sbxx.submitUserId ) as joinNum,
count(DISTINCT sbxx.submitUserId,sbxx.parentTypeId) as prizeNum
FROM
`union` gh
LEFT JOIN `user` u ON u.unionId = gh.id
LEFT JOIN hd_wm_sbxx sbxx ON sbxx.submitUserId = u.userId
AND sbxx.activityId = @hdid
AND sbxx.state = @state
$condition
""");
sql.setParam("hdid", id);
sql.setParam("state", OpusLevyAuditState.SCHOOL_PASS);
Cnd cnd = Cnd.NEW();
cnd.groupBy("gh.id");
cnd.asc("gh.unionCode");
sql.setCondition(cnd);
List<NutMap> unionList = opusActivityManageService.listMap(sql);
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("分工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("参加人数", "joinNum", 20));
exportEntities.add(new ExcelExportEntity("应发奖品数", "prizeNum", 20));
String fileName = "分工会获奖信息.xlsx";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, unionList);
workbook.write(response.getOutputStream());
}
}
}
@@ -0,0 +1,279 @@
package com.ruoyi.activity.controller.opusLevy;
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.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevy;
import com.ruoyi.activity.service.opusLevy.OpusActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteDictService;
import com.ruoyi.system.api.domain.SysDictData;
import org.apache.commons.io.IOUtils;
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.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/14
* @Description
*/
@RestController
@RequestMapping("/opusLevy/opusInfo")
public class OpusInfoController {
@Autowired
private Dao dao;
@Autowired
private OpusActivityManageService opusActivityManageService;
@Autowired
private RemoteDictService remoteDictService;
@PostMapping("pageData")
@RequiresPermissions("activity:opusLevy:opusInfo")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "parentType", required = false) String parentType,
@RequestParam(value = "childType", required = false) String childType,
@RequestParam(value = "activityType", required = false) String activityType,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Sql sql = Sqls.create("""
SELECT
xx.*,
u.userName,
u.loginName,
u.mobile as userMobile,
u.deptName,
u.unionName,
hdlb.parentTypeName,
zplb.childTypeName,
wmxx.activityName,
state.stateColor,
state.stateName
FROM
hd_wm_sbxx xx
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
LEFT JOIN `user` u ON u.userId = xx.submitUserId
LEFT JOIN audit_state state ON state.stateId = xx.state
LEFT JOIN hd_wm_xx wmxx ON wmxx.id=xx.activityId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin, A06")) {
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.deptId", "=", unitId);
cnd.andEX("wmxx.type", "=", activityType);
cnd.andEX("xx.parentTypeId", "=", parentType);
cnd.andEX("xx.childTypeId", "=", childType);
cnd.andEX("year(xx.submitTime)", "=", year);
cnd.desc("xx.submitTime").asc("u.unionId").asc("xx.parentTypeId");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("findOne/{id}")
public AjaxResult findOne(@PathVariable String id) {
Sql sql = Sqls.create("""
SELECT
xx.*,
u.userName,
u.loginName,
u.deptName,
u.unionName,
hdlb.parentTypeName,
zplb.childTypeName,
zt.activityName,
state.stateColor,
state.stateName,
zt.type,
zt.fileType
FROM
hd_wm_sbxx xx
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
LEFT JOIN hd_wm_xx zt ON zt.id = xx.activityId
LEFT JOIN `user` u ON u.userID = xx.submitUserId
LEFT JOIN audit_state state ON state.stateId = xx.state
WHERE xx.id = @id
""").setParam("id", id);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap nutMap = sql.getObject(NutMap.class);
if (Strings.isNotBlank(nutMap.getString("unionAuditId"))) {
nutMap.put("unionAudit", dao.fetch(Audit.class, nutMap.getString("unionAuditId")));
}
if (Strings.isNotBlank(nutMap.getString("schoolAuditId"))) {
nutMap.put("schoolAudit", dao.fetch(Audit.class, nutMap.getString("schoolAuditId")));
}
return AjaxResult.success(nutMap);
}
@RequestMapping("exportExcel")
@RequiresLogin
public void exportExcel(String id, HttpServletResponse response) throws IOException {
OpusLevy opusLevy = dao.fetch(OpusLevy.class, id);
Sql sql = Sqls.create("""
SELECT
xx.id,
xx.parentTypeId,
u.userName,
u.sex,
u.loginName,
u.deptName,
u.unionName,
hd.activityName,
hdlb.parentTypeName,
zplb.childTypeName
FROM
hd_wm_sbxx xx
LEFT JOIN hd_wm_xx hd ON hd.id = xx.activityId
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
LEFT JOIN `user` u ON u.userId = xx.submitUserId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("xx.activityId", "=", id);
if (!AuthUtil.hasRole("A06") && !AuthUtil.hasRole("admin")) {
if (AuthUtil.hasRole("H04")) {
cnd.andEX("u.unionId", "=", SecurityUtils.getUnionId());
}
}
cnd.asc("u.unionId").asc("u.deptId").asc("u.userName").asc("xx.parentTypeId");
sql.setCondition(cnd);
List<NutMap> list = opusActivityManageService.listMap(sql);
List<SysDictData> userSex = remoteDictService.dictType("sys_user_sex").getData();
Map<String, String> sexMap = userSex.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
list.forEach(item -> {
item.put("sex", sexMap.get(item.getString("sex")));
});
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
exportEntities.add(new ExcelExportEntity("工号", "loginName", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("所属单位", "deptName", 20));
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("作品主题", "activityName", 20));
exportEntities.add(new ExcelExportEntity("活动类别", "parentTypeName", 20));
exportEntities.add(new ExcelExportEntity("作品类别", "childTypeName", 20));
String fileName = opusLevy.getActivityName() + ".xlsx";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
workbook.write(response.getOutputStream());
}
@RequestMapping("downloadFile")
@RequiresLogin
public void downloadFile(String link, HttpServletResponse response) throws IOException {
//设置输出文件类型
response.setContentType("video/mpeg4");
InputStream inputStream = HttpUtil.createGet(link).execute().bodyStream();
IOUtils.copy(inputStream, response.getOutputStream());
}
@PostMapping("mobilePageData")
@RequiresLogin
public AjaxResult mobilePageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "isAudit", required = false) Boolean isAudit,
@RequestParam(value = "activityType", required = false) String activityType,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Sql sql = Sqls.create("""
SELECT
xx.*,
u.userName,
u.loginName,
u.mobile as userMobile,
u.deptName,
u.unionName,
hdlb.parentTypeName,
zplb.childTypeName,
wmxx.activityName,
state.stateColor,
state.stateName
FROM
hd_wm_sbxx xx
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
LEFT JOIN `user` u ON u.userId = xx.submitUserId
LEFT JOIN audit_state state ON state.stateId = xx.state
LEFT JOIN hd_wm_xx wmxx ON wmxx.id=xx.activityId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRole("admin")) {
if (AuthUtil.hasAnyRoles("H10, A06")) {
cnd.and("xx.state", isAudit ? ">" : "=", 240);
} else {
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
cnd.and("xx.state", isAudit ? ">" : "=", 210);
}
} else {
cnd.and("xx.state", "in", isAudit ? "220,230,250,260,270" : "210,240");
}
cnd.andEX("xx.type", "=", activityType);
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.deptId", "=", unitId);
cnd.andEX("year(xx.submitTime)", "=", year);
cnd.desc("xx.submitTime").asc("u.unionId").asc("xx.parentTypeId");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
}
@@ -0,0 +1,129 @@
package com.ruoyi.activity.controller.opusLevy;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.constant.opusLevy.OpusLevyAuditState;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevySubmitInfo;
import com.ruoyi.activity.service.opusLevy.OpusActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* @Author JyuHsin
* @Date 2023/2/14
* @Description
*/
@RestController
@RequestMapping("/opusLevy/opusSchoolAudit")
public class OpusSchoolAuditController {
@Autowired
private Dao dao;
@Autowired
private OpusActivityManageService opusActivityManageService;
@PostMapping("pageData")
@RequiresPermissions("activity:opusLevy:opusSchoolAudit")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "parentType", required = false) String parentType,
@RequestParam(value = "childType", required = false) String childType,
@RequestParam(value = "activityType", required = false) String activityType,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit) {
Sql sql = Sqls.create("""
SELECT
xx.*,
u.userName,
u.loginName,
u.mobile as userMobile,
u.deptName,
u.unionName,
hdlb.parentTypeName,
zplb.childTypeName,
wmxx.activityName,
state.stateColor,
state.stateName
FROM
hd_wm_sbxx xx
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
LEFT JOIN `user` u ON u.userId = xx.submitUserId
LEFT JOIN audit_state state ON state.stateId = xx.state
LEFT JOIN hd_wm_xx wmxx ON wmxx.id=xx.activityId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin, A06")) {
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (isAudit == null) {
cnd.and("xx.state", ">=", 240);
} else if (isAudit) {
cnd.and("xx.state", ">", 240);
} else {
cnd.and("xx.state", "=", 240);
}
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.deptId", "=", unitId);
cnd.andEX("xx.parentTypeId", "=", parentType);
cnd.andEX("xx.childTypeId", "=", childType);
cnd.andEX("year(xx.submitTime)", "=", year);
cnd.desc("xx.submitTime").asc("u.unionId").asc("xx.parentTypeId");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("rollBack/{id}")
@RequiresPermissions("activity:opusLevy:opusSchoolAudit")
public AjaxResult rollBack(@PathVariable String id) {
dao.update(OpusLevySubmitInfo.class, Chain.make("state", OpusLevyAuditState.SCHOOL_READY), Cnd.where("id", "=", id));
return AjaxResult.success();
}
@PostMapping("doReview")
@RequiresPermissions("activity:opusLevy:opusSchoolAudit")
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
OpusLevySubmitInfo opusLevySubmitInfo = dao.fetch(OpusLevySubmitInfo.class, id);
if (pass == 1) {
opusLevySubmitInfo.setState(OpusLevyAuditState.SCHOOL_REJECTED);
} else if (pass == 2) {
opusLevySubmitInfo.setState(OpusLevyAuditState.SCHOOL_BACK_MODIFY);
} else {
opusLevySubmitInfo.setState(OpusLevyAuditState.SCHOOL_PASS);
}
opusLevySubmitInfo.setSchoolAuditId(audit.getId());
dao.updateIgnoreNull(opusLevySubmitInfo);
return AjaxResult.success();
}
}
@@ -0,0 +1,129 @@
package com.ruoyi.activity.controller.opusLevy;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.constant.opusLevy.OpusLevyAuditState;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevySubmitInfo;
import com.ruoyi.activity.service.opusLevy.OpusActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* @Author JyuHsin
* @Date 2023/2/14
* @Description
*/
@RestController
@RequestMapping("/opusLevy/opusUnionAudit")
public class OpusUnionAuditController {
@Autowired
private Dao dao;
@Autowired
private OpusActivityManageService opusActivityManageService;
@PostMapping("pageData")
@RequiresPermissions("activity:opusLevy:opusUnionAudit")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "parentType", required = false) String parentType,
@RequestParam(value = "childType", required = false) String childType,
@RequestParam(value = "activityType", required = false) String activityType,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit) {
Sql sql = Sqls.create("""
SELECT
xx.*,
u.userName,
u.loginName,
u.mobile as userMobile,
u.deptName,
u.unionName,
hdlb.parentTypeName,
zplb.childTypeName,
wmxx.activityName,
state.stateColor,
state.stateName
FROM
hd_wm_sbxx xx
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
LEFT JOIN `user` u ON u.userId = xx.submitUserId
LEFT JOIN audit_state state ON state.stateId = xx.state
LEFT JOIN hd_wm_xx wmxx ON wmxx.id=xx.activityId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin, A06")) {
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (isAudit == null) {
cnd.and("xx.state", ">=", 210);
} else if (isAudit) {
cnd.and("xx.state", ">", 210);
} else {
cnd.and("xx.state", "=", 210);
}
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.deptId", "=", unitId);
cnd.andEX("xx.parentTypeId", "=", parentType);
cnd.andEX("xx.childTypeId", "=", childType);
cnd.andEX("year(xx.submitTime)", "=", year);
cnd.desc("xx.submitTime").asc("u.unionId").asc("xx.parentTypeId");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("rollBack/{id}")
@RequiresPermissions("activity:opusLevy:opusUnionAudit")
public AjaxResult rollBack(@PathVariable String id) {
dao.update(OpusLevySubmitInfo.class, Chain.make("state", OpusLevyAuditState.UNION_READY), Cnd.where("id", "=", id));
return AjaxResult.success();
}
@PostMapping("doReview")
@RequiresPermissions("activity:opusLevy:opusUnionAudit")
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
OpusLevySubmitInfo opusLevySubmitInfo = dao.fetch(OpusLevySubmitInfo.class, id);
if (pass == 1) {
opusLevySubmitInfo.setState(OpusLevyAuditState.UNION_REJECTED);
} else if (pass == 2) {
opusLevySubmitInfo.setState(OpusLevyAuditState.UNION_BACK_MODIFY);
} else {
opusLevySubmitInfo.setState(OpusLevyAuditState.SCHOOL_READY);
}
opusLevySubmitInfo.setUnionAuditId(audit.getId());
dao.updateIgnoreNull(opusLevySubmitInfo);
return AjaxResult.success();
}
}
@@ -0,0 +1,141 @@
package com.ruoyi.activity.controller.opusLevy;
import com.ruoyi.activity.api.constant.opusLevy.OpusLevyAuditState;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevy;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevyChildType;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevyParentType;
import com.ruoyi.activity.api.domain.opusLevy.OpusLevySubmitInfo;
import com.ruoyi.activity.service.opusLevy.OpusActivityManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/14
* @Description
*/
@RestController
@RequestMapping("/opusLevy/opusUpload")
public class OpusUploadController {
@Autowired
private Dao dao;
@Autowired
private OpusActivityManageService opusActivityManageService;
@PostMapping("pageData")
@RequiresPermissions("activity:opusLevy:opusUpload")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "parentType", required = false) String parentType,
@RequestParam(value = "childType", required = false) String childType,
@RequestParam(value = "activityType", required = false) Integer activityType,
@RequestParam(value = "year", required = false) Integer year) {
Sql sql = Sqls.create("""
SELECT
xx.*,
sbr.userName AS submitUserName,
sbr.loginName,
hd.activityName,
hd.startTime,
hd.endTime,
sbr.deptName,
sbr.unionName,
hdlb.parentTypeName,
zplb.childTypeName,
state.stateColor,
state.stateName
FROM
hd_wm_sbxx xx
LEFT JOIN `user` sbr ON sbr.userId = xx.submitUserId
LEFT JOIN hd_wm_lb hdlb ON hdlb.id = xx.parentTypeId
LEFT JOIN hd_wm_zplb zplb ON zplb.id = xx.childTypeId
left join hd_wm_xx hd on hd.id = xx.activityId
LEFT JOIN audit_state state ON state.stateId = xx.state
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("xx.submitUserId", "=", SecurityUtils.getUserId());
if (activityType != null) {
cnd.and(new Static("xx.activityId in (select id from hd_wm_xx where type = %s)".formatted(activityType)));
}
cnd.andEX("xx.activityId", "=", activityId);
cnd.andEX("xx.parentTypeId", "=", parentType);
cnd.andEX("xx.childTypeId", "=", childType);
cnd.andEX("year(xx.submitTime)", "=", year);
cnd.desc("xx.submitTime").asc("sbr.userName").asc("sbr.unionCode").asc("sbr.deptId");
sql.setCondition(cnd);
Pagination pagination = opusActivityManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doHandle")
@RequiresPermissions("activity:opusLevy:opusUpload")
public AjaxResult doHandle(@RequestBody OpusLevySubmitInfo submitInfo) {
submitInfo.setSubmitUserId(SecurityUtils.getUserId());
submitInfo.setSubmitTime(DateUtils.getDate());
submitInfo.setState(OpusLevyAuditState.UNION_READY);
dao.insertOrUpdate(submitInfo);
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
public AjaxResult findOne(@PathVariable String id) {
Sql sql = Sqls.create("""
SELECT
sbxx.*,
u.userName,
u.loginName,
u.deptName as unitName,
lb.parentTypeName,
zplb.childTypeName
FROM
hd_wm_sbxx sbxx
left join `user` u on u.userId = sbxx.submitUserId
left join hd_wm_lb lb on lb.id = sbxx.parentTypeId
left join hd_wm_zplb zplb on zplb.id = sbxx.childTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("sbxx.id", "=", id);
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap nutMap = sql.getObject(NutMap.class);
nutMap.put("activity", dao.fetch(OpusLevy.class, nutMap.getString("activityId")));
nutMap.put("parentTypeList", dao.query(OpusLevyParentType.class, Cnd.where("activityId", "=", nutMap.getString("activityId"))
.asc("location")));
nutMap.put("childTypeList", dao.query(OpusLevyChildType.class, Cnd.where("activityId", "=", nutMap.getString("activityId"))
.asc("location")));
return AjaxResult.success(nutMap);
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("activity:opusLevy:opusUpload")
public AjaxResult doDelete(@PathVariable String id) {
dao.clear(OpusLevySubmitInfo.class, Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,46 @@
package com.ruoyi.activity.controller.question;
import com.ruoyi.activity.service.question.QuestionAnswerRankingService;
import com.ruoyi.activity.service.question.QuestionService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.Param;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* 答题
*/
@RestController
@RequestMapping("/question/answer/ranking")
public class QuestionAnswerRankingController {
@Resource
private QuestionService questionService;
@Resource
private QuestionAnswerRankingService questionAnswerRankingService;
@PostMapping("/pageData")
@RequiresPermissions("activity:question:questionRanking")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, value = "questionId") String questionId,
@RequestParam(required = false, value = "unionId") String unionId,
@RequestParam(required = false, value = "unitId") String unitId,
@RequestParam(required = false, value = "answerDate") String answerDate) {
Pagination pagination = questionAnswerRankingService.pageData(pageForm, questionId, unionId, unitId, answerDate);
return AjaxResult.success(pagination);
}
}
@@ -0,0 +1,238 @@
package com.ruoyi.activity.controller.question;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.ruoyi.activity.api.domain.question.Question;
import com.ruoyi.activity.api.domain.question.Question_issue;
import com.ruoyi.activity.service.question.QuestionService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* TODO
* 投票数据分析
*
* @Author zhf
* @Date 2023/2/9 11:03
*/
@RestController
@RequestMapping("/question/data")
public class QuestionDataController {
@Autowired
private QuestionService questionService;
@PostMapping("/pageData")
@RequiresPermissions("activity:question:questionData")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, value = "qlx") Integer qlx,
@RequestParam(required = false, value = "qtitle") String qtitle,
@RequestParam(required = false, value = "year") Integer year) {
Sql sql = Sqls.create("""
SELECT
q.*,
u.`userName`
FROM
question q
LEFT JOIN `user` u ON q.`qcreator` = u.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (qlx != null) {
cnd.and("qlx", "=", qlx);
}
if (Strings.isNotBlank(qtitle)) {
cnd.where().andLike("qtitle", qtitle);
}
cnd.and("YEAR(qctime)", "=", year);
cnd.desc("qctime");
cnd.desc("qlx");
sql.setCondition(cnd);
return AjaxResult.success(questionService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@PostMapping("/tkpageData")
@RequiresPermissions("activity:question:questionData")
public AjaxResult tkpageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, value = "wid") String wid) {
Sql sql = Sqls.create("SELECT * FROM `question_reply` $condition");
Cnd cnd = Cnd.NEW();
cnd.and("rwid", "=", wid);
if (Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike("rval", pageForm.getSearchKeyword());
}
cnd.desc("rtime");
sql.setCondition(cnd);
return AjaxResult.success(questionService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@GetMapping("/getReplyData")
@RequiresPermissions("activity:question:questionData")
public AjaxResult getReplyData(String qid) {
Map result = new HashMap();
Question question = questionService.getQuestion(qid);
result.put("q", question);
List<Question_issue> issues = questionService.dao().query(Question_issue.class, Cnd.where("iqid", "=", qid));
for (Question_issue issue : issues) {
Sql yysSql = Sqls.create("""
SELECT
COUNT( DISTINCT reply.`ridentity` )
FROM
question_reply reply
WHERE reply.`rwid` IN (SELECT wor.`wid` FROM question_wor wor WHERE wor.`wiid` = @iid)
""").setParam("iid", issue.getIid());
Sql zsSql = Sqls.create("""
SELECT
COUNT( 1 )
FROM
question_reply reply
WHERE
reply.`rwid`IN (SELECT wor.`wid` FROM question_wor wor WHERE wor.`wiid` = @iid)
""").setParam("iid", issue.getIid());
int yxs = questionService.count(yysSql);
int zs = questionService.count(zsSql);
Map i = new HashMap();
Sql sql = Sqls.create("""
SELECT
reply.`rwid`,
COUNT( 1 ) c
FROM
question_reply reply
WHERE
reply.`rwid` IN (SELECT wor.`wid` FROM question_wor wor WHERE wor.`wiid` = @iid)
GROUP BY
reply.`rwid`
""").setParam("iid", issue.getIid());
List<Record> list = questionService.list(sql);
for (Record record : list) {
i.put(record.getString("rwid"), record.getInt("c"));
}
Sql sumSql = Sqls.create("""
SELECT
COUNT( DISTINCT reply.userId )
FROM
question_reply reply
WHERE
reply.qid = @qid
""").setParam("qid", qid);
i.put("num", questionService.count(sumSql));
i.put("yxs", yxs); //有效数
i.put("zs", zs); //总数
result.put(issue.getIid(), i);
}
return AjaxResult.success(result);
}
@RequestMapping("/doExport")
@RequiresPermissions("activity:question:questionData")
public void doExport(String questionId, HttpServletResponse response) {
try {
Sql sql = Sqls.create("""
SELECT
qu.qtitle,
issue.ipxbh,
issue.iname,
wor.wtxt,
wor.wsm ,
(SELECT COUNT(DISTINCT reply.userId) FROM question_reply reply WHERE reply.qid = qu.qid) num,
(SELECT COUNT(DISTINCT reply.userId) FROM question_reply reply WHERE reply.qid = qu.qid AND reply.rwid = wor.wid) votersNum,
CONCAT(convert((((SELECT COUNT(DISTINCT reply.userId) FROM question_reply reply WHERE reply.qid = qu.qid AND reply.rwid = wor.wid)/(SELECT COUNT(DISTINCT reply.userId) FROM question_reply reply WHERE reply.qid = qu.qid)) * 100),decimal(18,2)),'%') voterScale
FROM
question_wor wor
LEFT JOIN question_issue issue ON issue.iid = wor.wiid
LEFT JOIN question qu ON qu.qid = issue.iqid
WHERE
qu.qid = @questionId
AND issue.itx = 1
ORDER BY
issue.ipxbh,wor.wpxbh
""").setParam("questionId", questionId);
List<QuestionExportEntity.ExportEntity2> exportList = questionService.listEntity(sql, QuestionExportEntity.ExportEntity2.class);
for (int i = 0; i < exportList.size(); i++) {
exportList.get(i).setIndex(i + 1);
exportList.get(i).setIname(delHTMLTag(exportList.get(i).getIname()));
}
String fileName = exportList.isEmpty() ? "" : exportList.get(0).getQtitle();
String num = exportList.isEmpty() ? "" : exportList.get(0).getNum();
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportParams.setTitle(fileName + "(参加问卷的人数:" + num + "人)");
exportParams.setSheetName(fileName);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, QuestionExportEntity.ExportEntity2.class, exportList);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(fileName + "汇总.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public String delHTMLTag(String htmlStr) {
String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式
String regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式
Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
Matcher m_style = p_style.matcher(htmlStr);
htmlStr = m_style.replaceAll(""); //过滤style标签
Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
Matcher m_html = p_html.matcher(htmlStr);
htmlStr = m_html.replaceAll(""); //过滤html标签
htmlStr = htmlStr.replace(" ", "");
htmlStr = htmlStr.replaceAll("\\s*|\t|\r|\n", "");
htmlStr = htmlStr.replace("", "");
htmlStr = htmlStr.replace("", "");
htmlStr = htmlStr.replaceAll(" ", "");
return htmlStr.trim(); //返回文本字符串
}
}
@@ -0,0 +1,124 @@
package com.ruoyi.activity.controller.question;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/12 11:44
*/
public class QuestionExportEntity {
@Data
public static class ExportInventoryEntity {
@Excel(name = "工号", width = 20d)
private String loginname;
@Excel(name = "姓名", width = 20d)
private String username;
@Excel(name = "商品名称", width = 20d)
private String commodityName;
@Excel(name = "商品单价")
private String price;
@Excel(name = "选购数量")
private String number;
@Excel(name = "所属工会")
private String unionname;
}
@Data
public static class ExportUserEntity {
@Excel(name = "工号", width = 20d)
private String loginname;
@Excel(name = "姓名", width = 20d)
private String username;
@Excel(name = "所属单位", width = 40d)
private String unitname;
@Excel(name = "所属工会", width = 40d)
private String unionname;
@Excel(name = "选购总数")
private String totalNumber;
@Excel(name = "总金额")
private String totalPrice;
@Excel(name = "签收人姓名", width = 20d)
private String signerUserName;
@Excel(name = "联系方式", width = 40d)
private String signerPhone;
@Excel(name = "收货地址", width = 40d)
private String signerAddress;
}
@Data
public static class ExportEntity {
private String userId;
@Excel(name = "工号", width = 20d)
private String loginname;
@Excel(name = "姓名", width = 20d)
private String username;
@Excel(name = "性别", width = 20d)
private String sex;
@Excel(name = "所属单位", width = 40d)
private String unitname;
@Excel(name = "所属工会", width = 40d)
private String unionname;
@Excel(name = "答题次数", width = 20d)
private Integer days;
@Excel(name = "分值", width = 20d)
private String fraction;
private String qtitle;
}
@Data
public static class ExportEntity2 {
@Excel(name = "序号")
private Integer index;
@Excel(name = "商品类别", width = 40d)
private String iname;
@Excel(name = "商品名称", width = 40d)
private String wtxt;
@Excel(name = "规格说明", width = 60d)
private String wsm;
@Excel(name = "投票人数", width = 20d)
private String votersNum;
@Excel(name = "投票比例", width = 20d)
private String voterScale;
private String num;
private String qtitle;
}
}
@@ -0,0 +1,151 @@
package com.ruoyi.activity.controller.question;
import com.ruoyi.activity.api.domain.question.Question;
import com.ruoyi.activity.api.domain.question.Question_issue;
import com.ruoyi.activity.service.question.QuestionService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* 问卷
*/
@RestController
@RequestMapping("/question/mange")
public class QuestionMangeController {
@Resource
private QuestionService questionService;
@Resource
private Dao dao;
@PostMapping("/pageData")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, value = "qtitle") String qtitle,
@RequestParam(required = false, value = "year") Integer year) {
Sql sql = Sqls.create("""
SELECT
q.*,
u.`userName`
FROM
question q
LEFT JOIN `user` u ON q.`qcreator` = u.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(qtitle)) {
cnd.where().andLike("q.qtitle", qtitle);
}
cnd.andEX("YEAR(qctime)", "=", year);
cnd.desc("qctime");
sql.setCondition(cnd);
return AjaxResult.success(questionService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@PostMapping("/doAdd")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult doAdd(@RequestBody Question question) {
questionService.doAdd(question);
return AjaxResult.success();
}
@PostMapping("/doEdit")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult doEdit(@RequestBody Question question) {
questionService.doEdit(question);
return AjaxResult.success();
}
/**
* 修改活动状态
* @param qid
* @param flag
* @return
*/
@PostMapping("/upStatus")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult upStatus(String qid, Integer flag) {
dao.update(Question.class, Chain.make("qflag", flag), Cnd.where("qid", "=", qid));
return AjaxResult.success();
}
/**
* 删除
* @param qid
* @return
*/
@DeleteMapping("/doDelete")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult doDelete(String qid) {
questionService.deleteQuestion(qid);
return AjaxResult.success();
}
/**
* 问卷基本信息
* @param questionId
* @return
*/
@RequestMapping("/findBasicInfo")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult findBasicInfo(String questionId) {
Question question = questionService.fetch(questionId);
return AjaxResult.success(question);
}
/**
* 修改问卷基本信息
* @param question
* @return
*/
@RequestMapping("/modifyBasicInfo")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult modifyBasicInfo(@RequestBody Question question) {
questionService.modifyBasicInfo(question);
return AjaxResult.success(question);
}
/**
* 题目信息
*
* @param questionId
* @return
*/
@RequestMapping("/issueList")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult issueList(String questionId) {
List<Question_issue> issues = dao.query(Question_issue.class, Cnd.where("iqid", "=", questionId).asc("displayDate").asc("ipxbh"));
dao.fetchLinks(issues, "wors", Cnd.NEW().asc("wpxbh"));
return AjaxResult.success(issues);
}
/**
* 编辑题目信息
*
* @param issues
* @param questionId
* @return
*/
@RequestMapping("/modifyIssues")
@RequiresPermissions("activity:question:questionMange")
public AjaxResult modifyIssues(@RequestBody Question_issue[] issues, String questionId) {
questionService.modifyIssues(issues, questionId);
return AjaxResult.success(issues);
}
}
@@ -0,0 +1,90 @@
package com.ruoyi.activity.controller.question;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.question.Question;
import com.ruoyi.activity.service.question.QuestionAnswerRankingService;
import com.ruoyi.activity.service.question.QuestionService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.DictUtils;
import com.ruoyi.system.api.domain.SysDictData;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 答题排名
*/
@RestController
@RequestMapping("/question/ranking")
public class QuestionRankingController {
@Resource
private QuestionService questionService;
@Resource
private QuestionAnswerRankingService questionAnswerRankingService;
@RequestMapping("/pageData")
@RequiresPermissions("activity:question:questionRanking")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, value = "questionId") String questionId,
@RequestParam(required = false, value = "unionId") String unionId,
@RequestParam(required = false, value = "unitId") String unitId,
@RequestParam(required = false, value = "answerDate") String answerDate) {
Pagination pagination = questionAnswerRankingService.pageData(pageForm, questionId, unionId, unitId, answerDate);
return AjaxResult.success(pagination);
}
@RequestMapping("/doExport")
@RequiresPermissions("activity:question:questionRanking")
public void doExport(@RequestParam(required = false, value = "questionId") String questionId,
@RequestParam(required = false, value = "unionId") String unionId,
@RequestParam(required = false, value = "unitId") String unitId,
HttpServletResponse response) {
}
@RequestMapping("/doExportAll")
@RequiresPermissions("activity:question:questionRanking")
public void doExportAll(String questionId, HttpServletResponse response) {
}
@GetMapping("/getQuestion")
@RequiresPermissions("activity:question:questionRanking")
public AjaxResult getQuestion(int year) {
Cnd cnd = Cnd.NEW();
cnd.and("YEAR(qctime)", "=", year);
cnd.and("qflag", "=", 2);
cnd.desc("qctime");
List<Question> list = questionService.query(cnd);
return AjaxResult.success(list);
}
}
@@ -0,0 +1,209 @@
package com.ruoyi.activity.controller.question;
import com.ruoyi.activity.api.domain.question.Question;
import com.ruoyi.activity.service.question.QuestionService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* TODO
* 问卷查询统计
*
* @Author zhf
* @Date 2023/2/9 11:04
*/
@RestController
@RequestMapping("/question/unionStats")
public class QuestionUnionStatsController {
@Autowired
private QuestionService questionService;
@PostMapping("/pageData")
@RequiresPermissions("activity:question:questionUnionStats")
public AjaxResult pageData(String questionId, String unionId) {
Question question = questionService.fetch(questionId);
Integer activityUserScopeId = question.getActivityUserScopeId();
//查询选项
Sql sqlOption = Sqls.create("""
SELECT
qw.wid,
qw.wtxt
FROM
question_wor qw
JOIN
question_issue qi ON qw.wiid = qi.iid
WHERE
qi.iqid = @questionId
""");
sqlOption.setParam("questionId", questionId);
List<NutMap> options = questionService.listMap(sqlOption);
Sql sql = Sqls.create("""
SELECT
un.id AS unionId,
un.unionName,
COUNT(DISTINCT u.userId) AS teacherSum,
COUNT(DISTINCT r.userId) AS replyNum,
(COUNT(DISTINCT u.userId) - COUNT(DISTINCT r.userId)) AS unselectedTeacherSum,
$optionSql
FROM
`union` un
LEFT JOIN `user` u ON u.unionId = un.id
LEFT JOIN question_reply r ON r.userId = u.userId AND r.qid = @questionId
WHERE
EXISTS (
SELECT 1
FROM activity_user_scope aus
WHERE aus.userId = u.userId AND aus.groupId = @activityUserScopeId
)
GROUP BY
un.id,
un.unionName
""");
sql.setParam("questionId", questionId);
sql.setParam("activityUserScopeId", activityUserScopeId);
if (options.size() > 0) {
StringBuilder sbf = new StringBuilder();
Iterator<NutMap> iterator = options.iterator();
while (iterator.hasNext()) {
NutMap option = iterator.next();
sbf.append("sum(case when r.rwid = '").append(option.getString("wid")).append("' then 1 else 0 end) '").append(option.getString("wtxt")).append("'");
if (iterator.hasNext()) {
sbf.append(",");
}
}
sql.setVar("optionSql",sbf);
} else {
sql.setVar("optionSql", null);
}
Cnd cnd = Cnd.NEW();
cnd.andEX("un.id", "=", unionId);
sql.setCondition(cnd);
List<NutMap> resultList = questionService.listMap(sql);
List<NutMap> labelList = new ArrayList<>();
labelList.add(NutMap.NEW().addv("label", "基层工会名称").addv("prop", "unionName"));
labelList.add(NutMap.NEW().addv("label", "职工人数").addv("prop", "teacherSum"));
for (NutMap option : options) {
labelList.add(NutMap.NEW().addv("label", option.getString("wtxt")).addv("prop", option.getString("wtxt")));
}
labelList.add(NutMap.NEW().addv("label", "参加人数").addv("prop", "replyNum"));
labelList.add(NutMap.NEW().addv("label", "未选人数").addv("prop", "unselectedTeacherSum"));
return AjaxResult.success(Map.of("list", resultList, "label", labelList));
}
@GetMapping("/getQuestion")
public AjaxResult getQuestion(Integer year) {
Cnd cnd = Cnd.NEW();
cnd.and("YEAR(qctime)", "=", year);
cnd.and("qlx", "=", 4);
cnd.desc("qctime");
return AjaxResult.success(questionService.query(cnd));
}
@GetMapping("/getAnswerData")
@RequiresPermissions("activity:question:ranking")
public AjaxResult getAnswerData(String questionId, String unionId) {
if (Strings.isBlank(questionId) || Strings.isBlank(unionId)) {
return AjaxResult.error("缺少必要参数");
}
Sql sql = Sqls.create("""
SELECT
u.loginName loginname,
u.userName username,
u.sex,
u.deptName unitname,
u.unionName unionname,
(
SELECT
sum( tab.fraction )
FROM
(
SELECT
IF
((
SELECT
sum( ( SELECT 1 FROM question_reply reply WHERE reply.rwid = wor.wid AND reply.userId = u.userId ) )
FROM
question_wor wor
WHERE
wor.wiid = issue.iid
AND wor.correct = 1
) = ( SELECT count( 1 ) FROM question_wor wor WHERE wor.wiid = issue.iid AND wor.correct = 1 ),
issue.fraction,
0
) fraction
FROM
question_issue issue
WHERE
issue.iqid = @questionId
) tab
) fraction
FROM
`user` u
INNER JOIN question_reply reply ON reply.userId = u.userId
WHERE
u.unionid = @unionId
GROUP BY
u.userId
""").setParam("questionId", questionId).setParam("unionId", unionId);
return AjaxResult.success(questionService.listMap(sql));
}
// @GetMapping("/shopDetail")
// @RequiresPermissions("activity:question:questionUnionStats")
// public AjaxResult shopDetail(@RequestParam(required = false, value = "questionId") String questionId,
// @RequestParam(required = false, value = "unionId") String unionId) {
// NutMap union = questionService.fetch(Sqls.create("select * from `union`"));
// String unionname = union.getString("unionName");
// List<Map<String, Object>> list = questionExportService.shopData(questionId);
// list.forEach(v -> {
// Object name = v.get("name");
// if (v.get("name").equals("人员表")) {
// List<QuestionExportEntity.ExportUserEntity> eulist = (List<QuestionExportEntity.ExportUserEntity>) v.get("data");
// List<QuestionExportEntity.ExportUserEntity> newEuList = eulist.stream().filter(x -> x.getUnionname().equals(unionname)).collect(Collectors.toList());
// v.put("data", newEuList);
// }
//
// if (v.get("name").equals("清单表")) {
// List<QuestionExportEntity.ExportInventoryEntity> eulist = (List<QuestionExportEntity.ExportInventoryEntity>) v.get("data");
// List<QuestionExportEntity.ExportInventoryEntity> newEuList = eulist.stream().filter(x -> x.getUnionname().equals(unionname)).collect(Collectors.toList());
// v.put("data", newEuList);
// }
//
// });
// return AjaxResult.success(list);
// }
// @GetMapping("/cakeUserData")
// @RequiresPermissions("activity:question:questionUnionStats")
// public AjaxResult cakeUserData(@RequestParam(required = false, value = "questionId") String questionId,
// @RequestParam(required = false, value = "unionId") String unionId) {
// return AjaxResult.success(questionService.cakeUserDataByUnionId(questionId, unionId));
// }
}
@@ -0,0 +1,478 @@
package com.ruoyi.activity.controller.question.h5;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.activity.api.domain.basic.ActivityUserScope;
import com.ruoyi.activity.api.domain.question.*;
import com.ruoyi.activity.service.question.QuestionService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* 问卷H5
*
* @author jug
* @date 2023/04/24
*/
@RestController
@RequestMapping("/question/h5")
public class QuestionH5Controller {
@Resource
private QuestionService questionService;
@Resource
private Dao dao;
@RequestMapping("/pageData")
public AjaxResult pageData(@RequestBody PageForm pageForm, @RequestParam int status, @RequestParam int type) {
Sql sql = Sqls.create("""
select
q.*
from
question q
$condition
""");
sql.setParam("today", DateUtil.today());
Cnd cnd = Cnd.NEW();
long now = System.currentTimeMillis();
if (status == 1) {
cnd.and("q.startTime", "<", now);
cnd.and("q.endTime", ">", now);
} else {
cnd.and("q.endTime", "<", now);
}
cnd.and("q.qlx", "=", type);
cnd.and("q.qflag", "=", 2);
cnd.desc("q.startTime");
sql.setCondition(cnd);
Pagination pagination = questionService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 检查参加权限
*
* @param activityUserScopeId 活动用户范围id
* @return {@link Object}
*/
@RequestMapping("/checkPermission/?")
public AjaxResult checkPermission(String activityUserScopeId) {
boolean exists = questionService.dao().count(ActivityUserScope.class, Cnd.where("groupId", "=", activityUserScopeId).and("userId", "=", SecurityUtils.getUserId())) > 0;
return AjaxResult.success(exists);
}
/**
* 问卷信息
*
* @param id id
* @param currentDate 日期
* @param randomCount 轮数
* @return {@link Object}
*/
@RequestMapping("/questionInfo/{id}")
public AjaxResult questionInfo(@PathVariable String id,
@RequestParam(required = false, value = "currentDate") String currentDate,
@RequestParam(required = false, value = "randomCount") Integer randomCount) {
Question question = questionService.fetch(id);
Cnd issueCnd = Cnd.NEW();
Integer ctMode = question.getCtMode();
if (ctMode == 1) {
//定时定题
//判断传入的日期是否已经加入到表里
QuestionRandomIssue randomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", question.getQid()).and("userId", "=", SecurityUtils.getUserIdStr())
.and("displayDate", "=", currentDate));
if (Lang.isEmpty(randomIssue)) {
Sql issueSql = Sqls.queryString(" SELECT iid FROM `question_issue` where iqid = @qid AND displayDate = @displayDate");
issueSql.setParam("qid", id);
issueSql.setParam("displayDate", currentDate);
dao.execute(issueSql);
String[] randomIssueIds = (String[]) issueSql.getResult();
QuestionRandomIssue questionRandomIssue = new QuestionRandomIssue();
questionRandomIssue.setQuestionId(id);
questionRandomIssue.setUserId(SecurityUtils.getUserIdStr());
questionRandomIssue.setIssueIds(Arrays.asList(randomIssueIds));
questionRandomIssue.setNum(null);
questionRandomIssue.setIsFinish(false);
questionRandomIssue.setDisplayDate(DateUtil.parseDate(currentDate));
dao.insert(questionRandomIssue);
issueCnd.and("iid", "in", randomIssueIds);
} else {
issueCnd.and("iid", "in", randomIssue.getIssueIds());
}
} else if (ctMode == 2) {
//随机模式
//判断是否为一天答题
DateTime startTime = DateUtil.date(question.getStartTime());
DateTime endTime = DateUtil.date(question.getEndTime());
long betweenDay = DateUtil.betweenDay(startTime, endTime, true);
//每次随机的题目数量
Integer ranDomSingleIssueNum = question.getRanDomSingleIssueNum();
//总共随机几次
Integer ranDomSum = question.getRanDomSum();
if (betweenDay == 0) {
//同一天 一天随机多次
if (randomCount != null) {
QuestionRandomIssue randomIssues = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", question.getQid()).and("userId", "=", SecurityUtils.getUserIdStr()).and("num", "=", randomCount));
issueCnd.andEX("iid", "in", randomIssues.getIssueIds());
} else {
//用户的随机题目
List<QuestionRandomIssue> randomIssues = dao.query(QuestionRandomIssue.class, Cnd.where("questionId", "=", question.getQid()).and("userId", "=", SecurityUtils.getUserIdStr()));
//查询已经随机但是并没有答题完成的题目
List<String> notFinishIssueIds = randomIssues.stream().filter(v -> v.getIsFinish() != null && !v.getIsFinish()).findFirst().map(QuestionRandomIssue::getIssueIds).orElseGet(Collections::emptyList);
if (Lang.isNotEmpty(notFinishIssueIds)) {
//就查询没答完的题目
issueCnd.and("iid", "in", notFinishIssueIds);
} else {
//进行下一次随机 然后加入到随机题目表里
//已经答了的题目
List<String> hasAnswerIssueIds = randomIssues.stream().flatMap(v -> v.getIssueIds().stream()).collect(Collectors.toList());
//已经随机几次了
int maxAnswerNum = randomIssues.stream().mapToInt(QuestionRandomIssue::getNum).max().orElse(0);
Sql issueSql = null;
if (maxAnswerNum == ranDomSum) {
//随机完了 没有题目了 默认去最后一轮
// issueCnd.andEX("iid", "in", hasAnswerIssueIds);
List<String> lastRanDomIssueIds = randomIssues.stream().filter(v -> v.getNum() == maxAnswerNum).flatMap(v -> v.getIssueIds().stream()).collect(Collectors.toList());
issueCnd.andEX("iid", "in", lastRanDomIssueIds);
} else {
if (maxAnswerNum == 0) {
//从没有随即过
issueSql = Sqls.queryString(" SELECT iid FROM `question_issue` where iqid = @qid ORDER BY RAND() LIMIT @num");
} else {
//之前随机过
issueSql = Sqls.queryString(" SELECT iid FROM `question_issue` where iqid = @qid and iid not in (@issueIds) ORDER BY RAND() LIMIT @num");
issueSql.setParam("issueIds", hasAnswerIssueIds);
}
issueSql.setParam("qid", id);
issueSql.setParam("num", ranDomSingleIssueNum);
dao.execute(issueSql);
String[] randomIssueIds = (String[]) issueSql.getResult();
if (Lang.isNotEmpty(randomIssueIds)) {
QuestionRandomIssue questionRandomIssue = new QuestionRandomIssue();
questionRandomIssue.setQuestionId(id);
questionRandomIssue.setUserId(SecurityUtils.getUserIdStr());
questionRandomIssue.setIssueIds(Arrays.asList(randomIssueIds));
questionRandomIssue.setNum(maxAnswerNum + 1);
questionRandomIssue.setIsFinish(false);
questionRandomIssue.setDisplayDate(DateUtil.parseDate(DateUtil.today()));
dao.insert(questionRandomIssue);
}
//获取本次的随机题目
issueCnd.andEX("iid", "in", randomIssueIds);
}
}
}
} else {
//不是一天 那就一天随机一次
//用户的随机题目记录
List<QuestionRandomIssue> randomIssues = dao.query(QuestionRandomIssue.class, Cnd.where("questionId", "=", question.getQid()).and("userId", "=", SecurityUtils.getUserIdStr()));
//已经随机的题目
List<String> hasRanDomIssueIds = randomIssues.stream().flatMap(v -> v.getIssueIds().stream()).collect(Collectors.toList());
//判断传入的日期是否已经加入到表里
QuestionRandomIssue currentDateRandomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", question.getQid()).and("userId", "=", SecurityUtils.getUserIdStr())
.and("displayDate", "=", currentDate));
if (Lang.isEmpty(currentDateRandomIssue)) {
Sql issueSql = null;
if (Lang.isEmpty(hasRanDomIssueIds)) {
issueSql = Sqls.queryString(" SELECT iid FROM `question_issue` where iqid = @qid ORDER BY RAND() LIMIT @num");
} else {
//之前随机过
issueSql = Sqls.queryString(" SELECT iid FROM `question_issue` where iqid = @qid and iid not in (@issueIds) ORDER BY RAND() LIMIT @num");
issueSql.setParam("issueIds", hasRanDomIssueIds);
}
issueSql.setParam("num", ranDomSingleIssueNum);
issueSql.setParam("qid", id);
dao.execute(issueSql);
String[] randomIssueIds = (String[]) issueSql.getResult();
QuestionRandomIssue questionRandomIssue = new QuestionRandomIssue();
questionRandomIssue.setQuestionId(id);
questionRandomIssue.setUserId(SecurityUtils.getUserIdStr());
questionRandomIssue.setIssueIds(Arrays.asList(randomIssueIds));
questionRandomIssue.setNum(null);
questionRandomIssue.setIsFinish(false);
questionRandomIssue.setDisplayDate(DateUtil.parseDate(currentDate));
dao.insert(questionRandomIssue);
issueCnd.and("iid", "in", randomIssueIds);
} else {
issueCnd.and("iid", "in", currentDateRandomIssue.getIssueIds());
}
}
} else if (ctMode == 3) {
//常规模式
//判断是否将题目加进去了
QuestionRandomIssue randomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", question.getQid()).and("userId", "=", SecurityUtils.getUserIdStr()));
if (Lang.isEmpty(randomIssue)) {
Sql issueSql = Sqls.create(" SELECT iid FROM `question_issue` where iqid = @qid");
issueSql.setParam("qid", id);
issueSql.setCallback(Sqls.callback.strList());
dao.execute(issueSql);
List<String> randomIssueIds = (List<String>) issueSql.getResult();
Collections.shuffle(randomIssueIds);
QuestionRandomIssue questionRandomIssue = new QuestionRandomIssue();
questionRandomIssue.setQuestionId(id);
questionRandomIssue.setUserId(SecurityUtils.getUserIdStr());
questionRandomIssue.setIssueIds(randomIssueIds);
questionRandomIssue.setNum(null);
questionRandomIssue.setIsFinish(false);
dao.insert(questionRandomIssue);
issueCnd.and("iid", "in", randomIssueIds);
} else {
issueCnd.and("iid", "in", randomIssue.getIssueIds());
}
}
// issueCnd.asc("ipxbh");
questionService.fetchLinks(question, "issues", issueCnd);
for (Question_issue issue : question.getIssues()) {
questionService.fetchLinks(issue, "wors", Cnd.NEW().asc("wpxbh"));
}
if (question.getDisruptingOrder()) {
Collections.shuffle(question.getIssues());
}
return AjaxResult.success(question);
}
/**
* 保存答案
*
* @param repliesArray 答复记录
* @param questionId 问卷ID
* @param isSave 是否保存
* @return {@link Object}
*/
@RequestMapping("/saveAnswer")
public AjaxResult saveAnswer(@RequestBody Question_reply[] repliesArray, String questionId, Boolean isSave) {
questionService.saveAnswer(repliesArray, questionId, isSave);
return AjaxResult.success();
}
/**
* 答题信息
*
* @param id id
* @return {@link Object}
*/
@RequestMapping("/answerInfo/{id}")
public AjaxResult answerInfo(@PathVariable String id) {
List<Question_reply> replies = questionService.dao().query(Question_reply.class, Cnd.where("qid", "=", id).and("userId", "=", SecurityUtils.getUserIdStr()));
return AjaxResult.success(replies);
}
/**
* 再答一次
*
* @param questionId 问题id
* @return {@link Object}
*/
@RequestMapping("/answerAgain")
public AjaxResult answerAgain(String questionId) {
Sql issueIdsSql = Sqls.create("select iid from question_issue where iqid = @qid").setParam("qid", questionId);
String[] issueIds = (String[]) Daos.query(dao, issueIdsSql.toString(), Sqls.callback.strs());
//清空本日的答题记录
dao.clear(Question_reply.class, Cnd.where("qid", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()).and("issueId", "in", issueIds));
return AjaxResult.success();
}
@RequestMapping("/winInfo")
public AjaxResult winInfo(String questionId) {
Sql sql = Sqls.create("""
SELECT
u.username,
qw.winDate,
u.id
FROM
`question_winner` qw
LEFT JOIN `user` u ON u.id = qw.userId
WHERE
qw.questionId = @questionId
""");
sql.setParam("questionId", questionId);
List<NutMap> list = questionService.listMap(sql);
return AjaxResult.success(list);
}
/**
* 判断用户是否答完
*
* @param questionId 问卷ID
* @return
*/
@RequestMapping("/checkUserFinishAnswer")
public AjaxResult checkUserFinishAnswer(@RequestParam String questionId,
@RequestParam(required = false, value = "currentDate") String currentDate,
@RequestParam(required = false, value = "randomCount") Integer randomCount) {
Question question = dao.fetch(Question.class, questionId);
if (question.getCtMode() == 3) {
QuestionRandomIssue randomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()));
return AjaxResult.success(randomIssue.getIsFinish());
} else if (question.getCtMode() == 2) {
//判断是否为一天答题
DateTime startTime = DateUtil.date(question.getStartTime());
DateTime endTime = DateUtil.date(question.getEndTime());
long betweenDay = DateUtil.betweenDay(startTime, endTime, true);
if (betweenDay == 0) {
//同一天
if (randomCount != null) {
QuestionRandomIssue randomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()).and("num", "=", randomCount));
return AjaxResult.success(randomIssue.getIsFinish());
}
return AjaxResult.success(false);
} else {
//不是同一天 判断今天是否答完就行了
QuestionRandomIssue randomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()).and("displayDate", "=", DateUtil.today()));
//时间过了
if (DateUtil.parseDate(currentDate).isBefore(DateUtil.parseDate(DateUtil.today()))) {
return AjaxResult.success(true);
}
return AjaxResult.success(randomIssue.getIsFinish());
}
} else if (question.getCtMode() == 1) {
QuestionRandomIssue randomIssue = dao.fetch(QuestionRandomIssue.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()).and("displayDate", "=", currentDate));
//时间过了
if (DateUtil.parseDate(currentDate).isBefore(DateUtil.parseDate(DateUtil.today()))) {
return AjaxResult.success(true);
}
return AjaxResult.success(randomIssue.getIsFinish());
}
return AjaxResult.success(false);
}
@RequestMapping("/checkCanAnswerAgain")
public AjaxResult checkCanAnswerAgain(@RequestParam String questionId,
@RequestParam(required = false, value = "currentDate") String currentDate,
@RequestParam(required = false, value = "randomCount") Integer randomCount) {
Question question = dao.fetch(Question.class, questionId);
if (question.getCanRepeatedAnswer()) {
if (question.getCtMode() == 3) {
int count = dao.count(QuestionUserScore.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()));
return AjaxResult.success(count < question.getCanRepeatedAnswerNum());
} else if (question.getCtMode() == 2) {
//判断是否为一天答题
DateTime startTime = DateUtil.date(question.getStartTime());
DateTime endTime = DateUtil.date(question.getEndTime());
long betweenDay = DateUtil.betweenDay(startTime, endTime, true);
if (betweenDay == 0) {
return AjaxResult.success(false);
} else {
int count = dao.count(QuestionUserScore.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()).and("answerDate", "=", DateUtil.today()));
return AjaxResult.success(count < question.getCanRepeatedAnswerNum());
}
} else if (question.getCtMode() == 1) {
int count = dao.count(QuestionUserScore.class, Cnd.where("questionId", "=", questionId).and("userId", "=", SecurityUtils.getUserIdStr()).and("answerDate", "=", currentDate));
//时间过了
if (Lang.isNotEmpty(currentDate) && DateUtil.parseDate(currentDate).isBefore(DateUtil.parseDate(DateUtil.today()))) {
return AjaxResult.success(false);
}
return AjaxResult.success(count < question.getCanRepeatedAnswerNum());
}
}
return AjaxResult.success(false);
}
/**
* 获取得分
*
* @param questionId
* @param currentDate
* @param randomCount
* @return
*/
@RequestMapping("/getScore")
public AjaxResult getScore(@RequestParam String questionId,
@RequestParam(required = false, value = "currentDate") String currentDate,
@RequestParam(required = false, value = "randomCount") Integer randomCount) {
Question question = dao.fetch(Question.class, questionId);
if (question.getCtMode() == 1) {
QuestionUserScore userScore = dao.fetch(QuestionUserScore.class, Cnd.where("questionId", "=", questionId)
.and("userId", "=", SecurityUtils.getUserIdStr())
.and("displayDate", "=", currentDate)
.desc(question.getCalcScoreMode() == 1 ? "score" : "answerNum"));
return AjaxResult.success(Optional.ofNullable(userScore).map(v -> v.getScore()).orElse(0));
} else if (question.getCtMode() == 2) {
DateTime startTime = DateUtil.date(question.getStartTime());
DateTime endTime = DateUtil.date(question.getEndTime());
long betweenDay = DateUtil.betweenDay(startTime, endTime, true);
if (betweenDay == 0) {
QuestionUserScore userScore = dao.fetch(QuestionUserScore.class, Cnd.where("questionId", "=", questionId)
.and("userId", "=", SecurityUtils.getUserIdStr())
// .and("displayDate", "=", currentDate)
.and("answerNum", "=", randomCount)
.desc("answerNum"));
return AjaxResult.success(Optional.ofNullable(userScore).map(v -> v.getScore()).orElse(0));
} else {
QuestionUserScore userScore = dao.fetch(QuestionUserScore.class, Cnd.where("questionId", "=", questionId)
.and("userId", "=", SecurityUtils.getUserIdStr())
.and("displayDate", "=", currentDate)
.desc(question.getCalcScoreMode() == 1 ? "score" : "answerNum"));
return AjaxResult.success(Optional.ofNullable(userScore).map(v -> v.getScore()).orElse(0));
}
} else if (question.getCtMode() == 3) {
QuestionUserScore userScore = dao.fetch(QuestionUserScore.class, Cnd.where("questionId", "=", questionId)
.and("userId", "=", SecurityUtils.getUserIdStr())
.desc(question.getCalcScoreMode() == 1 ? "score" : "answerNum"));
return AjaxResult.success(Optional.ofNullable(userScore).map(v -> v.getScore()).orElse(0));
}
return AjaxResult.success();
}
/**
* 获取用户已回答的轮数 针对单天随机
*
* @param questionId 问卷ID
* @return
*/
@RequestMapping("/getUserHasAnswerRandomNum")
public AjaxResult getUserHasAnswerRandomNum(String questionId) {
Question question = dao.fetch(Question.class, questionId);
//判断是否为一天答题
DateTime startTime = DateUtil.date(question.getStartTime());
DateTime endTime = DateUtil.date(question.getEndTime());
long betweenDay = DateUtil.betweenDay(startTime, endTime, true);
if (question.getCtMode() == 2 && betweenDay == 0) {
int count = dao.count(QuestionRandomIssue.class, Cnd.where("questionId", "=", questionId)
.and("userId", "=", SecurityUtils.getUserIdStr()));
return AjaxResult.success(count);
}
return AjaxResult.success(0);
}
}
@@ -0,0 +1,102 @@
package com.ruoyi.activity.controller.site;
import com.ruoyi.activity.api.domain.site.ActivitySiteEquipment;
import com.ruoyi.activity.service.site.SiteReserveService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @version 1.0
* @Author zzr
* @nameSiteEquipmentController
* @Date 2024/6/17 15:41
* @注释 活动场地器材管理
*/
@RestController
@RequestMapping("/site/siteEquipment")
public class SiteEquipmentController {
@Autowired
private SiteReserveService siteReserveService;
@PostMapping("pageData")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "equipmentName",required = false)String equipmentName,
@RequestParam(value = "siteId",required = false)String siteId){
Sql sql = Sqls.create("""
SELECT
ase.*,
asi.`name` as siteName
FROM
activity_site_equipment ase
LEFT JOIN activity_site_info asi ON asi.id = ase.siteId
$condition
""");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(equipmentName)) {
cnd.and(Cnd.likeEX("ase.equipmentName", equipmentName));
}
cnd.andEX("ase.siteId","=",siteId);
sql.setCondition(cnd);
Pagination pagination = siteReserveService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 场地器材修改或新增
* @param equipment
* @return
*/
@PostMapping("doAddOrModify")
public Object doAddOrModify(@RequestBody ActivitySiteEquipment equipment){
if (Lang.isEmpty(equipment)){
return AjaxResult.error();
}
//判断编码是否重复
Cnd cnd = Cnd.NEW();
cnd.and("equipmentCode","=",equipment.getEquipmentCode());
cnd.andEX("id","!=", equipment.getId());
int count = siteReserveService.dao().count(ActivitySiteEquipment.class,cnd);
if (count>0){
return AjaxResult.error("编码重复!");
}
siteReserveService.dao().insertOrUpdate(equipment);
return AjaxResult.success();
}
/**
* 删除
* @param id
* @return
*/
@GetMapping("doRemove")
public AjaxResult doRemove(@RequestParam("id") String id){
siteReserveService.dao().clear(ActivitySiteEquipment.class, Cnd.where("id","=",id));
return AjaxResult.success();
}
/**
* 开启或关闭器材的预约
* @param id
* @return
*/
@GetMapping("siteEquipmentOpenChange")
public AjaxResult siteEquipmentOpenChange(@RequestParam("id") String id){
siteReserveService.dao().update(ActivitySiteEquipment.class,
Chain.makeSpecial("isOpen", "isOpen ^ 1"),Cnd.where("id","=",id));
return AjaxResult.success();
}
}
@@ -0,0 +1,90 @@
package com.ruoyi.activity.controller.site;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.service.site.SiteInfoService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/1
* @Description
*/
@RestController
@RequestMapping("/site/siteManage")
public class SiteManageController {
@Autowired
private Dao dao;
private SiteInfoService siteInfoService;
@Autowired
public SiteManageController(SiteInfoService siteInfoService) {
this.siteInfoService = siteInfoService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:site:siteManage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "siteType", required = false) String siteType) {
Cnd cnd = Cnd.NEW();
if (year != null && year != 0) {
cnd.and("YEAR(create_time)", "=", year);
}
if (Strings.isNotBlank(siteType)) {
cnd.and("typeId", "=", siteType);
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
if (Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.desc("create_time");
}
Pagination pagination = siteInfoService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
return AjaxResult.success(pagination);
}
@PostMapping("doAdd")
@RequiresPermissions("activity:site:siteManage")
public AjaxResult doAdd(@RequestBody ActivitySiteInfo activitySiteInfo) {
dao.insert(activitySiteInfo);
return AjaxResult.success();
}
@PostMapping("doEdit")
@RequiresPermissions("activity:site:siteManage")
public AjaxResult doEdit(@RequestBody ActivitySiteInfo activitySiteInfo) {
dao.updateIgnoreNull(activitySiteInfo);
return AjaxResult.success();
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("activity:site:siteManage")
public AjaxResult doDelete(@PathVariable String id) {
dao.delete(ActivitySiteInfo.class, id);
return AjaxResult.success();
}
@GetMapping("findOneSite/{id}")
@RequiresPermissions("activity:site:siteManage")
public AjaxResult findOneSite(@PathVariable String id) {
ActivitySiteInfo siteInfo = dao.fetch(ActivitySiteInfo.class, id);
return AjaxResult.success(siteInfo);
}
}
@@ -0,0 +1,119 @@
package com.ruoyi.activity.controller.site;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.service.site.SiteInfoService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* @Author JyuHsin
* @Date 2023/2/2
* @Description
*/
@RestController
@RequestMapping("/site/siteRecord")
public class SiteRecordController {
@Autowired
private Dao dao;
@Autowired
private SiteInfoService siteInfoService;
@PostMapping("pageData")
@RequiresPermissions("activity:site:siteRecord")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "siteType", required = false) String siteType,
@RequestParam(value = "time", required = false) String time,
@RequestParam(value = "siteId", required = false) String siteId,
@RequestParam(value = "siteName", required = false) String siteName) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` site_name,
ass.`stateName` state_name,
ass.`stateColor` state_color,
ass.stateAuditType
FROM
activity_site_reserve asr
LEFT JOIN activity_site_info asi ON asi.id = asr.site_id
LEFT JOIN audit_state ass ON ass.stateId = asr.reserve_state
LEFT JOIN `user` u ON u.userId = asr.reserve_person_id
$condition
""");
if (!AuthUtil.hasAnyRoles("sysadmin,A06")) {
cnd.and("asr.reserve_person_unionid", "=", SecurityUtils.getUnionId());
}
if (Strings.isNotBlank(time)) {
cnd.and("left(asr.reserve_start_time, 7)", "=", time);
}
if (Strings.isNotBlank(siteId)) {
cnd.and("site_id", "=", siteId);
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (Strings.isNotBlank(siteType)) {
cnd.and("typeId", "=", siteType);
}
cnd.andEX("asi.`name`", "=", siteName);
cnd.groupBy("asr.id");
sql.setCondition(cnd);
Pagination pagination = siteInfoService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("getSites")
@RequiresPermissions("activity:site:siteRecord")
public AjaxResult getSites(){
return AjaxResult.success(siteInfoService.dao().query(ActivitySiteInfo.class,Cnd.NEW()));
}
@GetMapping("getCalendarData")
@RequiresPermissions("activity:site:siteRecord")
public AjaxResult getCalendarData(@RequestParam(value = "siteId",required = false) String siteId,
@RequestParam("startTimeTs") Date startTimeTs,
@RequestParam("endTimeTs") Date endTimeTs){
Sql sql = Sqls.create("""
select
asr.*,
asi.name as site_name,
asi.name as title,
ass.`stateName` state_name,
IF(ass.stateAuditType=0,true,false) as is_auditing,
reserve_start_time as start,
reserve_end_time as end
from
activity_site_reserve asr
left join activity_site_info asi on asi.id = asr.site_id
LEFT JOIN audit_state ass ON ass.stateId = asr.reserve_state
$condition
""");
Cnd cnd = Cnd.NEW();
// cnd.and("asr.site_id", "=", siteId);
cnd.and("reserve_start_time", ">=", startTimeTs);
cnd.and("reserve_end_time", "<=", endTimeTs);
sql.setCondition(cnd);
return AjaxResult.success(siteInfoService.list(sql));
}
}
@@ -0,0 +1,297 @@
package com.ruoyi.activity.controller.site;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.activity.api.domain.AuditState;
import com.ruoyi.activity.api.domain.site.ActivitySiteEquipment;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.site.SiteInfoService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameSiteReserveApplyController
* @Date 2024/6/17 11:37
* @注释
*/
@RestController
@RequestMapping("/site/siteApply")
public class SiteReserveApplyController {
private static final Logger log = LoggerFactory.getLogger(SiteReserveApplyController.class);
@Autowired
private Dao dao;
@Autowired
private SiteInfoService siteInfoService;
@Autowired
private RemoteUserRoleService remoteUserRoleService;
/**
* 预约申请
* @param activitySiteReserve
* @return
*/
@PostMapping("insert")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult insert(@RequestBody ActivitySiteReserve activitySiteReserve){
try {
activitySiteReserve.setReserve_state(6098);
dao.insert(activitySiteReserve);
// //查询分工会审核人
// List<FeignCnd> unionAdminCndList = List.of(
// new FeignCnd("role_id","=", Roles.FGH_ADMIN),
// new FeignCnd("union_id","=",SecurityUtils.getUnionId())
// );
// List<SysUserRole> unionAdminList = remoteUserRoleService.getUserRole(unionAdminCndList).getData();
//
// Sql sql = Sqls.create("select loginName,userName from `user` $condition");
// Cnd cnd = Cnd.NEW();
// cnd.and("userId","in",unionAdminList.stream().map(SysUserRole::getUserId));
// sql.setCondition(cnd);
// //分工会的审核人
// List<NutMap> processList = siteInfoService.listMap(sql);
// ActivitySiteInfo siteInfo = siteInfoService.fetch(activitySiteReserve.getSite_id());
return AjaxResult.success();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error();
}
}
/**
* 返回申请信息
* @return
*/
@GetMapping("applyUserInfo")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult applyUserInfo(){
Sql sql = Sqls.create("""
SELECT
userId as reserve_person_id,
userName as reserve_person_username,
loginName as reserve_person_loginname,
sex as reserve_person_sex,
mobile as reserve_person_phone,
deptId as reserve_person_unit,
deptName as reserve_person_unitname,
unionName as reserve_person_unionname,
unionId as reserve_person_unionid
FROM
`user`
WHERE userId = @userId
""");
sql.setParam("userId", SecurityUtils.getUserId());
return AjaxResult.success(siteInfoService.fetch(sql));
}
/**
* 撤销预约
* @param id
* @return
*/
@GetMapping("revoke")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult revoke(@RequestParam("id") String id) {
dao.clear(ActivitySiteReserve.class,Cnd.where("id","=",id));
// //查询分工会审核人
// List<FeignCnd> unionAdminCndList = List.of(
// new FeignCnd("role_id","=", Roles.FGH_ADMIN),
// new FeignCnd("union_id","=",SecurityUtils.getUnionId())
// );
// List<SysUserRole> unionAdminList = remoteUserRoleService.getUserRole(unionAdminCndList).getData();
//
// Sql sql = Sqls.create("select loginName,userName from `user` $condition");
// Cnd cnd = Cnd.NEW();
// cnd.and("userId","in",unionAdminList.stream().map(SysUserRole::getUserId));
// sql.setCondition(cnd);
// //分工会的审核人
// List<NutMap> processList = siteInfoService.listMap(sql);
// ActivitySiteInfo siteInfo = siteInfoService.fetch(activitySiteReserve.getSite_id());
return AjaxResult.success();
}
/**
* 删除
* @param id
* @return
*/
@GetMapping("doClean")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult doClean(@RequestParam("id") String id) {
dao.clear(ActivitySiteReserve.class, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 获取所有场地
* @return
*/
@GetMapping("getAllSite")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult getAllSite() {
return AjaxResult.success(siteInfoService.query(Cnd.where("state", "=", 1)));
}
/**
* 根据场地ID获取可预约的设备
* @param siteId
* @return
*/
@GetMapping("getSiteEquipmentList")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult getSiteEquipmentList(@RequestParam("siteId") String siteId) {
List<ActivitySiteEquipment> query = siteInfoService.dao().query(ActivitySiteEquipment.class, Cnd.where("siteId", "=", siteId).and("isOpen", "=", 1));
return AjaxResult.success(query);
}
/**
* pc获取场地预约情况
* @param siteId
* @return
*/
@GetMapping("siteChange")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult siteChange(@RequestParam("siteId") String siteId){
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` AS siteName
FROM
`activity_site_reserve` asr
LEFT JOIN `activity_site_info` asi ON asi.id = asr.site_id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("asr.site_id", "=", siteId);
// cnd.and("asr.reserve_start_time", "<=", DateUtil.nextWeek());
// cnd.and("asr.reserve_end_time", ">", DateUtil.now());
cnd.and("asr.reserve_start_time", ">", DateUtil.now());
List<AuditState> stateList = dao.query(AuditState.class, Cnd.where("module", "=", "activitySite").and("stateName", "like", "%拒绝"));
if (Lang.isNotEmpty(stateList)) {
List<Integer> stateIds = stateList.stream().map(AuditState::getStateId).collect(Collectors.toList());
cnd.and("asr.reserve_state", "not in", stateIds);
}
cnd.asc("asr.reserve_start_time");
sql.setCondition(cnd);
return AjaxResult.success(siteInfoService.listMap(sql));
}
/**
* mobile展示场地预约情况
* @return
*/
@GetMapping("allSiteUsage")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult allSiteUsage(){
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` AS siteName
FROM
`activity_site_reserve` asr
LEFT JOIN `activity_site_info` asi ON asi.id = asr.site_id
$condition
""");
Cnd cnd = Cnd.NEW();
// cnd.and("asr.reserve_start_time", "<=", DateUtil.nextWeek());
// cnd.and("asr.reserve_end_time", ">", DateUtil.now());
cnd.and("asr.reserve_start_time", ">", DateUtil.now());
cnd.asc("asr.reserve_start_time");
sql.setCondition(cnd);
List<Record> list = siteInfoService.list(sql);
return AjaxResult.success(list.stream().collect(Collectors.groupingBy(v -> v.getString("siteName"))));
}
/**
* 校验申请时间是否已经被人预约
* @param time
* @param endTime
* @param siteId
* @return
*/
@GetMapping("checkApplyTime")
@RequiresPermissions("activity:site:siteApply")
public AjaxResult checkApplyTime(@RequestParam("time")String time,
@RequestParam(value = "endTime",required = false) String endTime,
@RequestParam("siteId") String siteId){
Cnd cnd = Cnd.NEW();
cnd.and("DATE(reserve_start_time)", "=", time.substring(0, 10));
cnd.and("site_id","=",siteId);
List<AuditState> stateList = dao.query(AuditState.class, Cnd.where("module", "=", "activitySite").and("stateName", "like", "%拒绝"));
if (Lang.isNotEmpty(stateList)) {
List<Integer> stateIds = stateList.stream().map(AuditState::getStateId).collect(Collectors.toList());
cnd.and("reserve_state", "not in", stateIds);
}
DateTime startTime = DateUtil.parseDateTime(time);//1
DateTime closeTime = DateUtil.parseDateTime(endTime);//5
List<ActivitySiteReserve> reserveList = siteInfoService.dao().query(ActivitySiteReserve.class,cnd);
boolean isJJ = false;
for (ActivitySiteReserve reserve : reserveList) {
Date reserve_start_time = reserve.getReserve_start_time();
Date reserve_end_time = reserve.getReserve_end_time();
if (startTime.isAfterOrEquals(reserve_start_time) && startTime.isBeforeOrEquals(reserve_end_time)) {
isJJ = true;
break;
}
if (closeTime.isAfterOrEquals(reserve_start_time) && closeTime.isBeforeOrEquals(reserve_end_time)) {
isJJ = true;
break;
}
if (startTime.isBeforeOrEquals(reserve_start_time) && closeTime.isAfterOrEquals(reserve_end_time)) {
isJJ = true;
break;
}
//
}
System.out.println(isJJ);
if (isJJ) {
return AjaxResult.error("该时间段已被预约,请重新填写预约开始时间");
} else {
return AjaxResult.success();
}
}
}
@@ -0,0 +1,172 @@
package com.ruoyi.activity.controller.site;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.site.ActivitySiteEquipment;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.common.ActivityCommonService;
import com.ruoyi.activity.service.site.SiteReserveService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.json.Json;
import org.nutz.lang.Strings;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/1
* @Description
*/
@RestController
@RequestMapping("/site/siteReserve")
public class SiteReserveController {
@Autowired
private Dao dao;
@Autowired
private ActivityCommonService activityCommonService;
private SiteReserveService siteReserveService;
@Autowired
public SiteReserveController(SiteReserveService siteReserveService) {
this.siteReserveService = siteReserveService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:site:siteReserve")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "siteType", required = false) String siteType,
@RequestParam(value = "time", required = false) String time,
@RequestParam(value = "siteId", required = false) String siteId,
@RequestParam(value = "siteName", required = false) String siteName) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` site_name,
ass.`stateName` state_name,
ass.`stateColor` state_color,
ass.stateAuditType
FROM
activity_site_reserve asr
LEFT JOIN activity_site_info asi ON asi.id = asr.site_id
LEFT JOIN audit_state ass ON ass.stateId = asr.reserve_state
LEFT JOIN `user` u ON u.userId = asr.reserve_person_id
$condition
""");
if (!AuthUtil.hasAnyRoles("admin,A06")) {
cnd.and("reserve_person_id", "=", SecurityUtils.getUserId());
}
if (Strings.isNotBlank(time)) {
cnd.and("left(asr.reserve_day, 7)", "=", time);
}
if (Strings.isNotBlank(siteId)) {
cnd.and("site_id", "=", siteId);
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
if (Strings.isNotBlank(siteType)) {
cnd.and("asi.typeId", "=", siteType);
}
cnd.andEX("asi.`name`", "=", siteName);
cnd.groupBy("asr.id");
sql.setCondition(cnd);
Pagination pagination = siteReserveService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("checkReserve")
@RequiresPermissions("activity:site:siteReserve")
public Object checkReserve(String reserve_day, String start_time, String end_time, String site_id) {
Cnd cnd = Cnd.NEW();
cnd.and("site_id", "=", site_id)
.and("reserve_state", "!=", 40)
.and("reserve_day", "=", reserve_day);
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("start_time", "<=", start_time).and("end_time", ">=", start_time);
group.or("start_time", "<=", end_time).and("start_time", ">=", end_time);
cnd.and(group);
return siteReserveService.count(cnd);
}
@GetMapping("findOne")
@RequiresPermissions("activity:site:siteReserve")
public AjaxResult findOne(@RequestParam("id") String id) {
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` site_name,
ass.`stateName` state_name,
ass.stateAuditType,
su.userName as username,
sm.userName smusername,
su.sex,
su.unionName as unionname,
su.loginName as loginname
FROM
activity_site_reserve asr
LEFT JOIN activity_site_info asi ON asi.id = asr.site_id
LEFT JOIN audit_state ass ON ass.stateId = asr.reserve_state
LEFT JOIN `user` su ON su.userId = asr.reserve_person_id
LEFT JOIN `user` sm ON sm.userId = asr.site_manager_id
WHERE
asr.id = @id
group by asr.id
""").setParam("id", id);
NutMap record = siteReserveService.fetch(sql);
//找该场地是否预约了器材
if (Strings.isNotBlank(record.getString("equipment_ids"))) {
String equipmentIds = record.getString("equipment_ids");
List<String> equipment = Json.fromJsonAsList(String.class, equipmentIds);
List<ActivitySiteEquipment> equipmentList = siteReserveService.dao().query(ActivitySiteEquipment.class, Cnd.where("id", "in", equipment));
//获取器材名称
List<String> stringList = equipmentList.stream().map(ActivitySiteEquipment::getEquipmentName).collect(Collectors.toList());
//转字符串传递给前端
String equipmentNames = String.join("", stringList);
record.put("equipmentNames",equipmentNames);
}
if (Strings.isNotBlank(record.getString("reserve_person_union_process"))) {
Audit audit = siteReserveService.dao().fetch(Audit.class, Cnd.where("id", "=", record.getString("reserve_person_union_process")));
record.put("unionProcess", audit);
}
if (Strings.isNotBlank(record.getString("reserve_person_school_process"))) {
Audit audit = siteReserveService.dao().fetch(Audit.class, Cnd.where("id", "=", record.getString("reserve_person_school_process")));
record.put("schoolProcess", audit);
}
return AjaxResult.success(record);
}
}
@@ -0,0 +1,124 @@
package com.ruoyi.activity.controller.site;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.common.ActivityCommonService;
import com.ruoyi.activity.service.site.SiteInfoService;
import com.ruoyi.activity.service.site.SiteReserveService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/2
* @Description
*/
@RestController
@RequestMapping("/site/siteReview")
public class SiteReviewController {
@Autowired
private Dao dao;
@Autowired
private SiteReserveService siteReserveService;
@Autowired
private SiteInfoService siteInfoService;
@Autowired
private ActivityCommonService activityCommonService;
@PostMapping("pageData")
@RequiresPermissions("activity:site:siteReview")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "time", required = false) String time,
@RequestParam(value = "siteType", required = false) String siteType,
@RequestParam(value = "isAudit", required = false) String isAudit,
@RequestParam(value = "siteId", required = false) String siteId,
@RequestParam(value = "siteName", required = false) String siteName) {
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` site_name,
ass.`stateName` state_name,
ass.`stateColor` state_color,
ass.stateAuditType
FROM
activity_site_reserve asr
LEFT JOIN
activity_site_info asi ON asi.id = asr.site_id
LEFT JOIN
audit_state ass ON ass.stateId = asr.reserve_state
LEFT JOIN
`user` u on u.userId = asr.reserve_person_id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("asr.reserve_state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 6118);
if (Strings.isNotBlank(time)) {
cnd.and("left(asr.reserve_start_time, 7)", "=", time);
}
if (Strings.isNotBlank(siteId)) {
cnd.and("site_id", "=", siteId);
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (Strings.isNotBlank(siteType)) {
cnd.and("typeId", "=", siteType);
}
cnd.andEX("asi.`name`", "=", siteName);
cnd.asc("asr.reserve_start_time");
sql.setCondition(cnd);
Pagination pagination = siteReserveService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doProcess")
@RequiresPermissions("activity:site:siteReview")
@Aop(TransAop.READ_COMMITTED)
public AjaxResult doProcess(@RequestBody Audit audit,
@RequestParam(value = "id") String id) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setUserName(SecurityUtils.getNickName());
audit.setLoginName(SecurityUtils.getUsername());
audit.setAuditTime(new Date());
siteReserveService.dao().insert(audit);
Chain chain = Chain.make("reserve_person_school_process", audit.getId());
chain.add("reserve_state", audit.getAuditPass() ? 6138 : 6128);
siteReserveService.dao().update(ActivitySiteReserve.class, chain, Cnd.where("id", "=", id));
// ActivitySiteReserve siteReserve = siteReserveService.dao().fetch(ActivitySiteReserve.class, Cnd.where("id", "=", id));
// ActivitySiteInfo siteInfo = siteReserveService.dao().fetch(ActivitySiteInfo.class, Cnd.where("id", "=", siteReserve.getSite_id()));
return AjaxResult.success();
}
}
@@ -0,0 +1,122 @@
package com.ruoyi.activity.controller.site;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.site.SiteReserveService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* 场地预约分工会审核
*/
@RestController
@RequestMapping("site/siteUnionProcess")
public class SiteUnionProcessController {
@Autowired
private SiteReserveService siteReserveService;
@PostMapping("/pageData")
@RequiresPermissions("activity:site:siteUnionProcess")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "siteType", required = false) String siteType,
@RequestParam(value = "time", required = false) String time,
@RequestParam(value = "isAudit", required = false) String isAudit,
@RequestParam(value = "siteId", required = false) String siteId,
@RequestParam(value = "siteName", required = false) String siteName) {
Sql sql = Sqls.create("""
SELECT
asr.*,
asi.`name` site_name,
ass.`stateName` state_name,
ass.`stateColor` state_color,
ass.stateAuditType
FROM
activity_site_reserve asr
LEFT JOIN
activity_site_info asi ON asi.id = asr.site_id
LEFT JOIN
audit_state ass ON ass.stateId = asr.reserve_state
LEFT JOIN
`user` u on u.userId = asr.reserve_person_id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("asr.reserve_state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 6098);
if (!AuthUtil.hasAnyRoles("sysadmin,A06")) {
cnd.and("reserve_person_unionid", "=", SecurityUtils.getUnionId());
}
if (Strings.isNotBlank(time)) {
cnd.and("left(asr.reserve_start_time, 7)", "=", time);
}
if (Strings.isNotBlank(siteId)) {
cnd.and("site_id", "=", siteId);
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (Strings.isNotBlank(siteType)) {
cnd.and("typeId", "=", siteType);
}
cnd.andEX("asi.`name`", "=", siteName);
cnd.asc("asr.reserve_start_time");
sql.setCondition(cnd);
Pagination pagination = siteReserveService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 党员之家Id
*/
public static final String DY_HOME_ID = "a6486481018b479ab137bac53936f15e";
@PostMapping("doProcess")
@Aop(TransAop.READ_COMMITTED)
public AjaxResult doProcess(@RequestParam("id") String id, @RequestBody Audit audit) {
try {
audit.setAuditor(SecurityUtils.getUserId());
audit.setUserName(SecurityUtils.getNickName());
audit.setLoginName(SecurityUtils.getUsername());
audit.setAuditTime(new Date());
siteReserveService.dao().insert(audit);
Chain chain = Chain.make("reserve_person_union_process", audit.getId());
chain.add("reserve_state", audit.getAuditPass() ? 6118 : 6108);
siteReserveService.dao().update(ActivitySiteReserve.class, chain, Cnd.where("id", "=", id));
// ActivitySiteReserve siteReserve = siteReserveService.dao().fetch(ActivitySiteReserve.class, Cnd.where("id", "=", id));
// ActivitySiteInfo siteInfo = siteReserveService.dao().fetch(ActivitySiteInfo.class, Cnd.where("id", "=", siteReserve.getSite_id()));
// if (audit.getAuditPass()) {
//
// } else {
// }
return AjaxResult.success();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error();
}
}
}
@@ -0,0 +1,89 @@
package com.ruoyi.activity.controller.site;
import com.ruoyi.activity.api.domain.AuditState;
import com.ruoyi.activity.api.domain.site.ActivityType;
import com.ruoyi.activity.service.site.TypeManageService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/1/31
* @Description
*/
@RestController
@RequestMapping("/site/type")
public class TypeManageController {
@Autowired
private Dao dao;
private TypeManageService typeManageService;
@Autowired
public TypeManageController(TypeManageService typeManageService) {
this.typeManageService = typeManageService;
}
@GetMapping("findAll")
public AjaxResult findAll() {
List<ActivityType> typeList = dao.query(ActivityType.class, Cnd.NEW().asc("sortNum"));
dao.fetchLinks(typeList, "^auditStateList$");
for (ActivityType activityType : typeList) {
List<AuditState> auditStateList = activityType.getAuditStateList();
dao.fetchLinks(auditStateList, "^auditStateUserList$");
}
return AjaxResult.success(typeList);
}
@PostMapping("doHandle")
@RequiresPermissions("activity:site:typeManage")
public AjaxResult doHandle(@RequestBody ActivityType activityType) {
if (null == activityType.getId()) {
int count = dao.count(AuditState.class, Cnd.where("module", "=", activityType.getModuleName()));
if (count > 0) {
return AjaxResult.error("模块名称已存在,换一个试试!");
}
typeManageService.add(activityType);
} else {
typeManageService.edit(activityType);
}
return AjaxResult.success();
}
@PostMapping("delete/{id}")
@RequiresPermissions("activity:site:typeManage")
public AjaxResult delete(@PathVariable Integer id) {
if (id == 1) {
return AjaxResult.error("此记录不可删除!");
}
dao.clear(ActivityType.class, Cnd.where("id", "=", id));
return null;
}
@GetMapping("findMaxStateId")
@RequiresPermissions("activity:site:typeManage")
public AjaxResult findMaxStateId() {
return AjaxResult.success(typeManageService.findMaxStateId());
}
@RequestMapping("checkStateId")
@RequiresPermissions("activity:site:typeManage")
public AjaxResult checkStateId(@RequestParam("stateId") Integer stateId, @RequestParam("stateIndex") Integer stateIndex) {
if (stateId == null) {
return AjaxResult.error("参数错误!");
}
int count = dao.count(AuditState.class, Cnd.where("stateId", "=", stateId));
if (count == 0) {
return AjaxResult.success(stateId);
} else {
return AjaxResult.success(typeManageService.findMaxStateId() + 10 * stateIndex);
}
}
}
@@ -0,0 +1,274 @@
package com.ruoyi.activity.controller.site.mobile;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.activity.api.constant.AuditTypeEnum;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.common.ActivityCommonService;
import com.ruoyi.activity.service.site.SiteInfoService;
import com.ruoyi.activity.service.site.SiteReserveService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysUser;
import org.apache.commons.lang3.StringUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Author JyuHsin
* @Date 2023/2/26
* @Description
*/
@RestController
@RequestMapping("/site/mobile/audit")
public class SiteAuditMobileController {
@Autowired
private Dao dao;
@Autowired
private SiteInfoService siteInfoService;
@Autowired
private ActivityCommonService activityCommonService;
@Autowired
private SiteReserveService siteReserveService;
@PostMapping("pageData")
@RequiresLogin
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "typeId", required = false) String typeId) {
Sql sql = Sqls.create("""
SELECT
info.*,
type.typeName,
type.auditType,
type.moduleName,
(select deptName from `user` where userName = info.contact_person limit 1) as unitname,
(select count(DISTINCT sqid) from activity_site_reserve where site_id=info.id and JSON_CONTAINS(auditList, JSON_OBJECT('auditUser', @userid))) as audit
FROM
activity_site_info info
LEFT JOIN activity_type type ON type.id = info.typeId
LEFT JOIN audit_state state ON state.module = type.moduleName
$condition
""").setParam("userid", SecurityUtils.getUserId());
Cnd cnd = Cnd.NEW();
cnd.andEX("state.stateId", "in", activityCommonService.findStateIdForMeCanAudit());
cnd.and("info.state", "=", true);
if (StringUtils.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("info.name", pageForm.getSearchKeyword());
seg.orLike("info.address", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isNotBlank(typeId)) {
cnd.andEX("info.typeId", "=", typeId);
}
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination pagination = siteInfoService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<Object> list = pagination.getList();
list.forEach(item -> {
Record map = (Record) item;
List<NutMap> canAuditUserByLoginUser = this.getCanAuditUserByLoginUser(map.getString("id"), map.getInt("auditType"));
map.put("no_audit", canAuditUserByLoginUser.size());
});
return AjaxResult.success(pagination);
}
@GetMapping("getLeaveUser")
@RequiresLogin
public AjaxResult getLeaveUser(String siteId, Integer auditType, String type) {
List<NutMap> list = "canAudit".equals(type) ? this.getCanAuditUserByLoginUser(siteId, auditType) : this.getHasAuditUserByLoginUser(siteId);
return AjaxResult.success(list);
}
@PostMapping("audit")
@RequiresLogin
public AjaxResult audit(@RequestBody Audit audit,
@RequestParam(name = "ids[]", required = false) String[] ids,
@RequestParam(name = "isPass", required = false) Boolean isPass) {
dao.insert(audit);
// for (String id : ids) {
//
// ActivitySiteReserve fetch = siteReserveService.fetch(id);
//
// Integer stateCode = fetch.getReserve_state();
// Integer afterStateCode = activityCommonService.findAfterStateCode(stateCode, isPass);
//
// List<ActivitySiteReserve> reserves = siteReserveService.query(Cnd.NEW().and("sqid", "=", fetch.getSqid()));
// String days = "";
//
// for (ActivitySiteReserve siteReserve : reserves) {
// siteReserve.setReserve_state(afterStateCode);
//
// List<NutMap> auditIdList = siteReserve.getAuditList();
// if (Lang.isEmpty(auditIdList)) {
// auditIdList = new ArrayList<>();
// }
// auditIdList.add(NutMap.NEW().addv("stateCode", stateCode)
// .addv("auditId", audit.getId())
// .addv("auditUser", SecurityUtils.getUserId())
// .addv("auditState", isPass)
// .addv("auditOption", audit.getAuditOpinion()));
// siteReserve.setAuditList(auditIdList);
//
// days += siteReserve.getReserve_day() + ",";
// dao.update(siteReserve);
// }
// days = days.substring(0, days.length() - 1);
//
// Integer successCode = activityCommonService.findSuccessStateCode(fetch.getSite_id());
// ActivitySiteInfo siteInfo = siteInfoService.fetch(fetch.getSite_id());
// if (afterStateCode.equals(successCode) && siteInfo.getTypeId() == 1) {
// String content = "%s老师您好!您提交的%s使用申请已通过审批,在预约使用期间可刷校园卡进入母婴室,如有疑问,欢迎咨询校工会。"
// .formatted(fetch.getReserve_person(), siteInfo.getName());
//
// DynamicDataSourceContextHolder.push("system");
// SysUser user = dao.fetch(SysUser.class, fetch.getReserve_person_id());
// DynamicDataSourceContextHolder.clear();
//
// ArrayList<Map> list2 = new ArrayList<>();
// list2.add(Map.of("type", "User", "userId", user.getUserName(), "name", user.getNickName()));
// //msgApi.sendMsg(content, list2, "场地预约", "WeChat", MsgApi.sendMode.normal.name());
// } else if (!afterStateCode.equals(successCode)) {
// //发送微信提醒审核人
// //查询状态码对应的审核人
// Sql sql = Sqls.create("""
// select asu.userId,u.loginName,u.userName from audit_state_user asu
// left join `user` u on u.userId = asu.userId left join audit_state s on s.stateId=asu.stateId $condition
// """);
// Cnd cnd = Cnd.NEW();
// cnd.and("asu.stateId", "=", afterStateCode);
// cnd.and("s.stateAuditType", "=", "0");
// String moduleName = activityCommonService.findModuleNameByActivityId(fetch.getSite_id());
// if ("infantRoom".equals(moduleName)) {
// //获取当前登录人的单位id
// cnd.and("u.deptId", "=", SecurityUtils.getDeptId());
// }
// sql.setCondition(cnd);
// List<Record> list = siteReserveService.list(sql);
//
// for (Record item : list) {
// String content = "%s老师您好!%s老师预约%s日使用%s,请您通过门户网站或企业微信登录智慧工会平台进行审核。"
// .formatted(item.getString("username"),
// fetch.getReserve_person(),
// days,
// siteInfo.getName());
// ArrayList<Map> list2 = new ArrayList<>();
// list2.add(Map.of("type", "User", "userId", item.getString("loginname"), "name", item.getString("username")));
// //msgApi.sendMsg(content, list2, "场地预约", "WeChat", MsgApi.sendMode.normal.name());
// }
// }
// }
return AjaxResult.success();
}
/*根据当前登录用户获取可以审核的用户*/
public List<NutMap> getCanAuditUserByLoginUser(String siteId, Integer auditType) {
Sql sql = Sqls.create("""
SELECT
ar.*,
u.userName as username,
u.loginName as loginname,
u.sex,
u.deptName as unitname,
state.stateName,
count(sqid) days,
GROUP_CONCAT(reserve_day order by reserve_day asc) concat_day
FROM
activity_site_reserve ar
LEFT JOIN activity_site_info asi ON asi.id = ar.site_id
left join `user` u on ar.reserve_person_id=u.userId
LEFT JOIN audit_state state on state.stateId = ar.reserve_state
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("ar.site_id", "=", siteId);
cnd.and("u.userName", "is not", null);
cnd.and("u.userName", "!=", "");
cnd.and("ar.reserve_state", "in", Sqls.createf("SELECT stateId FROM audit_state_user WHERE userid = %s", SecurityUtils.getUserId()));
cnd.and("state.stateAuditType", "in", Lang.list(AuditTypeEnum.AUDIT.getValue()));
if (!AuthUtil.hasAnyRoles("admin, A06")) {
if (auditType == 1) {
//审核本工会
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
} else if (auditType == 2) {
//审核本单位
cnd.and("u.deptId", "=", SecurityUtils.getDeptId());
}
}
cnd.groupBy("sqid");
sql.setCondition(cnd);
return siteInfoService.listMap(sql);
}
/*根据当前登录用户获取已经审核的用户*/
public List<NutMap> getHasAuditUserByLoginUser(String siteId) {
Sql sql = Sqls.create("""
select
ar.*,
u.userName as username,
u.loginName as loginname,
u.deptName as unitname,
u.sex,
state.stateName,
count(sqid) days,
GROUP_CONCAT(reserve_day order by reserve_day asc) concat_day
from
activity_site_reserve ar
left join
`user` u on ar.reserve_person_id=u.userId
LEFT JOIN
audit_state state on state.stateId = ar.reserve_state
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("site_id", "=", siteId);
cnd.and(new Static("JSON_CONTAINS(auditList, JSON_OBJECT('auditUser', " + SecurityUtils.getUserId() + "))"));
cnd.groupBy("sqid");
sql.setCondition(cnd);
List<NutMap> list = siteInfoService.listMap(sql);
list.forEach(item -> {
List<NutMap> listMap = Json.fromJsonAsList(NutMap.class, item.getString("auditList"));
Boolean auditState = false;
for (NutMap map : listMap) {
if (map.getLong("auditUser") == (SecurityUtils.getUserId())) {
auditState = map.get("auditState") == null ? null : map.getBoolean("auditState");
}
}
item.put("auditState", auditState);
});
return list;
}
}
@@ -0,0 +1,289 @@
package com.ruoyi.activity.controller.site.mobile;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.site.ActivitySiteInfo;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.common.ActivityCommonService;
import com.ruoyi.activity.service.site.SiteInfoService;
import com.ruoyi.activity.service.site.SiteReserveService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.apache.commons.lang3.StringUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.json.Json;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/26
* @Description
*/
@RestController
@RequestMapping("/site/mobile/info")
public class SiteInfoMobileController {
@Autowired
private Dao dao;
@Autowired
private SiteInfoService siteInfoService;
@Autowired
private ActivityCommonService activityCommonService;
@Autowired
private SiteReserveService siteReserveService;
@PostMapping("pageData")
@RequiresLogin
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "typeId", required = false) String typeId) {
Sql sql = Sqls.create("""
SELECT
info.*,
type.typeName,
type.moduleName,
(select deptName from `user` where userName = info.contact_person limit 1) as unitname,
( SELECT count( 1 ) FROM activity_site_reserve WHERE site_id = info.id AND reserve_state = (select stateId from audit_state where module = (select moduleName from activity_type where id = info.typeId) and stateAuditType = 3)) count
FROM
activity_site_info info
LEFT JOIN activity_type type ON type.id = info.typeId
LEFT JOIN audit_state state ON state.module = type.moduleName
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("info.state", "=", true);
if (StringUtils.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("info.name", pageForm.getSearchKeyword());
seg.orLike("info.address", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isNotBlank(typeId)) {
cnd.andEX("info.typeId", "=", typeId);
}
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination pagination = siteInfoService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<Object> list = pagination.getList();
list.forEach(item -> {
Record map = (Record) item;
String openHours = map.getString("open_hours");
List<NutMap> nutMaps = Json.fromJsonAsList(NutMap.class, openHours);
String start_time = nutMaps.get(0).getString("start_time");
String end_time = nutMaps.get(nutMaps.size() - 1).getString("end_time");
map.put("open_time", start_time + " - " + end_time);
});
return AjaxResult.success(pagination);
}
@PostMapping("myReserve")
@RequiresLogin
public AjaxResult myReserve(@RequestBody PageForm pageForm,
@RequestParam(name = "timeSwitch", required = false) Boolean timeSwitch,
@RequestParam(name = "time", required = false) String time,
@RequestParam(name = "typeId", required = false) String typeId) {
Sql sql = Sqls.create("""
select
ar.*,
`as`.stateName ,
info.name,
info.address,
`as`.stateAuditType,
count(sqid) days,
GROUP_CONCAT(reserve_day order by reserve_day asc) concat_day
from
activity_site_reserve ar
left join activity_site_info info on info.id = ar.site_id
left join audit_state `as` on ar.reserve_state=`as`.stateId
$condition
""");
Cnd cnd = Cnd.NEW();
if (StringUtils.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("info.name", pageForm.getSearchKeyword());
seg.orLike("info.address", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (StrUtil.isNotBlank(typeId)) {
cnd.andEX("info.typeId", "=", typeId);
}
if (!timeSwitch && StrUtil.isNotBlank(time)) {
cnd.and("left(ar.reserve_day, 7)", "=", time);
}
cnd.and("reserve_person_id", "=", SecurityUtils.getUserId());
cnd.groupBy("sqid");
sql.setCondition(cnd);
Pagination pagination = siteInfoService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("getDetail")
@RequiresLogin
public AjaxResult getDetail(String id) {
return AjaxResult.success(siteInfoService.fetch(id));
}
@PostMapping("rollback")
@RequiresLogin
public AjaxResult rollback(String id) {
//根据活动id查询第一个审核节点
ActivitySiteReserve fetch = dao.fetch(ActivitySiteReserve.class, id);
String moduleName = activityCommonService.findModuleNameByActivityId(fetch.getSite_id());
Integer stateCode = activityCommonService.findStartStateCodeByModuleName(moduleName);
if (fetch.getReserve_state() > stateCode) {
return AjaxResult.warn("当前状态不能进行撤销操作");
}
ActivitySiteReserve siteReserve = dao.fetch(ActivitySiteReserve.class, id);
// dao.clear(ActivitySiteReserve.class, Cnd.NEW().and("sqid", "=", siteReserve.getSqid()));
return AjaxResult.success();
}
@PostMapping("backOption")
@RequiresLogin
public AjaxResult backOption(String id, String option) {
ActivitySiteReserve fetch = dao.fetch(ActivitySiteReserve.class, id);
// siteReserveService.update(Chain.make("back_option", option), Cnd.NEW().and("sqid", "=", fetch.getSqid()));
return AjaxResult.success();
}
@GetMapping("getReserve")
@RequiresLogin
public AjaxResult getReserve(String siteId, String day) {
//获取场地的开放时间
ActivitySiteInfo fetch = siteInfoService.fetch(siteId);
List<NutMap> hours = fetch.getOpen_hours();
Sql sql = Sqls.create("""
select * from activity_site_reserve $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("site_id", "=", siteId);
if (StrUtil.isNotBlank(day)) {
cnd.and("reserve_day", "=", day);
}
cnd.and(new Static("reserve_state in (select stateId from audit_state where module=(select moduleName from activity_type where id = '" + siteId + "') and stateAuditType=3)"));
sql.setCondition(cnd);
List<Record> list = siteReserveService.list(sql);
List<String> times = list.stream().map(o -> o.getString("start_time") + "-" + o.getString("end_time")).collect(Collectors.toList());
hours.forEach(item -> {
String t = item.getString("start_time") + "-" + item.getString("end_time");
item.put("hasReserve", times.contains(t));
});
return AjaxResult.success(hours);
}
@PostMapping("reserveDo")
@RequiresLogin
public AjaxResult reserveDo(@RequestBody List<NutMap> times,
@RequestParam(name = "siteId", required = false) String siteId,
@RequestParam(name = "message", required = false) String message,
@RequestParam(name = "joinUser", required = false) String joinUser) {
String moduleName = activityCommonService.findModuleNameByActivityId(siteId);
Integer stateCode = activityCommonService.findStartStateCodeByModuleName(moduleName);
if (stateCode == null) {
return null;
}
List<ActivitySiteReserve> li = new ArrayList<>();
String str = "";
String r = R.UU32();
// for (NutMap item : times) {
// ActivitySiteReserve as = new ActivitySiteReserve();
// as.setSqid(r);
// as.setSite_id(siteId);
// as.setReserve_person(SecurityUtils.getNickName());
// as.setReserve_person_id(SecurityUtils.getUserId());
// as.setReserve_person_unit(SecurityUtils.getDept().getDeptName());
// as.setReserve_person_phone(SecurityUtils.getLoginUser().getSysUser().getMobile());
// as.setReserve_cause(message);
// as.setJoinUser(joinUser);
// as.setReserve_state(stateCode);
// as.setReserve_day(item.getString("day"));
// as.setStart_time(item.getString("start_time"));
// as.setEnd_time(item.getString("end_time"));
// str += item.getString("day") + ",";
// li.add(as);
// }
str = str.substring(0, str.length() - 1);
siteReserveService.insert(li);
//发送微信提醒审核人
//查询状态码对应的审核人
Sql sql = Sqls.create("""
select asu.userId,u.loginName,u.userName from audit_state_user asu
left join `user` u on u.userId = asu.userId left join audit_state s on s.stateId=asu.stateId $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("asu.stateId", "=", stateCode);
cnd.and("s.stateAuditType", "=", "0");
if ("infantRoom".equals(moduleName)) {
//获取当前登录人的单位id
cnd.and("u.deptId", "=", SecurityUtils.getDeptId());
}
sql.setCondition(cnd);
List<Record> list = siteReserveService.list(sql);
for (Record item : list) {
String content = "%s老师您好!%s老师预约%s日使用%s,请您通过门户网站或企业微信登录智慧工会平台进行审核。"
.formatted(item.getString("username"),
SecurityUtils.getNickName(),
str,
siteInfoService.fetch(siteId).getName());
ArrayList<Map> list2 = new ArrayList<>();
list2.add(Map.of("type", "User", "userId", item.getString("loginname"), "name", item.getString("username")));
//msgApi.sendMsg(content, list2, "场地预约", "WeChat", MsgApi.sendMode.normal.name());
}
return AjaxResult.success();
}
@GetMapping("getMyReservation")
@RequiresLogin
public AjaxResult getMyReservation(String siteId) {
Sql sql = Sqls.create("""
SELECT
reserve_day,
start_time,
end_time
FROM
`activity_site_reserve`
WHERE
reserve_person_id = @userId
""");
sql.setParam("userId", SecurityUtils.getUserId());
return AjaxResult.success(siteReserveService.list(sql));
}
}
@@ -0,0 +1,86 @@
package com.ruoyi.activity.controller.site.mobile;
import com.ruoyi.activity.api.domain.site.ActivitySiteReserve;
import com.ruoyi.activity.service.sports.ActivitySchoolService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class SiteInfoMobileMineController {
@Autowired
private ActivitySchoolService baseService;
@Autowired
private Dao dao;
@PostMapping("pageData")
@RequiresLogin
public Object pageData(PageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
asr.*,
state.stateName,
state.stateAuditType,
site.`name` as siteName,
site.address
FROM
activity_site_reserve asr
LEFT JOIN activity_site_info site ON site.id = asr.site_id
LEFT JOIN audit_state state ON state.stateId = asr.reserve_state
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRole("sysadmin")) {
cnd.and("asr.reserve_person_id", "=", SecurityUtils.getUserId());
}
cnd.desc("asr.reserve_start_time");
sql.setCondition(cnd);
List<NutMap> list = baseService.listMap(sql);
return list;
}
/**
* 撤销预约
*
* @param id
* @return {@link Object}
*/
@GetMapping("revoke")
@RequiresLogin
public Object revoke(String id) {
dao.clear(ActivitySiteReserve.class, Cnd.where("id", "=", id));
//发送短信提醒
return null;
}
/**
* 所有场地
*
* @return {@link Object}
*/
@GetMapping("listSite")
@RequiresLogin
public Object listSite() {
Sql sql = Sqls.create("""
select id,name from activity_site_info order by typeId
""");
return baseService.list(sql);
}
}
@@ -0,0 +1,461 @@
package com.ruoyi.activity.controller.sports;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.constant.SportsActivityApply;
import com.ruoyi.activity.api.constant.SportsActivityPageForm;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolApply;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolEvent;
import com.ruoyi.activity.service.sports.ActivitySchoolApplyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* TODO
* 体育活动报名
*
* @Author zhf
* @Date 2023/2/2 9:37
*/
@RestController
@RequestMapping("/sports/activityApply")
public class ActivityApplyController {
@Autowired
private ActivitySchoolApplyService activitySchoolApplyService;
@Autowired
private BaseService dao;
/**
* @param year
* @param isActivity
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 根据条件查询有这些活动
* @author zhf
* @date 2023/2/2 11:03
*/
@GetMapping("/activityData")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult activityData(@RequestParam(required = false, value = "year") Integer year,
@RequestParam(required = false, value = "isActivity") Integer isActivity) {
Sql sql = Sqls.create("""
SELECT
ba.`name` activityLevelName,
school.id,
school.planId,
school.NAME,
school.address,
school.applyStartTime,
school.applyEndTime,
school.startTime,
school.endTime,
school.unitSponsor,
school.unitJointly,
school.gameStyle,
school.funding,
school.applyWay,
school.personType,
school.activityLevel,
school.applyType,
school.eventNotification,
(SELECT count( 1 ) FROM activity_school_apply app WHERE app.activityId = school.id AND app.`status` = 2 ) apply_num,
(SELECT count( 1 ) FROM activity_school_apply app WHERE app.activityId = school.id AND ( app.applyUser = @userid OR app.userId = @userid )) > 0 applyed,
(SELECT COUNT(1) FROM activity_school_apply app WHERE app.activityId=school.id AND app.activityUnionId=@unionId AND app.unionLeader=1) LeaderCount,
(SELECT COUNT(1) FROM activity_school_apply app WHERE app.activityId=school.id AND app.activityUnionId=@unionId AND app.unionCoach=1) CoachCount
FROM
activity_school school
LEFT JOIN activity_basic_settings ba ON ba.`code` = school.activityLevel
$condition
""").setParam("userid", SecurityUtils.getUserId()).setParam("unionId", SecurityUtils.getUnionId());
Cnd cnd = Cnd.NEW();
cnd.and("school.close", "!=", true);
cnd.and("school.isSave", "!=", true);
//查询报名中
if (isActivity == 2) {
cnd.and(new Static("now() >applyStartTime and now() < applyEndTime"));
}//查询已结束的
else if (isActivity == 3) {
cnd.and(new Static("now() > school.applyEndTime"));
}
if (!AuthUtil.hasAnyRoles("H04,gh08,admin")) {
cnd.and(new Static("JSON_CONTAINS(school.applyWay,JSON_ARRAY( 1))>0"));
cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(SecurityUtils.getUserId())));
}
cnd.andEX("YEAR(school.applyStartTime)", "=", year);
cnd.desc("school.applyStartTime");
sql.setCondition(cnd);
return AjaxResult.success(activitySchoolApplyService.listMap(sql));
}
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 根据活动查询领队团长等
* @author zhf
* @date 2023/2/2 11:19
*/
@GetMapping("/getUnionCoachLeaderHead")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult getUnionCoachLeaderHead(String activityId) {
Map result = new HashMap();
Sql sql = Sqls.create("""
SELECT
apply.*,
us.deptName unitname
FROM
activity_school_apply apply
LEFT JOIN `user` us ON us.userId = apply.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("apply.activityId", "=", activityId);
if (!AuthUtil.hasAnyRoles("admin,A06")) {
cnd.and("apply.unionId", "=", SecurityUtils.getUnionId());
}
sql.setCondition(cnd);
List<NutMap> list = activitySchoolApplyService.listMap(sql);
NutMap unionCoach = list.stream().filter(v -> {
return v.getBoolean("unionCoach");
}).findFirst().orElse(null);
NutMap unionLeader = list.stream().filter(v -> {
return v.getBoolean("unionLeader");
}).findFirst().orElse(null);
NutMap unionHead = list.stream().filter(v -> {
return v.getBoolean("unionHead");
}).findFirst().orElse(null);
NutMap unionStaff = list.stream().filter(v -> {
return v.getBoolean("unionStaff");
}).findFirst().orElse(null);
result.put("unionCoach", unionCoach);
result.put("unionLeader", unionLeader);
result.put("unionHead", unionHead);
result.put("unionStaff", unionStaff);
List userOptions = List.of();
ArrayList arrayList = new ArrayList<>(userOptions);
if (unionCoach != null) {
arrayList.add(dao.fetch(Sqls.create("SELECT birthday,deptId,deptName,sex,loginName,unionId,unionName,userId,userName FROM `user` WHERE userId=@userId").setParam("userId", unionCoach.getString("userId"))));
}
if (unionLeader != null) {
arrayList.add(dao.fetch(Sqls.create("SELECT birthday,deptId,deptName,sex,loginName,unionId,unionName,userId,userName FROM `user` WHERE userId=@userId").setParam("userId", unionLeader.getString("userId"))));
}
if (unionHead != null) {
arrayList.add(dao.fetch(Sqls.create("SELECT birthday,deptId,deptName,sex,loginName,unionId,unionName,userId,userName FROM `user` WHERE userId=@userId").setParam("userId", unionHead.getString("userId"))));
}
if (unionStaff != null) {
arrayList.add(dao.fetch(Sqls.create("SELECT birthday,deptId,deptName,sex,loginName,unionId,unionName,userId,userName FROM `user` WHERE userId=@userId").setParam("userId", unionStaff.getString("userId"))));
}
result.put("userOptions", arrayList);
return AjaxResult.success().put("data", result);
}
/**
* @param groupName
* @param activityId
* @param eventId
* @param year
* @param page
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 根据活动查询活动下面的可报名的项目
* @author zhf
* @date 2023/2/2 13:37
*/
@PostMapping("/pageData")
// @RequiresRoles(value = {"admin", "H01"}, logical = Logical.OR)
public AjaxResult pageData(@RequestParam(required = false, value = "groupName") String groupName,
@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "eventId") String eventId,
@RequestParam(required = false, value = "year") Integer year,
@RequestParam(required = false, value = "isAudit") String isAudit,
@RequestBody PageForm page) {
Cnd cnd = Cnd.NEW();
// (SELECT GROUP_CONCAT(username) FROM activity_school_apply WHERE eventId = ase.eventId AND activityId = ase.activityId AND (applyUser=@userId or userId=@userId)) userApplyNames,
Sql sql = Sqls.create("""
SELECT
ase.*,
school.`name`,
school.applyWay,
school.applyStartTime,
school.applyEndTime,
school.applyType,
school.activityGroupId,
eve.allName,
eve.isInterest,
eve.projectType eveProjectType,
eve.isMenWomen,
apply.`status`,
IF (sum(apply.`status`=2) IS NULL, 0, sum(apply.`status`=2)) AS successUserApply,
count(apply.id) userApply,
apply.applyUser,
(SELECT ast.`name` FROM activity_school_apply app LEFT JOIN activity_school_team ast ON ast.id = app.teamId WHERE app.eventId = ase.eventId AND app.activityId = ase.activityId AND app.userId = @userId) activityTeamName,
(select GROUP_CONCAT(username) FROM activity_school_apply WHERE status=2 and eventId = ase.eventId
AND activityId = ase.activityId AND applyUser AND (applyUser=@userId or userId=@userId)) userApplyNames,
(SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=2 and activityUnionId=@unionId) totalApplyNum,
(SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=0 and activityUnionId=@unionId) apply_num_bc,
(SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=1 and activityUnionId=@unionId) apply_num_dsh
FROM
activity_school_event ase
LEFT JOIN activity_school school ON ase.activityId = school.id
LEFT JOIN activity_event eve ON ase.eventId=eve.id
LEFT JOIN activity_basic_settings abs ON abs.id=eve.competitionCategory
LEFT JOIN activity_school_apply apply ON apply.activityId=ase.activityId AND apply.eventId=ase.eventId AND (applyUser=@userId or userId=@userId)
$condition
""").setParam("unionId", SecurityUtils.getUnionId()).setParam("userId", SecurityUtils.getUserId());
if (!AuthUtil.hasAnyRoles("H04,gh08,admin")) {
cnd.where().andLike("school.applyWay ", "1");
cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(SecurityUtils.getUserId())));
}
cnd.andEX("abs.`name`", "=", groupName);
if (Strings.isNotBlank(isAudit)) {
cnd.and(new Static("(SELECT COUNT(1) FROM activity_school_apply WHERE eventId = ase.eventId AND activityId = ase.activityId AND userId='%s')%s0".formatted(SecurityUtils.getUserId(), (isAudit.equals("true") ? ">" : "="))));
}
cnd.andEX("ase.activityId", "=", activityId);
cnd.andEX("ase.eventId", "=", eventId);
cnd.andEX("YEAR(school.applyStartTime)", "=", year);
cnd.groupBy("ase.id");
cnd.asc("abs.`code`");
sql.setCondition(cnd);
Pagination pagination = activitySchoolApplyService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("/getEvents")
public AjaxResult getEvents(String activityId) {
return AjaxResult.success(activitySchoolApplyService.getEvents(activityId));
}
@GetMapping("/getUserData")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult getUserData(String userId) {
Sql sql = Sqls.create("""
select
userId,
deptCode,
loginName,
userName,
sex,
unionId,
deptId,
deptName,
unionName,
unionCode,
mobile,
birthday
from
`user` u
WHERE
userId=@userId
""").setParam("userId", userId);
return AjaxResult.success(dao.fetch(sql));
}
/**
* @param sportsActivityApply
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 添加团长领队等
* @author zhf
* @date 2023/2/2 16:24
*/
@PostMapping("/doLeaderCoachHead")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult doLeaderCoachHead(@RequestBody SportsActivityApply sportsActivityApply) {
activitySchoolApplyService.doLeaderCoachHead(sportsActivityApply);
return AjaxResult.success();
}
@GetMapping("/getUniteApplyInfo")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult getUniteApplyInfo(@RequestParam(required = false, value = "endAgeDate") String endAgeDate,
@RequestParam(required = false, value = "startAgeDate") String startAgeDate,
@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "eventId") String eventId,
@RequestParam(required = false, value = "schoolEventId") String schoolEventId,
@RequestParam(required = false, value = "projectType") String projectType,
@RequestParam(required = false, value = "isMenWomen") Integer isMenWomen) {
return activitySchoolApplyService.getUniteApplyInfo(endAgeDate, startAgeDate, activityId, eventId, schoolEventId, projectType, isMenWomen);
}
@GetMapping("/getActivityData")
public AjaxResult getActivityData(String activityId) {
return AjaxResult.success(activitySchoolApplyService.query(Cnd.where("activityId", "=", activityId).and("awardsMode", "=", 1)));
}
/**
* @param sportsActivityApply
* @param pass
* @param eventId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description 体育活动报名
* @author zhf
* @date 2023/2/3 9:37
*/
@PostMapping("/doApply")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult doApply(@RequestBody SportsActivityApply sportsActivityApply,
@RequestParam boolean pass,
@RequestParam String eventId) {
activitySchoolApplyService.doApply(sportsActivityApply, pass, eventId);
return AjaxResult.success();
}
@PostMapping("/getAllUser")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult getAllUser(@RequestParam(required = false, value = "endAgeDate") String endAgeDate,
@RequestParam(required = false, value = "startAgeDate") String startAgeDate,
@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "eventId") String eventId,
@RequestParam(required = false, value = "isMenWomen") Integer isMenWomen,
@RequestParam Integer pageNumber,
@RequestParam(required = false, name = "dataD[]") List<String> dataD,
@RequestParam(required = false, name = "dataT[]") List<String> dataT,
@RequestBody SportsActivityPageForm sportsActivityPageForm) {
return AjaxResult.success(activitySchoolApplyService.getAllUser(sportsActivityPageForm, dataD, dataT, endAgeDate, startAgeDate, isMenWomen, activityId, eventId, pageNumber));
}
@PostMapping("/applyPageData")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult applyPageData(@RequestBody PageForm page,
@RequestParam String activityId,
@RequestParam String eventId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
apply.*,team.`name`,acts.name actsname,ev.allName
FROM
activity_school_apply apply LEFT JOIN activity_school_team team ON apply.teamId=team.id
LEFT JOIN activity_school acts ON acts.id=apply.activityId
LEFT JOIN activity_event ev ON ev.id = apply.eventId $condition
""");
if (!AuthUtil.hasRole("admin")) {
cnd.and("apply.unionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("apply.activityId", "=", activityId);
cnd.andEX("apply.eventId", "=", eventId);
cnd.asc("team.`name`");
cnd.desc("apply.identity");
sql.setCondition(cnd);
return AjaxResult.success(dao.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@PostMapping("/joinMemberFamily")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult joinMemberFamily(@RequestParam(required = false, name = "applysId[]") List<String> applysId) {
activitySchoolApplyService.joinMemberFamily(applysId);
return AjaxResult.success();
}
@PostMapping("/getSysUser")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult getSysUser(@RequestBody SportsActivityPageForm sportsActivityPageForm) {
Cnd cnd = Cnd.NEW();
cnd.andEX("userId", "not in", sportsActivityPageForm.getUserId());
if (StrUtil.isNotBlank(sportsActivityPageForm.getSearchKeyword())) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.andLike("userName", sportsActivityPageForm.getSearchKeyword()).orLike("loginName", sportsActivityPageForm.getSearchKeyword());
cnd.and(group);
}
Sql sql = Sqls.create("select userId,loginName,userName,sex,mobile,deptId,birthday,unionId,unionName from `user` $condition LIMIT 30");
sql.setCondition(cnd);
List<NutMap> list = dao.listMap(sql);
return AjaxResult.success(list);
}
@GetMapping("/dshApplyUserList")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult dshApplyUserList(@Valid String activityId, @Valid String eventId) {
List<ActivitySchoolApply> applyList = dao.dao().query(ActivitySchoolApply.class,
Cnd.where("activityId", "=", activityId)
.and("eventId", "=", eventId)
.and("activityUnionId","=",SecurityUtils.getUnionId()).asc("status"));
return AjaxResult.success(applyList);
}
@PostMapping("/doAuditApplyUser")
@ApiOperation("审核待审核人员")
@RequiresPermissions("activity:sports:sportsActivityApply")
public AjaxResult doAuditApplyUser(@RequestParam(required = false, name = "dshSelectionIds[]") List<String> dshSelectionIds, Integer status, String activityId, String eventId) {
if (Lang.isEmpty(dshSelectionIds) || Lang.isEmpty(status)) {
return AjaxResult.error();
}
if (status == 2) {
int appCount = dao.dao().count(ActivitySchoolApply.class, Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId).and("status", "=", 2));
ActivitySchoolEvent schoolEvent = dao.dao().fetch(ActivitySchoolEvent.class, Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId));
if (appCount + dshSelectionIds.size() > schoolEvent.getAthletesMaxNum()) {
return AjaxResult.error("当前项目限报【" + schoolEvent.getAthletesMaxNum() + "】人,目前已报【" + appCount + "】人,请检查报名人数!");
}
}
dao.dao().update(ActivitySchoolApply.class, Chain.make("status", status), Cnd.where("id", "in", dshSelectionIds));
return AjaxResult.success();
}
}
@@ -0,0 +1,75 @@
package com.ruoyi.activity.controller.sports;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/31 9:01
*/
@RestController
@RequestMapping("/sports/calendar")
public class ActivityCalendarController {
@Autowired
private BaseService baseService;
@GetMapping("/getData")
@RequiresLogin
public AjaxResult getData() {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
school.id,
school.`name`,
school.address,
school.applyStartTime,
school.applyEndTime,
school.startTime,
school.endTime,
school.unitSponsor,
applyWay
FROM
activity_school school
$condition
""");
cnd.desc("school.startTime");
sql.setCondition(cnd);
return AjaxResult.success(baseService.listMap(sql));
}
@GetMapping("/getWyData")
@RequiresLogin
public AjaxResult getWyData() {
Sql sql = Sqls.create("""
SELECT
id,
`name`,
address,
applyStartTime,
applyEndTime,
startTime,
endTime,
type activityType
FROM
activity_tissue
WHERE
signUpMethod = 1
""");
return AjaxResult.success(baseService.listMap(sql));
}
}
@@ -0,0 +1,318 @@
package com.ruoyi.activity.controller.sports;
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.ruoyi.activity.api.constant.SportsActivityFormData;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolApply;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolEvent;
import com.ruoyi.activity.service.sports.ActivitySchoolService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteClubService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* TODO
* 体育比赛活动管理
*
* @Author zhf
* @Date 2023/1/31 9:24
*/
@RestController
@RequestMapping("/sports/infoMange")
public class ActivityInfoManageController {
@Autowired
private ActivitySchoolService activitySchoolService;
@Autowired
private RemoteClubService remoteClubService;
@PostMapping("/doAssignmentDate")
public AjaxResult doAssignmentDate(@RequestParam(required = false, name = "eventIds[]") List<String> eventIds,
@RequestBody List<ActivitySchoolEvent> events) {
return activitySchoolService.doAssignmentDate(eventIds, events);
}
@PostMapping("/doAdd")
@RequiresPermissions("activity:sports:sportsActivityManage")
public AjaxResult doAdd(@RequestBody SportsActivityFormData sportsActivityFormData) {
String id = activitySchoolService.doAdd(sportsActivityFormData);
return AjaxResult.success().put("data", id);
}
@PostMapping("/pageData")
@RequiresPermissions("activity:sports:sportsActivityManage")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "year") Integer year,
@RequestParam(required = false, value = "gameStyle") String gameStyle,
@RequestParam(required = false, value = "query") String query,
@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "activityLevel") String activityLevel) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
un.unionName,
ba.`name` activityLevelName,
school.id,
school.planId,
school.name,
school.address,
school.applyStartTime,
school.applyEndTime,
school.startTime,
school.endTime,
school.unitSponsor,
school.unitJointly,
school.gameStyle,
school.funding,
school.applyWay,
school.personType,
school.activityLevel,
school.isSave,
school.activityGroupId,
school.activityCode,
school.foundDate,
school.belongClubId,
(SELECT COUNT(1) FROM activity_school_apply asa WHERE asa.activityId = school.id and asa.status=2) applyNum
FROM
activity_school school
LEFT JOIN activity_basic_settings ba ON ba.`code` = school.activityLevel
LEFT JOIN `union` un ON un.id = school.belongUnionId
$condition
""");
if ("one".equals(query)) {
cnd.and(new Static("now() > school.applyStartTime and now() < school.applyEndTime"));
} else if ("two".equals(query)) {
cnd.and(new Static("now() > school.applyEndTime and now() < school.startTime"));
} else if ("three".equals(query)) {
cnd.and(new Static("now() > school.startTime and now() < school.endTime"));
} else if ("four".equals(query)) {
cnd.and(new Static("now() > school.endTime"));
}
if (!AuthUtil.hasAnyRoles("admin,A06")) {
if (AuthUtil.hasRole("H04")) {
cnd.and("school.belongUnionId", "=", SecurityUtils.getUnionId());
}
if (AuthUtil.hasRole("H02")) {
List<NutMap> clubList = remoteClubService.getClubsByRole().getData();
List<String> stids = clubList.stream().map(v -> v.getString("stid")).collect(Collectors.toList());
cnd.and("school.belongClubId", "in", stids);
}
}
cnd.andEX("school.activityLevel", "=", activityLevel);
cnd.andEX("school.gameStyle", "=", gameStyle);
cnd.andEX("YEAR(school.applyStartTime)", "=", year);
cnd.andEX("school.id", "=", activityId);
cnd.desc("school.startTime");
sql.setCondition(cnd);
return AjaxResult.success(activitySchoolService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@PostMapping("/doEdit")
@RequiresPermissions("activity:sports:sportsActivityManage")
public AjaxResult doEdit(@RequestBody SportsActivityFormData sportsActivityFormData) {
activitySchoolService.doEdit(sportsActivityFormData);
return AjaxResult.success();
}
@GetMapping("/findOne")
public AjaxResult findOne(String id) {
return AjaxResult.success(activitySchoolService.findOne(id));
}
@PostMapping("/getEventApply")
public AjaxResult getEventApply(@RequestParam String activityId,
@RequestBody List<String> eventId) {
if (Lang.isEmpty(eventId)) {
return AjaxResult.success("暂无修改的项目");
}
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
ev.allName
FROM
activity_school_apply asa LEFT JOIN activity_event ev ON ev.id=asa.eventId
$condition
""");
cnd.and("asa.activityId", "=", activityId);
cnd.and("asa.eventId", "in", eventId);
cnd.and("asa.eventId", "is not", null);
cnd.groupBy("ev.allName");
sql.setCondition(cnd);
return AjaxResult.success(activitySchoolService.list(sql));
}
@DeleteMapping("/doDelete")
@RequiresPermissions("activity:sports:sportsActivityManage")
public AjaxResult doDelete(String id) {
activitySchoolService.doDelete(id);
return AjaxResult.success();
}
@RequestMapping("/exportXlsx")
@RequiresPermissions("activity:sports:sportsActivityManage")
public void exportXlsx(String id, String unionId, HttpServletResponse response) throws IOException {
Sql sql = Sqls.create("""
SELECT
au.unionName applyUnionName,
au.userName applyUserName,
app.username,
app.loginname,
app.identity,
app.activityUnionName,
app.unionName,
app.unitname,
app.unionId,
app.activityUnionId,
app.sex,
ev.allName,
sc.`name` activityName,
app.`team` teamName
FROM
`activity_school_apply` app
LEFT JOIN `user` au ON au.userId = app.applyUser
LEFT JOIN activity_event ev ON ev.id = app.eventId
LEFT JOIN activity_school sc ON sc.id=app.activityId
WHERE
app.activityId = @id
and app.status = 2
$cnd
ORDER BY
ev.projectCode desc,
app.activityUnionName DESC,
app.`team` ASC,
CASE
WHEN JSON_SEARCH( app.identity, 'one', '7' ) IS NOT NULL THEN
1
WHEN JSON_SEARCH( app.identity, 'one', '3' ) IS NOT NULL THEN
2
WHEN JSON_SEARCH( app.identity, 'one', '2' ) IS NOT NULL THEN
3 ELSE 4 END;
""").setParam("id", id);
if (Strings.isNotBlank(unionId)) {
sql.setVar("cnd", "and u.unionid='" + unionId + "'");
}
List<NutMap> list = activitySchoolService.listMap(sql);
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("项目名称", "allName", 50));
entityList.add(new ExcelExportEntity("所属队", "teamName", 20));
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("所在单位", "unitname", 50));
entityList.add(new ExcelExportEntity("所在工会", "unionName", 50));
entityList.add(new ExcelExportEntity("报名人工会", "applyUnionName", 50));
entityList.add(new ExcelExportEntity("身份", "sf", 30));
entityList.add(new ExcelExportEntity("备注", "applyUnitName", 30));
entityList.add(new ExcelExportEntity("报名人", "applyUserName", 30));
String activityName = list.get(0).getString("activityName");
list.forEach(map -> {
map.put("sex", map.getInt("sex") == 0 ? "" : map.getInt("sex") == 1 ? "" : "暂无");
ActivitySchoolApply schoolApply = Lang.map2Object(map, ActivitySchoolApply.class);
if (StrUtil.isAllNotBlank(schoolApply.getUnionId(), schoolApply.getActivityUnionId()) && !schoolApply.getUnionId().equals(schoolApply.getActivityUnionId())) {
List<NutMap> applyList = list.stream().filter(v -> v.getString("activityUnionId").equals(map.getString("activityUnionId"))).collect(Collectors.toList());
List<String> unionNameList = applyList.stream().map(a -> a.getString("unionName")).distinct().collect(Collectors.toList());
map.setv("applyUnitName", String.join(",", unionNameList));
}
if (StrUtil.isBlank(map.getString("allName"))){
map.put("allName","工会教练、领队");
}
String sf = schoolApply.getIdentity().stream().map(personType::getName).collect(Collectors.toList()).toString();
map.put("sf", sf.replace("[", "").replace("]", ""));
});
Map<String, List<NutMap>> userListMap = list.stream().collect(Collectors.groupingBy(n -> n.getString("allName")));
Workbook workbook = new XSSFWorkbook();
userListMap.forEach((k, v) -> {
ExcelExportService service = new ExcelExportService();
ExportParams exportParams = new ExportParams();
exportParams.setSheetName(k);
exportParams.setType(ExcelType.XSSF);
service.createSheetForMap(workbook, exportParams, entityList, v);
});
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(activityName + "报名表.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
}
private static class personType {
private static String getName(String v) {
switch (v) {
case "1":
return "运动员";
case "2":
return "教练";
case "3":
return "领队";
case "4":
return "处级领导";
case "5":
return "替补";
case "6":
return "团长";
case "7":
return "工作人员";
default:
return "";
}
}
}
}
@@ -0,0 +1,176 @@
package com.ruoyi.activity.controller.sports;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* TODO
* 运动会成绩统计
*
* @Author zhf
* @Date 2023/2/6 18:40
*/
@RestController
@RequestMapping("/sports/prizeList")
public class ActivityPrizeListController {
@Autowired
private BaseService baseService;
private static NutMap nullMap = NutMap.NEW();
@GetMapping("/summary")
public AjaxResult summary(@RequestParam String activityId) {
NutMap map = new NutMap();
List<NutMap> result = new ArrayList<>();
//查询所有的工会
List<NutMap> query = baseService.listMap(Sqls.create("select * from `union`"));
for (NutMap sys_union : query) {
NutMap nutMap = new NutMap();
//记录总人数
int totalPeople = 0;
nutMap.setv("unionname", sys_union.getString("unionName"));
for (int i = 1; i <= 8; i++) {
Sql sql = Sqls.create("""
SELECT
IFNULL((
SELECT
COUNT( 1 )
FROM
activity_results ar1
WHERE
ar1.activityId = ar2.activityId
AND ar1.ranking = ar2.ranking
AND ar1.isTeamPersonal = 1
AND ar1.unionId = ar2.unionId
),
0
) num,
IFNULL( SUM( numberOfPeople ), 0 ) numberOfPeople
FROM
activity_results ar2 $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("ar2.activityId", "=", activityId);
cnd.and("ar2.ranking", "=", i);
cnd.and("ar2.unionId", "=", sys_union.getString("id"));
cnd.and("ar2.isTeamPersonal", "in", "1,2");
sql.setCondition(cnd);
int number = 0;
List<Record> list = baseService.list(sql);
if (list.size() > 0) {
number = list.get(0).getInt("num") + list.get(0).getInt("numberOfPeople");
}
totalPeople += number;
if (i == 1) {
nutMap.setv("one", number);
} else if (i == 2) {
nutMap.setv("two", number);
} else if (i == 3) {
nutMap.setv("three", number);
} else if (i == 4) {
nutMap.setv("four", number);
} else if (i == 5) {
nutMap.setv("fives", number);
} else if (i == 6) {
nutMap.setv("six", number);
} else if (i == 7) {
nutMap.setv("seven", number);
} else if (i == 8) {
nutMap.setv("eight", number);
}
}
nutMap.setv("totalPeople", totalPeople);
result.add(nutMap);
}
map.put("score", result);
return AjaxResult.success(map);
}
@GetMapping("/getPrizes")
public AjaxResult getPrizes(@RequestParam(required = false, value = "year") Integer year,
@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "unionId") String unionId) {
Sql sql = Sqls.create("""
SELECT
acr.activityId,
ace.allName,
acr.userId,
acr.ranking,
acr.numberOfPeople,
ace.isMenWomen,
acs.`name` as activityName,
u.userName username,
RIGHT(ace.allName,4) xmlx,
LEFT(ace.allName,2) xblx
FROM activity_school_event acse
left join activity_school acs on acs.id = acse.activityId
left join activity_event ace on ace.id = acse.eventId
left join activity_results acr on acr.eventId = acse.eventId
left join `user` u on u.userId = acr.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("acr.activityId", "=", activityId);
cnd.and("YEAR(acs.applyStartTime)", "=", year);
cnd.and("acr.unionId", "=", unionId);
cnd.groupBy("acr.id ");
cnd.asc("ace.allName").asc("acr.ranking");
sql.setCondition(cnd);
List<NutMap> allList = baseService.listMap(sql);
if (Lang.isEmpty(allList)) {
return AjaxResult.success(Map.of("团体项目", nullMap, "男子项目", nullMap, "女子项目", nullMap, "其他", nullMap));
}
Map maleMap = NutMap.NEW();
Map femaleMap = NutMap.NEW();
Map teamMap = NutMap.NEW();
Map otherMap = NutMap.NEW();
Map<String, List<NutMap>> xmlxList = allList.stream().collect(Collectors.groupingBy(v -> v.getString("xmlx")));
if (Lang.isNotEmpty(xmlxList.get("(团体)"))) {
teamMap = xmlxList.get("(团体)").stream().collect(Collectors.groupingBy(v -> v.getString("allName")));
}
if (Lang.isNotEmpty(xmlxList.get("(单项)")) && xmlxList.get("(单项)").stream().anyMatch(v -> v.getString("xblx").equals("男子"))) {
maleMap = xmlxList.get("(单项)").stream().filter(v -> v.getString("xblx").equals("男子")).collect(Collectors.groupingBy(h -> h.getString("allName")));
}
if (Lang.isNotEmpty(xmlxList.get("(单项)")) && xmlxList.get("(单项)").stream().anyMatch(v -> v.getString("xblx").equals("女子"))) {
femaleMap = xmlxList.get("(单项)").stream().filter(v -> v.getString("xblx").equals("女子")).collect(Collectors.groupingBy(h -> h.getString("allName")));
}
return AjaxResult.success(Map.of("团体项目", teamMap, "男子项目", maleMap, "女子项目", femaleMap, "其他", otherMap));
}
}
@@ -0,0 +1,153 @@
package com.ruoyi.activity.controller.sports;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.ruoyi.activity.api.domain.sports.ActivitySchool;
import com.ruoyi.activity.service.sports.ActivitySchoolApplyService;
import com.ruoyi.activity.service.sports.ActivitySchoolService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteClubService;
import com.ruoyi.system.api.domain.SysConfig;
import org.apache.catalina.Globals;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* TODO
* 报名信息阅览
*
* @Author zhf
* @Date 2023/2/3 17:40
*/
@RestController
@RequestMapping("/sports/reading")
public class ActivityReadingController {
@Autowired
private RemoteClubService remoteClubService;
@Autowired
private ActivitySchoolService activitySchoolService;
@Autowired
private ActivitySchoolApplyService activitySchoolApplyService;
@GetMapping("/getNearActivity")
@RequiresPermissions("activity:sports:sportsActivityReading")
public AjaxResult getNearActivity(Integer year, String activityLevel) {
Cnd cnd = Cnd.NEW();
cnd.and("close", "!=", true);
cnd.and("YEAR(startTime)", "=", year);
cnd.and("activityLevel", "=", activityLevel);
if (!AuthUtil.hasAnyRoles("admin,A06")) {
if (activityLevel.equals("40002")) {
cnd.and("belongUnionId", "=", SecurityUtils.getUnionId());
}
List<NutMap> clubs = remoteClubService.getClubsByRole().getData();
List<String> stids = clubs.stream().map(v -> v.getString("stid")).collect(Collectors.toList());
if (activityLevel.equals("40003")) {
cnd.and("belongClubId", "in", stids);
}
}
List<ActivitySchool> applyEndTime = activitySchoolService.query(cnd.desc("applyEndTime"));
return AjaxResult.success(applyEndTime);
}
@PostMapping("/getData")
@RequiresPermissions("activity:sports:sportsActivityReading")
public AjaxResult getData(@RequestParam(required = false, value = "id") String id,
@RequestParam(required = false, value = "activityLevel") String activityLevel,
@RequestParam(required = false) Integer applyed,
@RequestParam(required = false) String unionid,
@RequestBody PageForm pageForm) {
return AjaxResult.success(activitySchoolApplyService.getData(id, activityLevel, applyed, unionid, pageForm));
}
@PostMapping("/doExport")
@RequiresPermissions("activity:sports:sportsActivityReading")
public void doExport(@RequestParam String unionId, @RequestParam String activityId, HttpServletResponse response) {
try {
ActivitySchool activitySchool = activitySchoolApplyService.dao().fetch(ActivitySchool.class, activityId);
Sql sql = Sqls.create("""
SELECT
asa.username,
asa.loginname,
asa.unionLeader,
asa.activityUnionName,
asa.mobile,
CASE
WHEN asa.sex = 0 THEN
'男'
WHEN asa.sex = 1 THEN
'女' ELSE '未知'
END AS sex,
u.idcard
FROM
`activity_school_apply` asa
LEFT JOIN `user` u ON u.userId = asa.userId
WHERE
asa.activityUnionId=@unionId
AND asa.activityId=@activityId
ORDER BY asa.sex ASC
""").setParam("unionId", unionId).setParam("activityId", activityId);
List<NutMap> listMap = activitySchoolApplyService.listMap(sql);
String unionName = "";
if (Lang.isNotEmpty(listMap)) {
String activityUnionName = listMap.get(0).getString("activityUnionName");
unionName = activityUnionName;
}
NutMap unionLeader = listMap.stream().filter(l -> l.getBoolean("unionLeader")).findFirst().orElse(null);
List<NutMap> userList = listMap.stream().filter(l -> !l.getBoolean("unionLeader")).collect(Collectors.toList());
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
Configure config = Configure.builder().bind("userList", policy).build();
HashMap<String, Object> map = new HashMap<>();
if (Lang.isNotEmpty(unionLeader)) {
map.put("leaderUserName", unionLeader.getString("username"));
map.put("leaderMobile", unionLeader.getString("mobile"));
}
map.put("userList", userList);
map.put("unionName", unionName);
map.put("activityName", activitySchool.getName());
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/unionApplyUser.docx");
String disposition = "attachment;filename=" + URLEncoder.encode(activitySchool.getName() + "报名表.docx", StandardCharsets.UTF_8);
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
XWPFTemplate.compile(inputStream, config).render(map, response.getOutputStream());
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,156 @@
package com.ruoyi.activity.controller.sports;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolApply;
import com.ruoyi.activity.service.sports.ActivitySchoolService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/3 15:07
*/
@RestController
@RequestMapping("/sports/remind")
public class ActivityRemindController {
@Autowired
private BaseService dao;
@Autowired
private RemoteUserRoleService remoteUserRoleService;
@Autowired
private ActivitySchoolService activitySchoolService;
@PostMapping("/pageData")
@RequiresPermissions("activity:sports:sportsActivityRemind")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "activityId") String activityId) {
Sql sql = Sqls.create("""
SELECT
ba.`name` activityLevelName,
school.id,
school.planId,
school.`name`,
school.address,
school.applyStartTime,
school.applyEndTime,
school.startTime,
school.endTime,
school.unitSponsor,
school.unitJointly,
school.gameStyle,
school.funding,
school.applyWay,
school.personType,
school.activityLevel,
(SELECT COUNT(1) FROM activity_school_apply asa WHERE asa.activityId = school.id) applyNum
FROM
activity_school school
LEFT JOIN activity_basic_settings ba ON ba.`code` = school.activityLevel
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("school.close", "!=", true);
cnd.and("school.isSave", "!=", true);
//cnd.and(new Static("CURRENT_DATE() >= school.applyStartTime AND CURRENT_DATE() <= school.applyEndTime"));
cnd.andEX("school.id", "=", activityId);
cnd.desc("school.startTime");
sql.setCondition(cnd);
return AjaxResult.success(dao.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@GetMapping("/getUnionRemind")
@RequiresPermissions("activity:sports:sportsActivityRemind")
public AjaxResult getUnionRemind(String activityId) {
List<NutMap> listMap = dao.listMap(Sqls.create("select * from `union`"));
listMap.forEach(un -> {
//查询每个分工会的管理员
List<FeignCnd> cndList = List.of(
new FeignCnd("role_id", "=", Roles.FGH_ADMIN),
new FeignCnd("union_id", "=", un.getString("id"))
);
List<SysUserRole> sysUserRoles = remoteUserRoleService.getUserRole(cndList).getData();
List<Long> userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
//根据管理员的id查询出姓名和手机号
Sql sqlUser = Sqls.create("""
SELECT
GROUP_CONCAT( userName ) userName,
GROUP_CONCAT( mobile ) mobile
FROM
`user`
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("userId", "in", userIdList);
sqlUser.setCondition(cnd);
NutMap userList = dao.fetch(sqlUser);
//查有多少个人报名
int activityApplyCount = dao.dao().count(ActivitySchoolApply.class, Cnd.where("unionId", "=", un.getString("id")).and("activityId", "=", activityId));
un.setv("telephone", userList.getString("mobile"));
un.setv("unionleader", userList.getString("userName"));
un.setv("num", activityApplyCount);
//查询报名的信息
List users = dao.dao().query(ActivitySchoolApply.class, Cnd.where("unionId", "=", un.getString("id")).and("activityId", "=", activityId).desc("identity"));
un.setv("users", users);
});
return AjaxResult.success().put("data", listMap);
}
@GetMapping("/sendRemind")
@RequiresPermissions("activity:sports:sportsActivityRemind")
public AjaxResult sendRemind(@RequestParam(required = false, value = "phone") String phone,
String unionname) {
activitySchoolService.sendRemind(phone, unionname);
return AjaxResult.success();
}
@GetMapping("/sendAllRemind")
@RequiresPermissions("activity:sports:sportsActivityRemind")
public AjaxResult sendAllRemind(@RequestParam String activityId) {
return AjaxResult.success();
}
}
@@ -0,0 +1,248 @@
package com.ruoyi.activity.controller.sports;
import com.ruoyi.activity.api.domain.sports.ActivityResults;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolApply;
import com.ruoyi.activity.service.sports.ActivityResultsService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Lang;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* TODO
* 活动成绩
*
* @Author zhf
* @Date 2023/2/6 18:29
*/
@RestController
@RequestMapping("/sports/results")
public class ActivityResultsController {
@Autowired
private ActivityResultsService activityResultsService;
@Autowired
private BaseService dao;
@PostMapping("/pageData")
@RequiresPermissions("activity:sports:sportsActivityResults")
public AjaxResult pageData(@RequestBody PageForm page,
@RequestParam(required = false, value = "groupName") String groupName,
@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "eventId") String eventId,
@RequestParam(required = false, name = "isMenWomen[]") List<String> isMenWomen) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
ase.id,
ase.activityId,
ase.eventId,
ae.projectType awardsMode,
ae.allName,
ae.isMenWomen,
school.`name` ,
( SELECT COUNT( 1 ) FROM activity_results ar WHERE ar.eventId = ase.eventId and ar.activityId=ase.activityId) rs
FROM
activity_school_event ase
LEFT JOIN activity_event ae ON ase.eventId = ae.id
LEFT JOIN activity_school school ON school.id = ase.activityId
LEFT JOIN activity_basic_settings abs ON abs.id=ae.competitionCategory
$condition
""");
cnd.and("ase.activityId", "=", activityId);
cnd.andEX("abs.`name`", "=", groupName);
cnd.andEX("ae.id", "=", eventId);
SqlExpressionGroup sqlExpressionGroup = new SqlExpressionGroup();
if (Lang.isNotEmpty(isMenWomen)) {
if (isMenWomen.stream().anyMatch(a -> a.equals("2"))) {
sqlExpressionGroup.and("ae.isMenWomen", "=", 1);
}
if (isMenWomen.stream().anyMatch(a -> a.equals("3"))) {
sqlExpressionGroup.or("ae.isMenWomen", "=", 2);
}
if (isMenWomen.stream().anyMatch(a -> a.equals("4"))) {
sqlExpressionGroup.and("ae.projectType", "=", 1);
}
if (isMenWomen.stream().anyMatch(a -> a.equals("5"))) {
sqlExpressionGroup.or("ae.projectType", "=", 2);
}
}
if (sqlExpressionGroup.getExps().size() > 0) {
cnd.and(sqlExpressionGroup);
}
cnd.desc("allName");
sql.setCondition(cnd);
return AjaxResult.success(activityResultsService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
}
@GetMapping("/getUnionData")
public AjaxResult getUnionData(String activityId, String eventId) {
Sql sql = Sqls.create("""
SELECT
ar.id,
ar.activityId,
ar.eventId,
ar.ranking,
ar.unionId,
ar.numberOfPeople,
ar.integral,
ar.isTeamPersonal
FROM
activity_results ar
WHERE
ar.isTeamPersonal = 2
AND ar.activityId = @activityId
AND ar.eventId = @eventId
ORDER BY ar.ranking asc
""").setParam("activityId", activityId).setParam("eventId", eventId);
return AjaxResult.success(activityResultsService.listMap(sql));
}
@GetMapping("/getUnionDetails")
public AjaxResult getUnionDetails(String activityId, String eventId, String unionId) {
int count = dao.dao().count(ActivitySchoolApply.class, Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId).and("unionId", "=", unionId));
return AjaxResult.success(count);
}
/**
* 查询团体参赛分工会
*
* @param activityId
* @param eventId
* @return
*/
@GetMapping("/getUnionList")
public AjaxResult getUnionList(String activityId, String eventId) {
Sql sql = Sqls.create("""
SELECT
un.id,
un.unionname
FROM
activity_school_apply asa
LEFT JOIN `union` un ON un.id = asa.unionId
WHERE
asa.activityId = @activityId
AND asa.eventId = @eventId
GROUP BY
un.unionname
""").setParam("activityId", activityId).setParam("eventId", eventId);
return AjaxResult.success(dao.list(sql));
}
/**
* 查询个人参赛人员
*
* @param activityId
* @param eventId
* @param isMenWomen
* @return
*/
@GetMapping("/getUserList")
@RequiresPermissions("activity:sports:sportsActivityResults")
public AjaxResult getUserList(String activityId, String eventId, Integer isMenWomen) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
u.userId id,
u.userName,
u.loginName,
u.unionId,
u.unionName,
u.sex
FROM
activity_school_apply asa
LEFT JOIN `user` u ON u.userId = asa.userId $condition
""");
cnd.and("asa.activityId", "=", activityId);
cnd.and("asa.eventId", "=", eventId);
cnd.and("asa.awardsMode", "=", 1);
if (isMenWomen != null && isMenWomen == 1) cnd.and("u.sex", "=", "0");
if (isMenWomen != null && isMenWomen == 2) cnd.and("u.sex", "=", "1");
sql.setCondition(cnd);
return AjaxResult.success(dao.listMap(sql));
}
/**
* 根据活动项目性别查询有没有获奖人员
*
* @return
*/
@GetMapping("/getUserData")
@RequiresPermissions("activity:sports:sportsActivityResults")
public AjaxResult getUserData(String activityId, String eventId, Integer isMenWomen) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
ar.id,
ar.userId,
ar.activityId,
ar.eventId,
u.userName,
u.unionId,
u.unionName,
u.sex,
ar.integral,
ar.numberOfPeople,
ar.ranking,
ar.isTeamPersonal
FROM
`activity_results` ar
LEFT JOIN `user` u ON ar.userId = u.userId$condition
""");
cnd.and("ar.activityId", "=", activityId);
cnd.and("ar.eventId", "=", eventId);
if (isMenWomen != null && isMenWomen == 1) cnd.and("u.sex", "=", "0");
if (isMenWomen != null && isMenWomen == 2) cnd.and("u.sex", "=", "1");
cnd.asc("ar.ranking");
sql.setCondition(cnd);
return AjaxResult.success(dao.listMap(sql));
}
@PostMapping("/doAdd")
@RequiresPermissions("activity:sports:sportsActivityResults")
public AjaxResult doAdd(@RequestBody List<ActivityResults> activityResults,
@RequestParam String activityId,
@RequestParam String eventId) {
activityResultsService.doAdd(activityResults, activityId, eventId);
return AjaxResult.success();
}
@PostMapping("/doAddUser")
@RequiresPermissions("activity:sports:sportsActivityResults")
public AjaxResult doAddUser(@RequestBody ActivitySchoolApply activitySchoolApply) {
return activityResultsService.doAddUser(activitySchoolApply);
}
}
@@ -0,0 +1,396 @@
package com.ruoyi.activity.controller.sports;
import com.ruoyi.activity.api.domain.sports.ActivitySchool;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolEvent;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
* TODO
* 奖名名单
*
* @Author zhf
* @Date 2023/2/6 18:40
*/
@RestController
@RequestMapping("/sports/scoreStatistics")
public class ActivityScoreStatisticsController {
@Autowired
private BaseService dao;
@GetMapping("/isMaleFemale")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public AjaxResult isMaleFemale(@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "sex") String sex,
@RequestParam(required = false, value = "awardsMode") Integer awardsMode) {
NutMap map = new NutMap();
List<NutMap> result = new ArrayList<>();
//查询所有的工会
List<NutMap> query = dao.listMap(Sqls.create("select * from `union`"));
Cnd cndX = Cnd.NEW();
//查询所有的项目
Sql sqlX = Sqls.create("""
SELECT
ev.id,
ev.eventId,
ba.`name` baname,
eve.projectType awardsMode,
eve.allName label,
eve.isMenWomen
FROM
activity_school_event ev
LEFT JOIN activity_event eve ON ev.eventId = eve.id
LEFT JOIN activity_basic_settings ba ON eve.competitionCategory = ba.id $condition
""");
cndX.and("ev.activityId", "=", activityId);
if (awardsMode < 3) {
cndX.and("eve.projectType", "=", awardsMode);
cndX.and("eve.isInterest", "=", false);
cndX.and("eve.isMenWomen", "=", sex.equals("0") ? 1 : 2);
}
if (awardsMode == 3) {
cndX.and("eve.isInterest", "=", true);
}
if (awardsMode == 4) {
cndX.and(Cnd.exps("eve.isMenWomen", "=", sex.equals("0") ? 1 : 2).or("eve.isMenWomen", "is", null));
}
cndX.and(new Static("1=1 order by case ba.`name` when '甲组' then 1 when '乙组' then 2 when '丙组' then 3 when '丁组' then 4 when '团体' then 5 end"));
sqlX.setCondition(cndX);
List<Record> eventList = dao.list(sqlX);
//查询每个工会下每个项目的成绩
query.forEach(v -> {
NutMap nutMap = new NutMap();
//记录总积分
double totalScore = 0;
nutMap.setv("unionname", v.getString("unionName"));
for (Record event : eventList) {
Sql sqlC = Sqls.create("""
SELECT
IF ( sum( integral ) IS NULL, 0, sum( integral )) AS integral,
ev.allName,ev.projectType,abs.`name` AS zb,ev.isInterest
FROM
activity_results ar
LEFT JOIN activity_event ev ON ar.eventId = ev.id
LEFT JOIN activity_basic_settings abs ON abs.id=ev.competitionCategory $condition
""");
Cnd cndC = Cnd.NEW();
if ((awardsMode == 1 && event.getString("awardsMode").equals("1")) || (awardsMode == 2 && event.getString("awardsMode").equals("2"))) {
cndC.and("ev.isInterest", "=", false);
cndC.and("ev.isMenWomen", "=", sex.equals("0") ? 1 : 2);
} else if (awardsMode == 3) {
cndC.and("ev.isInterest", "=", true);
} else if (awardsMode == 4) {
cndC.and(Cnd.exps("ev.isMenWomen", "=", sex.equals("0") ? 1 : 2).or("ev.isMenWomen", "is", null));
}
cndC.and("ar.eventId", "=", event.getString("eventid"));
cndC.and("ar.unionid", "=", v.getString("id"));
cndC.and("ar.activityId", "=", activityId);
sqlC.setCondition(cndC);
Double score = 0.0;
List<NutMap> list = dao.listMap(sqlC);
boolean isInterest = list.get(0).getBoolean("isInterest");
if (list.size() > 0) {
score = list.get(0).getDouble("integral");
}
if (list.get(0).getString("allName") != null) {
if (!isInterest) {
nutMap.setv(list.get(0).getString("allName"), score);
} else {
nutMap.setv(list.get(0).getString("allName"), score / 2);
}
}
totalScore += isInterest ? (score / 2) : score;
if (list.get(0).getString("zb") != null) {
nutMap.setv("projectType", list.get(0).getString("projectType"));
nutMap.setv("zb", list.get(0).getString("zb"));
}
}
nutMap.setv("totalScore", totalScore);
result.add(nutMap);
});
map.put("score", result);
map.put("eventList", eventList);
return AjaxResult.success(map);
}
@GetMapping("/isTopEight")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public AjaxResult isTopEight(@RequestParam(required = false, value = "activityId") String activityId,
@RequestParam(required = false, value = "sex") String sex,
@RequestParam(required = false, value = "awardsMode") Integer awardsMode) {
NutMap map = new NutMap();
Cnd cndX = Cnd.NEW();
//查询所有的项目
Sql sqlX = Sqls.create("""
SELECT
ev.id,
ev.eventId,
ba.`name` baname,
eve.projectType awardsMode,
eve.allName label
FROM
activity_school_event ev
LEFT JOIN activity_event eve ON ev.eventId = eve.id
LEFT JOIN activity_basic_settings ba ON eve.competitionCategory = ba.id $condition
""");
cndX.and("ev.activityId", "=", activityId);
if (awardsMode == 1) {
cndX.and("eve.isMenWomen", "=", sex.equals("0") ? 1 : 2);
cndX.and("eve.projectType", "=", 1);
} else {
cndX.and("eve.projectType", "=", 2);
}
cndX.and(new Static("1=1 order by case ba.`name` when '甲组' then 1 when '乙组' then 2 when '丙组' then 3 when '丁组' then 4 when '团体' then 5 end"));
sqlX.setCondition(cndX);
List<Record> eventList = dao.list(sqlX);
Sql sqlC = Sqls.create("");
Cnd cnd = Cnd.NEW();
if (awardsMode == 1) {
sqlC = Sqls.create("""
SELECT
CONCAT( apply.username, '(', apply.activityUnionName, ')' ) username,
ar.integral,
ar.ranking,
eve.allName
FROM
activity_results ar
LEFT JOIN activity_event eve ON ar.eventId = eve.id
LEFT JOIN activity_school_apply apply ON apply.userId = ar.userId
AND ar.activityId = apply.activityId $condition
""");
cnd.and("ar.isTeamPersonal", "=", awardsMode);
cnd.and("apply.sex", "=", sex);
cnd.and("ar.activityId", "=", activityId);
cnd.and("ar.ranking", "<=", 8);
cnd.groupBy("ar.id");
} else {
sqlC = Sqls.create("""
SELECT
CONCAT(sun.unionname) username,
eve.allName,ar.ranking
FROM
activity_results ar
LEFT JOIN activity_event eve ON ar.eventId = eve.id
LEFT JOIN `union` sun ON sun.id = ar.unionId $condition
""");
cnd.and("ar.isTeamPersonal", "=", awardsMode);
cnd.and("ar.activityId", "=", activityId);
cnd.and("ar.ranking", "<=", 8);
}
sqlC.setCondition(cnd);
List<Record> list = dao.list(sqlC);
map.put("userList", list);
map.put("eventList", eventList);
return AjaxResult.success(map);
}
@GetMapping("/isScoreTopEight")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public AjaxResult isScoreTopEight(String activityId, String sex) {
NutMap map = new NutMap();
List<NutMap> result = new ArrayList<>();
Cnd cndX = Cnd.NEW();
//查询所有的项目
Sql sqlX = Sqls.create("""
SELECT
ev.id,
ev.eventId,
ba.`name` baname,
eve.projectType awardsMode,
eve.allName label
FROM
activity_school_event ev
LEFT JOIN activity_event eve ON ev.eventId = eve.id
LEFT JOIN activity_basic_settings ba ON eve.competitionCategory = ba.id $condition
""");
cndX.and("ev.activityId", "=", activityId);
cndX.and(Cnd.exps("eve.isMenWomen", "=", sex.equals("0") ? 1 : 2).or("eve.isMenWomen", "is", null));
cndX.and(new Static("1=1 order by case ba.`name` when '甲组' then 1 when '乙组' then 2 when '丙组' then 3 when '丁组' then 4 when '团体' then 5 end"));
sqlX.setCondition(cndX);
List<Record> eventList = dao.list(sqlX);
//查询所有的工会
List<NutMap> query = dao.listMap(Sqls.create("select * from `union`"));
query.forEach(v -> {
NutMap nutMap = new NutMap();
//记录总积分
double totalScore = 0;
nutMap.setv("unionname", v.getString("unionName"));
for (Record event : eventList) {
Sql sqlC = Sqls.create("""
SELECT
IF ( sum( integral ) IS NULL, 0, sum( integral )) AS integral,
ev.allName,ev.isInterest
FROM
activity_results ar
LEFT JOIN activity_event ev ON ar.eventId = ev.id $condition
""");
Cnd cndC = Cnd.NEW();
cndC.and(Cnd.exps("ev.isMenWomen", "=", sex.equals("0") ? 1 : 2).or("ev.isMenWomen", "is", null));
cndC.and("ar.unionid", "=", v.getString("id"));
cndC.and("ar.eventId", "=", event.getString("eventid"));
cndC.and("ar.activityId", "=", activityId);
sqlC.setCondition(cndC);
Double score = 0.0;
List<NutMap> list = dao.listMap(sqlC);
boolean isInterest = list.get(0).getBoolean("isInterest");
if (list.size() > 0) {
score = list.get(0).getDouble("integral");
}
totalScore += isInterest ? (score / 2) : score;
}
nutMap.setv("totalScore", totalScore);
result.add(nutMap);
});
map.put("score", result);
return AjaxResult.success(map);
}
@GetMapping("/getYear8")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public AjaxResult getYear8(Integer isMenWomen, Integer year) {
ArrayList<Map> resultMap = new ArrayList<>();
// int isMenWomen = sex.equals("男") ? 1 : 2;
List<NutMap> unionList = dao.listMap(Sqls.create("select * from `union`"));
List<ActivitySchool> activityList = dao.dao().query(ActivitySchool.class, Cnd.where("YEAR(applyStartTime)", "=", year));
List<String> activityIdList = activityList.stream().map(ActivitySchool::getId).collect(Collectors.toList());
List<String> activityNameList = activityList.stream().map(ActivitySchool::getName).collect(Collectors.toList());
List<String> eventIdList = dao.dao().query(ActivitySchoolEvent.class, Cnd.where("activityId", "in", activityIdList)).stream().map(v -> v.getEventId()).collect(Collectors.toList());
activityNameList.add(0, "分工会");
Sql sql = Sqls.create("""
SELECT
ae.isMenWomen,
ae.isInterest,
ar.integral,
ar.unionId,
ar.activityId
FROM
activity_event ae
LEFT JOIN activity_results ar ON ar.eventId = ae.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("ae.id", "in", eventIdList);
cnd.and("ar.activityId", "in", activityIdList);
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.maps());
dao.execute(sql);
List<NutMap> list = sql.getList(NutMap.class);
unionList.forEach(u -> {
NutMap unionMap = Lang.obj2nutmap(u);
AtomicReference<Double> scoreSum = new AtomicReference<>((double) 0);
activityList.forEach(a -> {
double sexScore = list.stream().filter(x -> x.getString("unionId").equals(u.getString("id")) && x.getInt("isMenWomen") == isMenWomen && x.getString("activityId").equals(a.getId())).mapToDouble(h -> h.getDouble("integral")).sum();
double qwScore = list.stream().filter(x -> x.getString("unionId").equals(u.getString("id")) && x.getInt("isInterest") == 1 && x.getString("activityId").equals(a.getId())).mapToDouble(h -> h.getDouble("integral")).sum();
scoreSum.updateAndGet(v -> new Double((double) (v + (sexScore + (qwScore * 0.5)))));
unionMap.put(a.getName(), sexScore + (qwScore * 0.5));
});
unionMap.put("总分", scoreSum.get());
unionMap.put("分工会", unionMap.getString("unionName"));
resultMap.add(unionMap);
});
activityNameList.add("总分");
return AjaxResult.success(Map.of("label", activityNameList, "score", resultMap));
}
@GetMapping("/getAnnualResults")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public AjaxResult getAnnualResults(Integer year) {
ArrayList<Map> resultMap = new ArrayList<>();
List<NutMap> unionList = dao.listMap(Sqls.create("select * from `union`"));
List<ActivitySchool> activitySchoolList = dao.dao().query(ActivitySchool.class, Cnd.where("YEAR(applyStartTime)", "=", year));
List<String> labelList = activitySchoolList.stream().map(v -> v.getName()).collect(Collectors.toList());
labelList.add(0, "分工会");
unionList.forEach(u -> {
NutMap unionMap = Lang.obj2nutmap(u);
AtomicReference<Double> scoreSum = new AtomicReference<>((double) 0);
activitySchoolList.forEach(x -> {
Sql sql = Sqls.create("""
SELECT sum(integral) as sumScore FROM `activity_results` ar
where ar.activityId = @activityId and ar.unionId = @unionId
""");
sql.setParam("activityId", x.getId());
sql.setParam("unionId", u.getString("id"));
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap scoreMap = (NutMap) sql.getResult();
double score = scoreMap.getDouble("sumScore");
scoreSum.updateAndGet(v -> new Double((v + score)));
unionMap.put(x.getName(), score);
});
unionMap.put("总分", scoreSum.get());
unionMap.put("分工会", unionMap.getString("unionName"));
resultMap.add(unionMap);
});
labelList.add("总分");
return AjaxResult.success(Map.of("label", labelList, "score", resultMap));
}
}
@@ -0,0 +1,584 @@
package com.ruoyi.activity.controller.sports;
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.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.sports.ActivitySchool;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolEvent;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 9:03
*/
@RestController
@RequestMapping("/sports/statisticsExport")
public class ActivityStatisticsTypeExportController {
@Autowired
private BaseService baseService;
@RequestMapping("/getYear8")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public void getYear8(@RequestParam Integer isMenWomen,
@RequestParam Integer year,
HttpServletResponse response) {
List<Map> resultMap = new ArrayList<>();
List<NutMap> unionList = baseService.listMap(Sqls.create("select * from `union`"));
List<ActivitySchool> activityList = baseService.dao().query(ActivitySchool.class, Cnd.where("YEAR(applyStartTime)", "=", year));
List<String> activityIdList = activityList.stream().map(ActivitySchool::getId).collect(Collectors.toList());
List<String> activityNameList = activityList.stream().map(ActivitySchool::getName).collect(Collectors.toList());
List<String> eventIdList = baseService.dao().query(ActivitySchoolEvent.class, Cnd.where("activityId", "in", activityIdList)).stream().map(v -> v.getEventId()).collect(Collectors.toList());
activityNameList.add(0, "分工会");
Sql sql = Sqls.create("""
SELECT
ae.isMenWomen,
ae.isInterest,
ar.integral,
ar.unionId,
ar.activityId
FROM
activity_event ae
LEFT JOIN activity_results ar ON ar.eventId = ae.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("ae.id", "in", eventIdList);
cnd.and("ar.activityId", "in", activityIdList);
sql.setCondition(cnd);
List<NutMap> list = baseService.listMap(sql);
unionList.forEach(u -> {
NutMap unionMap = Lang.obj2nutmap(u);
AtomicReference<Double> scoreSum = new AtomicReference<>((double) 0);
activityList.forEach(a -> {
double sexScore = list.stream().filter(x -> x.getString("unionId").equals(u.getString("id")) && x.getInt("isMenWomen") == isMenWomen && x.getString("activityId").equals(a.getId())).mapToDouble(h -> h.getDouble("integral")).sum();
double qwScore = list.stream().filter(x -> x.getString("unionId").equals(u.getString("id")) && x.getInt("isInterest") == 1 && x.getString("activityId").equals(a.getId())).mapToDouble(h -> h.getDouble("integral")).sum();
scoreSum.updateAndGet(v -> new Double((double) (v + (sexScore + (qwScore * 0.5)))));
unionMap.put(a.getName(), sexScore + (qwScore * 0.5));
});
unionMap.put("总分", scoreSum.get());
unionMap.put("分工会", unionMap.getString("unionName"));
resultMap.add(unionMap);
});
activityNameList.add("总分");
resultMap.sort(Comparator.comparing((Map m) -> (new BigDecimal(m.get("总分").toString()))).reversed());
for (int i = 0; i < resultMap.size(); i++) {
resultMap.get(i).put("名次", i + 1);
}
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("名次", "名次", 20));
activityNameList.forEach(v -> {
entityList.add(new ExcelExportEntity(v, v, 40));
});
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, resultMap);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("年度" + (isMenWomen == 1 ? "男子" : "女子") + "团体总分.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("/getAnnualResults")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public void getAnnualResults(@RequestParam Integer year, HttpServletResponse response) {
ArrayList<Map> resultMap = new ArrayList<>();
List<NutMap> unionList = baseService.listMap(Sqls.create("select * from `union`"));
List<ActivitySchool> activitySchoolList = baseService.dao().query(ActivitySchool.class, Cnd.where("YEAR(applyStartTime)", "=", year));
List<String> labelList = activitySchoolList.stream().map(v -> v.getName()).collect(Collectors.toList());
labelList.add(0, "分工会");
unionList.forEach(u -> {
NutMap unionMap = Lang.obj2nutmap(u);
AtomicReference<Double> scoreSum = new AtomicReference<>((double) 0);
activitySchoolList.forEach(x -> {
Sql sql = Sqls.create("""
SELECT sum(integral) as sumScore FROM `activity_results` ar
where ar.activityId = @activityId and ar.unionId = @unionId
""");
sql.setParam("activityId", x.getId());
sql.setParam("unionId", u.getString("id"));
NutMap scoreMap = baseService.fetch(sql);
double score = scoreMap.getDouble("sumScore");
scoreSum.updateAndGet(v -> new Double((v + score)));
unionMap.put(x.getName(), score);
});
unionMap.put("总分", scoreSum.get());
unionMap.put("分工会", unionMap.getString("unionName"));
resultMap.add(unionMap);
});
labelList.add("总分");
resultMap.sort(Comparator.comparing((Map m) -> (new BigDecimal(m.get("总分").toString()))).reversed());
for (int i = 0; i < resultMap.size(); i++) {
resultMap.get(i).put("名次", i + 1);
}
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("名次", "名次", 20));
labelList.forEach(v -> {
entityList.add(new ExcelExportEntity(v, v, 40));
});
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, resultMap);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("年度团体总分.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("/isMaleFemale")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public void isMaleFemale(@RequestParam String activityId,
@RequestParam Integer sex,
@RequestParam Integer awardsMode,
HttpServletResponse response) {
NutMap map = new NutMap();
List<NutMap> result = new ArrayList<>();
//查询所有的工会
List<NutMap> query = baseService.listMap(Sqls.create("select * from `union`"));
Cnd cndX = Cnd.NEW();
//查询所有的项目
Sql sqlX = Sqls.create("""
SELECT
ev.id,
ev.eventId,
ba.`name` baname,
eve.projectType awardsMode,
eve.allName label,
eve.isMenWomen
FROM
activity_school_event ev
LEFT JOIN activity_event eve ON ev.eventId = eve.id
LEFT JOIN activity_basic_settings ba ON eve.competitionCategory = ba.id $condition
""");
cndX.and("ev.activityId", "=", activityId);
if (awardsMode < 3) {
cndX.and("eve.projectType", "=", awardsMode);
cndX.and("eve.isInterest", "=", false);
cndX.and("eve.isMenWomen", "=", sex == 0 ? 1 : 2);
}
if (awardsMode == 3) {
cndX.and("eve.isInterest", "=", true);
}
if (awardsMode == 4) {
cndX.and(Cnd.exps("eve.isMenWomen", "=", sex == 0 ? 1 : 2).or("eve.isMenWomen", "is", null));
}
cndX.and(new Static("1=1 order by case ba.`name` when '甲组' then 1 when '乙组' then 2 when '丙组' then 3 when '丁组' then 4 when '团体' then 5 end"));
sqlX.setCondition(cndX);
List<Record> eventList = baseService.list(sqlX);
//查询每个工会下每个项目的成绩
query.forEach(v -> {
NutMap nutMap = new NutMap();
//记录总积分
double totalScore = 0;
nutMap.setv("unionname", v.getString("unionName"));
for (Record event : eventList) {
Sql sqlC = Sqls.create("""
SELECT
IF ( sum( integral ) IS NULL, 0, sum( integral )) AS integral,
ev.allName,ev.projectType,abs.`name` AS zb,ev.isInterest
FROM
activity_results ar
LEFT JOIN activity_event ev ON ar.eventId = ev.id
LEFT JOIN activity_basic_settings abs ON abs.id=ev.competitionCategory $condition
""");
Cnd cndC = Cnd.NEW();
if ((awardsMode == 1 && event.getString("awardsMode").equals("1")) || (awardsMode == 2 && event.getString("awardsMode").equals("2"))) {
cndC.and("ev.isInterest", "=", false);
cndC.and("ev.isMenWomen", "=", sex == 0 ? 1 : 2);
} else if (awardsMode == 3) {
cndC.and("ev.isInterest", "=", true);
} else if (awardsMode == 4) {
cndC.and(Cnd.exps("ev.isMenWomen", "=", sex == 0 ? 1 : 2).or("ev.isMenWomen", "is", null));
}
cndC.and("ar.eventId", "=", event.getString("eventid"));
cndC.and("ar.unionid", "=", v.getString("id"));
cndC.and("ar.activityId", "=", activityId);
sqlC.setCondition(cndC);
Double score = 0.0;
List<NutMap> list = baseService.listMap(sqlC);
boolean isInterest = list.get(0).getBoolean("isInterest");
if (list.size() > 0) {
score = list.get(0).getDouble("integral");
}
if (list.get(0).getString("allName") != null) {
if (!isInterest) {
nutMap.setv(list.get(0).getString("allName"), score);
} else {
nutMap.setv(list.get(0).getString("allName"), score / 2);
}
}
totalScore += isInterest ? (score / 2) : score;
if (list.get(0).getString("zb") != null) {
nutMap.setv("projectType", list.get(0).getString("projectType"));
nutMap.setv("zb", list.get(0).getString("zb"));
}
}
nutMap.setv("totalScore", totalScore);
result.add(nutMap);
});
result.sort(Comparator.comparing((Map m) -> (new BigDecimal(m.get("totalScore").toString()))).reversed());
for (int i = 0; i < result.size(); i++) {
result.get(i).put("名次", i + 1);
}
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("名次", "名次", 20));
entityList.add(new ExcelExportEntity("分工会", "unionname", 40));
eventList.forEach(v -> {
entityList.add(new ExcelExportEntity(v.getString("label"), v.getString("label"), 40));
});
entityList.add(new ExcelExportEntity("总分", "totalScore", 40));
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, result);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("分工会" + (sex == 0 ? "男子" : "女子") + "项目积分.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("/isTopEight")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public void isTopEight(@RequestParam String activityId,
@RequestParam Integer sex,
@RequestParam Integer awardsMode, HttpServletResponse response) {
NutMap map = new NutMap();
List<Record> result = new ArrayList<>();
Cnd cndX = Cnd.NEW();
//查询所有的项目
Sql sqlX = Sqls.create("""
SELECT
ev.id,
ev.eventId,
ba.`name` baname,
eve.projectType awardsMode,
eve.allName label
FROM
activity_school_event ev
LEFT JOIN activity_event eve ON ev.eventId = eve.id
LEFT JOIN activity_basic_settings ba ON eve.competitionCategory = ba.id $condition
""");
cndX.and("ev.activityId", "=", activityId);
if (awardsMode == 1) {
cndX.and("eve.isMenWomen", "!=", sex == 0 ? 2 : 1);
cndX.and("eve.projectType", "=", 1);
} else {
cndX.and("eve.projectType", "=", 2);
}
cndX.and(new Static("1=1 order by case ba.`name` when '甲组' then 1 when '乙组' then 2 when '丙组' then 3 when '丁组' then 4 when '团体' then 5 end"));
sqlX.setCondition(cndX);
List<Record> eventList = baseService.list(sqlX);
List<NutMap> nutMaps = new ArrayList<>();
for (int i = 0; i < 8; i++) {
NutMap nutMap = new NutMap();
Sql sqlC = Sqls.create("");
Cnd cnd = Cnd.NEW();
if (awardsMode == 1) {
sqlC = Sqls.create("""
SELECT
CONCAT( apply.userName, '(', apply.activityUnionName, ')' ) username,
ar.integral,
ar.ranking,
eve.allName
FROM
activity_results ar
LEFT JOIN activity_event eve ON ar.eventId = eve.id
LEFT JOIN activity_school_apply apply ON apply.userId = ar.userId
AND ar.activityId = apply.activityId $condition
""");
cnd.and("ar.isTeamPersonal", "=", awardsMode);
cnd.and("apply.sex", "=", sex);
cnd.and("ar.activityId", "=", activityId);
cnd.and("ar.ranking", "=", i + 1);
cnd.groupBy("ar.id");
} else {
sqlC = Sqls.create("""
SELECT
CONCAT(sun.unionName) username,
eve.allName,ar.ranking
FROM
activity_results ar
LEFT JOIN activity_event eve ON ar.eventId = eve.id
LEFT JOIN `union` sun ON sun.id = ar.unionId $condition
""");
cnd.and("ar.isTeamPersonal", "=", awardsMode);
cnd.and("ar.activityId", "=", activityId);
cnd.and("ar.ranking", "=", i + 1);
}
sqlC.setCondition(cnd);
List<Record> list = baseService.list(sqlC);
list.forEach(l -> {
nutMap.setv(l.getString("allName"), l.getString("username"));
});
nutMaps.add(nutMap);
}
for (int i = 0; i < nutMaps.size(); i++) {
nutMaps.get(i).put("名次", i + 1);
}
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("名次", "名次", 20));
eventList.forEach(v -> {
entityList.add(new ExcelExportEntity(v.getString("label"), v.getString("label"), 40));
});
String sex2 = awardsMode == 2 ? "团体" : (sex == 0 ? "男子" : "女子");
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, nutMaps);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(sex2 + "项目前八.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("/isScoreTopEight")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public void isScoreTopEight(@RequestParam String activityId,
@RequestParam Integer sex,
HttpServletResponse response) {
NutMap map = new NutMap();
List<NutMap> result = new ArrayList<>();
Cnd cndX = Cnd.NEW();
//查询所有的项目
Sql sqlX = Sqls.create("""
SELECT
ev.id,
ev.eventId,
ba.`name` baname,
eve.projectType awardsMode,
eve.allName label
FROM
activity_school_event ev
LEFT JOIN activity_event eve ON ev.eventId = eve.id
LEFT JOIN activity_basic_settings ba ON eve.competitionCategory = ba.id $condition
""");
cndX.and("ev.activityId", "=", activityId);
cndX.and(Cnd.exps("eve.isMenWomen", "=", sex == 0 ? 1 : 2).or("eve.isMenWomen", "is", null));
cndX.and(new Static("1=1 order by case ba.`name` when '甲组' then 1 when '乙组' then 2 when '丙组' then 3 when '丁组' then 4 when '团体' then 5 end"));
sqlX.setCondition(cndX);
List<Record> eventList = baseService.list(sqlX);
//查询所有的工会
List<NutMap> query = baseService.listMap(Sqls.create("select * from `union`"));
for (NutMap sys_union : query) {
NutMap nutMap = new NutMap();
//记录总积分
double totalScore = 0;
nutMap.setv("unionname", sys_union.getString("unionName"));
for (Record event : eventList) {
Sql sqlC = Sqls.create("""
SELECT
IF ( sum( integral ) IS NULL, 0, sum( integral )) AS integral,
ev.allName,ev.isInterest
FROM
activity_results ar
LEFT JOIN activity_event ev ON ar.eventId = ev.id $condition
""");
Cnd cndC = Cnd.NEW();
cndC.and(Cnd.exps("ev.isMenWomen", "=", sex == 0 ? 1 : 2).or("ev.isMenWomen", "is", null));
cndC.and("ar.unionid", "=", sys_union.getString("id"));
cndC.and("ar.eventId", "=", event.getString("eventid"));
cndC.and("ar.activityId", "=", activityId);
sqlC.setCondition(cndC);
Double score = 0.0;
List<NutMap> list = baseService.listMap(sqlC);
boolean isInterest = list.get(0).getBoolean("isInterest");
if (list.size() > 0) {
score = list.get(0).getDouble("integral");
}
totalScore += isInterest ? (score / 2) : score;
}
nutMap.setv("totalScore", totalScore);
result.add(nutMap);
}
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("名次", "名次", 20));
entityList.add(new ExcelExportEntity("分工会", "unionname", 40));
entityList.add(new ExcelExportEntity("总分", "totalScore", 40));
result.sort(Comparator.comparing((Map m) -> (new BigDecimal(m.get("totalScore").toString()))).reversed());
for (int i = 0; i < result.size(); i++) {
result.get(i).put("名次", i + 1);
}
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, result);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("分工会" + (sex == 0 ? "" : "") + "子总分.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("/doExcelCj")
@RequiresPermissions("activity:sports:sportsActivityScoreStatistics")
public void doExcelCj(@RequestParam String activityId,
@RequestParam String unionId,
HttpServletResponse response) throws IOException {
Sql sql = Sqls.create("""
SELECT
un.unionCode,
un.unionName,
us.loginName,
us.userName,
us.sex,
eve.projectCode,
abs.`name` competitionCategoryName,
eve.allName,
ar.integral,
CEILING(
IF
( us.loginName IS NOT NULL, ar.integral, ar.integral / 2 )) jf,
ar.ranking
FROM
activity_results ar
LEFT JOIN activity_event eve ON ar.eventId = eve.id
LEFT JOIN activity_basic_settings abs ON abs.id = eve.competitionCategory
LEFT JOIN activity_school_apply apply ON apply.userId = ar.userId
AND ar.activityId = apply.activityId
LEFT JOIN `union` un ON un.id = ar.unionId
LEFT JOIN `user` us ON us.userId = ar.userId
$condition
ORDER BY
un.unionCode ASC,
us.sex DESC,
FIELD( abs.`name`, '甲组', '乙组', '丙组', '丁组', '团体' ) ASC
""");
Cnd cnd = Cnd.NEW();
cnd.and("ar.activityId", "=", activityId);
cnd.andEX("ar.unionId", "=", unionId);
cnd.groupBy("ar.id");
sql.setCondition(cnd);
List<NutMap> list = baseService.listMap(sql);
list.forEach(v -> {
if (StrUtil.isNotBlank(v.getString("sex"))) {
v.setv("sex", v.getInt("sex") == 0 ? "" : "");
} else {
v.setv("sex", "团体");
}
});
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("分工会代码", "unionCode", 40));
entityList.add(new ExcelExportEntity("分工会名称", "unionName", 20));
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
entityList.add(new ExcelExportEntity("姓名", "userName", 20));
entityList.add(new ExcelExportEntity("性别", "sex", 20));
entityList.add(new ExcelExportEntity("项目代码", "projectCode", 20));
entityList.add(new ExcelExportEntity("组别", "competitionCategoryName", 20));
entityList.add(new ExcelExportEntity("项目名称", "allName", 40));
entityList.add(new ExcelExportEntity("成绩", "integral", 20));
entityList.add(new ExcelExportEntity("名次", "ranking", 20));
entityList.add(new ExcelExportEntity("积分", "jf", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("成绩名单.xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
}
}
@@ -0,0 +1,215 @@
package com.ruoyi.activity.controller.sports;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnion;
import com.ruoyi.activity.service.basic.ActivityEventService;
import com.ruoyi.activity.service.sports.ActivitySchoolService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteClubService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* TODO
* 体育活动公共
*
* @Author zhf
* @Date 2023/1/31 14:48
*/
@RestController
@RequestMapping("/sports/common")
public class SportsActivityCommonController {
@Autowired
private RemoteClubService remoteClubService;
@Autowired
private ActivitySchoolService activitySchoolService;
@Autowired
private ActivityEventService activityEventService;
/**
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @description查询所有体育活动
* @author zhf
* @date 2023/1/31 14:47
*/
@GetMapping("/getActivitys")
public AjaxResult getActivitys(Integer year) {
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin,A06")) {
if (AuthUtil.hasRole("H04")) {
cnd.and("belongUnionId", "=", SecurityUtils.getUnionId());
}
if (AuthUtil.hasRole("H02")) {
List<NutMap> nutMaps = remoteClubService.getClubsByRole().getData();
List<String> stids = nutMaps.stream().map(v -> v.getString("stid")).collect(Collectors.toList());
cnd.and("belongClubId", "in", stids);
}
}
cnd.andEX("YEAR(applyEndTime)", "=", year);
return AjaxResult.success(activitySchoolService.query(cnd));
}
/**
* 获取活动项目
*
* @return
*/
@GetMapping("/getEvents")
public AjaxResult getEvents(Integer type) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
ae.*
FROM
activity_event ae
LEFT JOIN activity_basic_settings ba ON ae.competitionCategory = ba.id
$condition
""");
cnd.and("ae.whetherEnable", "=", 1);
if (type != null && type == 1) {
cnd.and("ae.projectType", "=", 2);
} else if (type != null && type == 3) {
cnd.and("ae.projectType", "=", 1);
}
cnd.and(new Static("""
1=1
ORDER BY
ae.isMenWomen DESC,
CASE
ba.`name`
WHEN '甲组' THEN
1
WHEN '乙组' THEN
2
WHEN '丙组' THEN
3
WHEN '丁组' THEN
4
WHEN '团体' THEN
5
END
"""));
sql.setCondition(cnd);
return AjaxResult.success(activityEventService.listMap(sql));
}
@GetMapping("/getEventData")
public AjaxResult getEventData(String id) {
return AjaxResult.success(activityEventService.fetch(id));
}
@GetMapping("/findOne")
public AjaxResult findOne(String id) {
Sql sql = Sqls.create("""
SELECT
act.*,
plan.`name` plan
FROM
activity_school act
LEFT JOIN activity_plan plan ON act.planId = plan.id
WHERE
act.id = @id
""").setParam("id", id);
NutMap nutMap = activitySchoolService.listMap(sql).get(0);
Sql eventSql = Sqls.create("""
SELECT
ase.*,
ae.allName,
ae.projectType,
sch.applyType
FROM
activity_school_event ase
LEFT JOIN activity_event ae ON ae.id = ase.eventId
LEFT JOIN activity_school sch ON sch.id=ase.activityId
WHERE
activityId = @activityId
""").setParam("activityId", id);
List<NutMap> eventMap = activitySchoolService.listMap(eventSql);
nutMap.setv("events", eventMap);
Sql sql1 = Sqls.create("""
SELECT
app.*,
team.`name` team,
unit.dept_name unitname
FROM
activity_school_apply app
LEFT JOIN activity_school_team team ON app.teamId = team.id
LEFT JOIN dept unit ON app.unitId = unit.dept_id
WHERE
app.activityId = @id
ORDER BY
app.identity DESC,
team.location ASC,
app.sex
""").setParam("id", id);
if (!AuthUtil.hasAnyRoles("admin,A06") && AuthUtil.hasRole("H04")) {
sql1.setVar("union", " AND app.unionId = '" + SecurityUtils.getUnionId() + "' ");
}
List<NutMap> applies = activitySchoolService.listMap(sql1);
List<Integer> applyWay = Json.fromJsonAsList(Integer.class, nutMap.getString("applyWay"));
if (applyWay.stream().anyMatch(v -> v.equals(2))) {
List<NutMap> apply = new ArrayList();
Cnd unionCnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin,A06") && AuthUtil.hasRole("H04")) {
unionCnd.and("id", "=", SecurityUtils.getUnionId());
}
List<ActivityBasicUnion> unions = activitySchoolService.dao().query(ActivityBasicUnion.class, unionCnd);
for (ActivityBasicUnion union : unions) {
String union_id = union.getId();
NutMap map = new NutMap();
List<NutMap> applyList = applies.stream().filter(v -> {
return v.getString("unionId").equals(union_id);
}).collect(Collectors.toList());
map.setv("id", union_id);
map.setv("unionname", union.getUnionName());
map.setv("unioncode", union.getUnionCode());
map.setv("num", applyList.size());
map.setv("apply", applyList);
apply.add(map);
}
nutMap.setv("apply", apply);
}
return AjaxResult.success().put("data", nutMap);
}
}
@@ -0,0 +1,231 @@
package com.ruoyi.activity.controller.sports.mobile;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnion;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnit;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.activity.api.domain.sports.ActivitySchool;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolApply;
import com.ruoyi.activity.api.domain.sports.ActivitySchoolTeam;
import com.ruoyi.activity.param.ActivityMobileSignUpParam;
import com.ruoyi.activity.service.sports.mobile.MobileActivityApplyService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.annotation.RequiresRoles;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @ClassName MobileActivityApplyController
* @Description TODO
* @Author zhf
* @Date 2023/3/3 10:35
*/
@RestController
@RequestMapping("/mobile/sports/activityApply")
public class MobileActivityApplyController {
@Autowired
private MobileActivityApplyService mobileActivityApplyService;
@DeleteMapping("/doDeleteApply")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult doDeleteApply(@RequestParam String activityId,
@RequestParam String userId,
@RequestParam String eventId) {
mobileActivityApplyService.doDeleteApply(activityId, userId, eventId);
return AjaxResult.success();
}
@GetMapping("/getActivityData")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult getActivityData(String activityId) {
Sql sql = Sqls.create("""
SELECT
asa.*
FROM
`activity_school_apply` asa
LEFT JOIN activity_school_event ase ON ase.eventId = asa.eventId
AND ase.activityId = asa.activityId
AND ase.restrictRegNumber > 0
WHERE
asa.activityId=@activityId and asa.userId=@userId
GROUP BY asa.id
""").setParam("activityId",activityId).setParam("userId",SecurityUtils.getUserId());
List<NutMap> query = mobileActivityApplyService.listMap(sql);
return AjaxResult.success(query);
}
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 查询该小队的报名人
*/
@GetMapping("/getTeamUserData")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult getTeamUserData(@RequestParam(required = false) String teamId,
@RequestParam String activityId,
@RequestParam String eventId,
@RequestParam(required = false) Integer applyType) {
ActivityBasicUnit basicUnit = mobileActivityApplyService.dao().fetch(ActivityBasicUnit.class, Cnd.where("dept_id", "=", SecurityUtils.getDeptId()));
if (Lang.isNotEmpty(basicUnit)) {
ActivityBasicUnion basicUnion = mobileActivityApplyService.dao().fetch(ActivityBasicUnion.class, basicUnit.getUnionId());
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT * FROM activity_school_apply $condition
""");
cnd.andEX("teamId", "=", teamId);
cnd.andEX("status", "=", 2);
cnd.andEX("activityId", "=", activityId);
cnd.andEX("eventId", "=", eventId);
if (applyType != null && applyType != 3) {
cnd.andEX("activityUnionId", "=", basicUnion.getId());
}
sql.setCondition(cnd);
return AjaxResult.success(mobileActivityApplyService.listMap(sql));
}
return AjaxResult.error("您活动工会存在问题,请联系管理员!");
}
@PostMapping("/doActivityUser")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult doActivityUser(@RequestParam String activityId,
@RequestParam String eventId,
@RequestParam(required = false) String teamId,
@RequestParam(required = false) String teamName) {
mobileActivityApplyService.doActivityUser(activityId, eventId, teamId, teamName);
return AjaxResult.success();
}
@PostMapping("/doTeamSignUp")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult doTeamSignUp(@RequestBody ActivityMobileSignUpParam param) {
// mobileActivityApplyService.doTeamSignUp(activityId,userIds, eventId, teamId, teamName);
mobileActivityApplyService.doTeamSignUp(param.getActivityId(),param.getUserIds(),param.getEventId(),param.getTeamId(),param.getTeamName());
return AjaxResult.success();
}
/**
* @param activityId
* @param eventId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description根据活动加项目查找小队
*/
@GetMapping("/getActivityTeamId")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult getActivityTeamId(String activityId, String eventId) {
return AjaxResult.success(mobileActivityApplyService.dao().query(ActivitySchoolTeam.class, Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId).asc("location")));
}
@GetMapping("/searchNoRegisterUser")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult searchNoRegisterUser(@RequestParam(required = false) String searchKey,
@RequestParam(required = false) String activityId,
@RequestParam(required = false) Boolean isTeamSignUp,
@RequestParam(required = false) String isMenWomen,String eventId) {
ActivitySchool activitySchool = mobileActivityApplyService.dao().fetch(ActivitySchool.class, Cnd.where("id", "=", activityId));
Sql sql = Sqls.create("""
SELECT
userId id,
loginName,
userName,
sex,
deptName AS unitName,
unionName
FROM
`user`
$condition
""");
String unionId = SecurityUtils.getUnionId();
Cnd cnd = Cnd.NEW();
if (!isTeamSignUp){
cnd.andEX("unionId", "=", unionId);
}
if (StrUtil.isNotBlank(isMenWomen)){
cnd.andEX("sex", "=", isMenWomen.equals("1")?"0":"1");
}
if (Lang.isNotEmpty(searchKey)) {
cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim())));
}
cnd.and(new Static("""
userId not in (SELECT userId FROM activity_school_apply WHERE activityId = '%s' and eventId='%s')
""".formatted(activityId,eventId)));
if (activitySchool.getActivityGroupId() != null) {
cnd.and(new Static("""
userId IN ( SELECT userId FROM activity_user_scope WHERE groupId IN ( SELECT activityGroupId FROM activity_school WHERE id = '%s' AND activityGroupId IS NOT NULL ) )
""".formatted(activityId)));
}
sql.setCondition(cnd);
return AjaxResult.success(mobileActivityApplyService.listPageMap(1, 10, sql));
}
@GetMapping("/selectRegisterList")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult selectRegisterList(String activityId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
userId AS id,
username userName,
loginname loginName,
unitname unitName,
sex,
activityUnionName unionName,
activityUnionId unionId,
eventId,
applyUser
FROM
activity_school_apply
$condition
""");
cnd.and("activityId", "=", activityId);
sql.setCondition(cnd);
List<NutMap> list = mobileActivityApplyService.listMap(sql);
return AjaxResult.success(list);
}
@GetMapping("/findActivityData")
@RequiresRoles(value = {"admin", "common"}, logical = Logical.OR)
public AjaxResult findActivityData(String activityId,String projectTypeCode){
if ("50004".equals(projectTypeCode)){
ActivitySchool school = mobileActivityApplyService.dao().fetch(ActivitySchool.class, activityId);
return AjaxResult.success(school);
}else{
ActivityTissue tissue = mobileActivityApplyService.dao().fetch(ActivityTissue.class, activityId);
return AjaxResult.success(tissue);
}
}
}
@@ -0,0 +1,85 @@
package com.ruoyi.activity.controller.trainSignUp;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpActivity;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUser;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/1/4
* @Description 新建活动
*/
@RestController
@RequestMapping("/trainSignUp/activityAdd")
public class TrainSignUpActivityAddController {
@Autowired
private Dao dao;
private TrainSignUpActivityService trainSignUpActivityManageService;
@Autowired
public TrainSignUpActivityAddController(TrainSignUpActivityService trainSignUpActivityService) {
this.trainSignUpActivityManageService = trainSignUpActivityService;
}
@PostMapping("doHandle")
@RequiresPermissions("activity:trainSignUp:activityAdd")
public AjaxResult doHandle(@RequestBody TrainSignUpActivity activity) {
if (StrUtil.isBlank(activity.getId())) {
trainSignUpActivityManageService.add(activity, null);
} else {
trainSignUpActivityManageService.edit(activity);
}
return AjaxResult.success();
}
@GetMapping("getUnionLimit")
@RequiresPermissions("activity:trainSignUp:activityAdd")
public AjaxResult getUnionLimit(String activityScopeId) {
Sql sql = Sqls.create("""
SELECT
gh.id,
gh.unionName as unionname,
gh.unionCode as unioncode,
(select count(1) from `user` where unionId = gh.id $cnd) as teacherCount,
0 as ratio,
0 as limitCount
FROM
`union` gh
order by gh.unionCode
""");
if (StrUtil.isNotBlank(activityScopeId)) {
sql.setVar("cnd", "AND userId in (select userId from activity_user_scope where groupId = '" + activityScopeId + "')");
}
List<NutMap> nutMaps = trainSignUpActivityManageService.listMap(sql);
return AjaxResult.success(nutMaps);
}
@GetMapping("getRegisterUserCount")
@RequiresPermissions("activity:trainSignUp:activityAdd")
public AjaxResult getRegisterUserCount(String courseId) {
//已报人数
int count = dao.count(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId));
return AjaxResult.success(count);
}
@GetMapping("getHistoricalActList")
@RequiresPermissions("activity:trainSignUp:activityAdd")
public Object getHistoricalActList() {
List<TrainSignUpActivity> query = dao.query(TrainSignUpActivity.class, Cnd.NEW().desc("activityStartTime"));
return AjaxResult.success(query);
}
}
@@ -0,0 +1,132 @@
package com.ruoyi.activity.controller.trainSignUp;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpActivity;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpActivityCourse;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpType;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUser;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteDictService;
import com.ruoyi.system.api.domain.SysDictData;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/4
* @Description 品牌活动 报名
*/
@RestController
@RequestMapping("/trainSignUp/apply")
public class TrainSignUpActivityApplyController {
@Autowired
private Dao dao;
@Autowired
private TrainSignUpActivityService trainSignUpActivityService;
@Autowired
private RemoteDictService remoteDictService;
@PostMapping("activityData")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult activityData(@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "activityType", required = false) Integer activityType) {
Cnd cnd = Cnd.NEW();
cnd.andEX("`year`", "=", year);
cnd.and("isDisabled", "=", false);
//查询报名中
if (activityType == 2) {
cnd.and(new Static("now() > activitySignUpStartTime and now() < activitySignUpEndTime"));
}//查询已结束的
else if (activityType == 3) {
cnd.and(new Static("now() > activityEndTime"));
}
List<TrainSignUpActivity> trainSignUpActivities = trainSignUpActivityService.query(cnd);
List<SysDictData> trainSignUpTypeList = remoteDictService.dictType("trainSignUpType").getData();
Map<String, String> trainSignUpTypeMap = trainSignUpTypeList.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
trainSignUpActivities.forEach(v -> v.setTrainType(trainSignUpTypeMap.get(v.getTrainType())));
return AjaxResult.success(trainSignUpActivities);
}
@PostMapping("pageData")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "courseTypeId", required = false) String courseTypeId,
@RequestParam(value = "activityId", required = false) String activityId) {
Sql sql = Sqls.create("""
SELECT
tsuc.id,
tsuc.activityId,
tsuc.courseName,
tsuc.coursePeopleNumber,
tsuc.courseLocation,
tsuc.courseType,
tsuc.courseLocationCoordinates,
tsuc.courseReservedNumber,
tsuc.courseInstructor,
tsuc.campus,
tsuc.conditionStructureId,
tsuc.unionLimit,
tsuc.isMobileSign,
tsuc.signType,
tsuc.isReceiveGift,
tsuc.giftType,
type.lxname
FROM
`train_sign_up_course` tsuc
LEFT JOIN train_sign_up_type type ON type.id = tsuc.courseType
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("type.id","=",courseTypeId);
cnd.and("tsuc.activityId","=",activityId);
cnd.asc("type.code");
sql.setCondition(cnd);
Pagination pagination = trainSignUpActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> courseList = pagination.getList();
courseList.forEach(c -> {
List<TrainSignUpActivityCourse> signUpActivityCourses = trainSignUpActivityService.dao().query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", c.getString("id")));
c.put("courseTimeList", signUpActivityCourses);
//已报人数
List<TrainSignUpUser> signUpUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getString("id")));
c.put("hasRegisterNum", signUpUsers.size());
//当前用户是否报过
c.put("isSign",trainSignUpActivityService.isSignCourseByUser(c.getString("id"), SecurityUtils.getUserId()));
//这个类型的班还能不能报
boolean signCourse = trainSignUpActivityService.isSignCourse(c.getString("id"), activityId);
c.put("canSignThisCourseType", signCourse);
});
return AjaxResult.success(pagination);
}
@GetMapping("getCourseTime")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult getCourseTime(String id) {
List<TrainSignUpActivityCourse> courses = trainSignUpActivityService.dao().query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", id).asc("courseStartTime"));
return AjaxResult.success(courses);
}
}
@@ -0,0 +1,133 @@
package com.ruoyi.activity.controller.trainSignUp;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.trainSignUp.*;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.MatchConditionStructure;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/6
* @Description
*/
@RestController
@RequestMapping("/trainSignUp/activityManage")
public class TrainSignUpActivityManageController {
@Autowired
private Dao dao;
private TrainSignUpActivityService trainSignUpActivityManageService;
@Autowired
public TrainSignUpActivityManageController(TrainSignUpActivityService trainSignUpActivityService) {
this.trainSignUpActivityManageService = trainSignUpActivityService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:trainSignUp:activityManage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "activityName", required = false) String activityName) {
Cnd cnd = Cnd.NEW();
cnd.andEX("year", "=", year);
cnd.and(Cnd.likeEX("activityName", activityName));
if (!AuthUtil.hasAnyRoles("admin")) {
cnd.and("userId", "=", SecurityUtils.getUserId());
}
cnd.orderBy("ctime", "desc");
Pagination pagination = trainSignUpActivityManageService.pageData(pageForm, cnd);
return AjaxResult.success(pagination);
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("activity:trainSignUp:activityManage")
@Transactional(rollbackFor = Exception.class)
public AjaxResult doDelete(@PathVariable String id) {
trainSignUpActivityManageService.delete(id);
dao.clear(TrainSignUpCourse.class, Cnd.where("activityId", "=", id));
dao.clear(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", id));
dao.clear(TrainSignUpUser.class, Cnd.where("activityId", "=", id));
dao.clear(TrainSignUpUserCourse.class, Cnd.where("activityId", "=", id));
dao.clear(TrainSignUpActivity.class, Cnd.where("id", "=", id));
dao.clear(TrainSignUpTypeLimit.class, Cnd.where("activityId", "=", id));
return AjaxResult.success();
}
@PostMapping("activityStatusChange")
@RequiresPermissions("activity:trainSignUp:activityManage")
public AjaxResult activityStatusChange(@RequestBody TrainSignUpActivity activity) {
trainSignUpActivityManageService.updateActivityStatus(activity);
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
@RequiresPermissions("activity:trainSignUp:activityManage")
public AjaxResult findOne(@PathVariable String id) {
NutMap dataMap = trainSignUpActivityManageService.findOne(id, null);
String activityStartTime = dataMap.getString("activityStartTime");
String activityEndTime = dataMap.getString("activityEndTime");
dataMap.put("activityTime", List.of(activityStartTime, activityEndTime));
String activitySignUpStartTime = dataMap.getString("activitySignUpStartTime");
String activitySignUpEndTime = dataMap.getString("activitySignUpEndTime");
dataMap.put("activitySignTime", List.of(activitySignUpStartTime, activitySignUpEndTime));
List<NutMap> courseList = dataMap.getList("courseList", NutMap.class);
//查询所有的课程类型
List<TrainSignUpType> trainSignUpTypeList = dao.query(TrainSignUpType.class, Cnd.NEW());
Map<String, String> typeMap = trainSignUpTypeList.stream().collect(Collectors.toMap(TrainSignUpType::getId, TrainSignUpType::getLxname));
courseList.forEach(v -> {
if (StrUtil.isNotBlank(v.getString("conditionStructureId"))) {
MatchConditionStructure conditionStructure = dao.fetch(MatchConditionStructure.class, v.getString("conditionStructureId"));
dao.fetchLinks(conditionStructure, "conditions");
v.put("conditionStructure", conditionStructure);
}
List<NutMap> courseTimeList = v.getList("courseTimeList", NutMap.class);
//选择课程日期 下拉框
List<String> setUpCourseData = courseTimeList.stream().map(cd -> cd.getString("courseDate")).distinct().collect(Collectors.toList());
v.put("setUpCourseData", setUpCourseData);
courseTimeList.forEach(ct -> {
String courseStartTime = DateUtil.format(ct.getTime("courseStartTime"), "HH:mm");
String courseEndTime = DateUtil.format(ct.getTime("courseEndTime"), "HH:mm");
ct.put("courseStartTime", courseStartTime);
ct.put("courseEndTime", courseEndTime);
});
v.put("courseTypeName", typeMap.get(v.getString("courseType")));
});
return AjaxResult.success(dataMap);
}
@GetMapping("activityList")
public AjaxResult activityList(Integer year) {
List<TrainSignUpActivity> list = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activitySignUpStartTime"));
return AjaxResult.success(list);
}
}
@@ -0,0 +1,164 @@
package com.ruoyi.activity.controller.trainSignUp;
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.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.activity.api.domain.trainSignUp.TrainMobileSignColumn;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpCourse;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpType;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityStatisticsService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysDictData;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @Author JyuHsin
* @Date 2023/1/6
* @Description
*/
@RestController
@RequestMapping("/trainSignUp/signUpStatistics")
public class TrainSignUpActivityStatisticsController {
@Autowired
private Dao dao;
private TrainSignUpActivityStatisticsService trainSignUpActivityStatisticsService;
@Autowired
public TrainSignUpActivityStatisticsController(TrainSignUpActivityStatisticsService trainSignUpActivityStatisticsService) {
this.trainSignUpActivityStatisticsService = trainSignUpActivityStatisticsService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:trainSignUp:signUpStatistics")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "activityId", required = false) String activityId) {
Pagination pagination = trainSignUpActivityStatisticsService.pageData(pageForm, activityId);
return AjaxResult.success(pagination);
}
@GetMapping("registerUserList")
@RequiresPermissions("activity:trainSignUp:signUpStatistics")
public AjaxResult registerUserList(String courseId) {
List<NutMap> nutMaps = trainSignUpActivityStatisticsService.registerUserList(courseId);
return AjaxResult.success(nutMaps);
}
@GetMapping("getSignInfo")
@RequiresPermissions("activity:trainSignUp:signUpStatistics")
public AjaxResult getSignInfo(String courseId) {
Map<String, List<NutMap>> signInfo = trainSignUpActivityStatisticsService.getSignInfo(courseId);
return AjaxResult.success(signInfo);
}
@RequestMapping("exportSignUser")
public void exportSignUser(String activityId, HttpServletResponse response) throws IOException {
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode("报名人员.zip", StandardCharsets.UTF_8));
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("性别", "sex", 20));
entityList.add(new ExcelExportEntity("单位", "unitname", 30));
entityList.add(new ExcelExportEntity("分工会", "unionname", 35));
//entityList.add(new ExcelExportEntity("手机号", "mobile", 30));
List<NutMap> userList = trainSignUpActivityStatisticsService.baoMingUserList(activityId);
List<TrainSignUpCourse> courseList = dao.query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activityId));
Map<String, TrainSignUpCourse> courseMap = courseList.stream().collect(Collectors.toMap(o -> o.getId(), o -> o));
//按校区分组
Map<String, List<NutMap>> campus = userList.stream().collect(Collectors.groupingBy(o -> o.getString("campus")));
//查询所有校区
DynamicDataSourceContextHolder.push("system");
List<SysDictData> dictDataList = dao.query(SysDictData.class, Cnd.where("dict_type", "=", "campus"));
Map<String, String> dictDataMap = dictDataList.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
DynamicDataSourceContextHolder.clear();
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
campus.forEach((key, value) -> {
Map<String, List<NutMap>> userListMap = value.stream().collect(Collectors.groupingBy(v -> v.getString("courseId")));
Workbook workbook = new XSSFWorkbook();
userListMap.forEach((k, v) -> {
//查询课程
TrainSignUpCourse course = courseMap.get(k);
//查询课程类型
TrainSignUpType trainSignUpType = dao.fetch(TrainSignUpType.class, Cnd.where("id", "=", course.getCourseType()));
if(trainSignUpType != null) {
dao.fetchLinks(trainSignUpType, "^trainMobileSignColumnList$");
ExcelExportService service = new ExcelExportService();
ExportParams userExportParams = new ExportParams();
userExportParams.setTitle(course.getCourseName());
userExportParams.setSheetName(course.getCourseName());
userExportParams.setType(ExcelType.XSSF);
List<ExcelExportEntity> currentEntities = new ArrayList<>();
currentEntities.addAll(entityList);
//将课程类型配置的移动端动态字段添加到excel列中
List<TrainMobileSignColumn> trainMobileSignColumnList = trainSignUpType.getTrainMobileSignColumnList();
if (trainMobileSignColumnList != null && !trainMobileSignColumnList.isEmpty()) {
trainMobileSignColumnList.forEach(item -> {
currentEntities.add(new ExcelExportEntity(item.getColumnName(), item.getColumnCode(), 20));
});
}
for (NutMap userSignData : v) {
String mobileColumnsValueStr = userSignData.getString("mobileColumnsValue");
if (StrUtil.isNotBlank(mobileColumnsValueStr)) {
List<NutMap> mobileColumnsValue = Json.fromJsonAsList(NutMap.class, mobileColumnsValueStr);
for (NutMap cv : mobileColumnsValue) {
if (cv.getString("columnFormType") != null && !cv.getString("columnFormType").equals("FILE")) {
userSignData.addv(cv.getString("columnCode"), cv.getString("columnValue"));
}
}
}
}
service.createSheetForMap(workbook, userExportParams, currentEntities, v);
}
});
try {
zipOutputStream.putNextEntry(new ZipEntry(dictDataMap.get(key) + "报名人员.xlsx"));
workbook.write(zipOutputStream);
zipOutputStream.closeEntry();
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
});
zipOutputStream.flush();
zipOutputStream.close();
}
}
@@ -0,0 +1,137 @@
package com.ruoyi.activity.controller.trainSignUp;
import cn.hutool.core.util.EnumUtil;
import com.ruoyi.activity.api.domain.trainSignUp.TrainMobileSignColumn;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpType;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpTypeService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.annotation.ColType;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/1/4
* @Description 品牌活动类型管理
*/
@RestController
@RequestMapping("/trainSignUp/type")
public class TrainSignUpTypeController {
@Autowired
private Dao dao;
private TrainSignUpTypeService trainSignUpTypeService;
@Autowired
public TrainSignUpTypeController(TrainSignUpTypeService trainSignUpTypeService) {
this.trainSignUpTypeService = trainSignUpTypeService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "lxname", required = false) String lxname) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
select * from train_sign_up_type $condition
""");
if (Strings.isNotBlank(lxname)) {
cnd.and("lxname", "like", "%" + lxname + "%");
}
cnd.asc("xh");
sql.setCondition(cnd);
Pagination pagination = trainSignUpTypeService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
list.stream().forEach(item -> {
Cnd c = Cnd.NEW();
c.and("typeId", "=", item.getString("id"));
c.asc("columnIndex");
List<TrainMobileSignColumn> signColumns = dao.query(TrainMobileSignColumn.class, c);
item.put("trainMobileSignColumnList", signColumns);
});
return AjaxResult.success(pagination);
}
@PostMapping("doAdd")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult doAdd(@RequestBody TrainSignUpType type) {
int count = dao.count(TrainSignUpType.class, Cnd.where("code", "=", type.getCode()));
if (count > 0) {
return AjaxResult.error("编码重复!");
}
type.setId(R.UU32());
int totalCount = dao.count(TrainSignUpType.class);
type.setXh(totalCount + 1);
dao.insertWith(type, "trainMobileSignColumnList");
return AjaxResult.success();
}
@PostMapping("doEdit")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult doEdit(@RequestBody TrainSignUpType type) {
int count = dao.count(TrainSignUpType.class, Cnd.where("code", "=", type.getCode()).and("id", "!=", type.getId()));
if (count > 0) {
return AjaxResult.error("编码重复");
}
dao.update(type);
dao.clear(TrainMobileSignColumn.class, Cnd.where("typeId", "=", type.getId()));
dao.insertLinks(type, "trainMobileSignColumnList");
return AjaxResult.success();
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
public AjaxResult doDelete(@PathVariable String id) {
dao.clear(TrainSignUpType.class, Cnd.where("id", "=", id));
dao.clear(TrainMobileSignColumn.class, Cnd.where("typeId", "=", id));
return AjaxResult.success();
}
@PostMapping("rowChange")
@RequiresPermissions("activity:trainSignUp:trainSignUpType")
@Transactional(rollbackFor = Exception.class)
public AjaxResult rowChange(String id, Integer xh, boolean toDown) {
if (toDown) {
TrainSignUpType next = dao.fetch(TrainSignUpType.class, Cnd.where("xh", "=", xh + 1));
next.setXh(next.getXh() - 1);
dao.update(next);
dao.update(TrainSignUpType.class, Chain.make("xh", xh + 1), Cnd.where("id", "=", id));
} else {
TrainSignUpType pre = dao.fetch(TrainSignUpType.class, Cnd.where("xh", "=", xh - 1));
pre.setXh(pre.getXh() + 1);
dao.update(pre);
dao.update(TrainSignUpType.class, Chain.make("xh", xh - 1), Cnd.where("id", "=", id));
}
return AjaxResult.success();
}
@GetMapping("getAllType")
public AjaxResult getAllType(String id) {
List<TrainSignUpType> list = dao.query(TrainSignUpType.class, Cnd.NEW().andEX("id", "=", id).asc("xh"));
dao.fetchLinks(list, "trainMobileSignColumnList", Cnd.NEW().asc("columnIndex"));
return AjaxResult.success(list);
}
@GetMapping("getColumnType")
public AjaxResult getColumnType() {
List<String> names = EnumUtil.getNames(ColType.class);
names.add("JSON");
return AjaxResult.success(names);
}
}
@@ -0,0 +1,138 @@
package com.ruoyi.activity.controller.trainSignUp;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpActivity;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpActivityCourse;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUser;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUserCourse;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityStatisticsService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/1/6
* @Description
*/
@RestController
@RequestMapping("/trainSignUp/userAdjust")
public class TrainSignUpUserAdjustController {
@Autowired
private Dao dao;
private TrainSignUpActivityStatisticsService trainSignUpActivityStatisticsService;
@Autowired
public TrainSignUpUserAdjustController(TrainSignUpActivityStatisticsService trainSignUpActivityStatisticsService) {
this.trainSignUpActivityStatisticsService = trainSignUpActivityStatisticsService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:trainSignUp:userAdjust")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "activityId", required = false) String activityId) {
Pagination pagination = trainSignUpActivityStatisticsService.pageData(pageForm, activityId);
return AjaxResult.success(pagination);
}
@GetMapping("activityList")
public AjaxResult activityList(Integer year) {
List<TrainSignUpActivity> list = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).andEX("isDisabled", "=", false).desc("activitySignUpStartTime"));
return AjaxResult.success(list);
}
@GetMapping("getCourse")
@RequiresPermissions("activity:trainSignUp:userAdjust")
public AjaxResult getCourse(String activityId) {
Sql sql = Sqls.create("""
SELECT
tsuc.id,
tsuc.courseName,
tsuc.coursePeopleNumber,
tsuc.courseType,
tsuc.courseLocation,
tsuc.courseInstructor,
tsuc.courseReservedNumber,
( SELECT count( 1 ) FROM train_sign_up_user WHERE courseId = tsuc.id ) registerNum
FROM
`train_sign_up_course` tsuc
WHERE
tsuc.activityId = @activityId
ORDER BY courseName asc
""");
sql.setParam("activityId", activityId);
List list = trainSignUpActivityStatisticsService.listMap(sql);
return AjaxResult.success(list);
}
@GetMapping("registerUserList")
@RequiresPermissions("activity:trainSignUp:userAdjust")
public AjaxResult registerUserList(String courseId, String unionId, String unitId, String searchName, String searchKeyword) {
List<NutMap> nutMaps = trainSignUpActivityStatisticsService.registerUserList(courseId, unionId, unitId, searchName, searchKeyword);
return AjaxResult.success(nutMaps);
}
@GetMapping("adjust")
@RequiresPermissions("activity:trainSignUp:userAdjust")
public AjaxResult adjust(String activityId, String oldCourseId, String newCourseId, Long userId) {
Cnd oldCnd = Cnd.where("activityId", "=", activityId)
.and("courseId", "=", oldCourseId).and("userId", "=", userId);
Cnd newCnd = Cnd.where("activityId", "=", activityId)
.and("courseId", "=", newCourseId).and("userId", "=", userId);
//旧的报名信息
TrainSignUpUser oldTrainSignUpUser = dao.fetch(TrainSignUpUser.class, oldCnd);
oldTrainSignUpUser.setCourseId(newCourseId);
oldTrainSignUpUser.setSignUpTime(DateUtil.date());
dao.update(oldTrainSignUpUser);
//新的课程的信息,上课时间
List<TrainSignUpActivityCourse> activityCourseList = dao.query(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", activityId)
.and("courseId", "=", newCourseId));
//先清楚旧的信息
dao.clear(TrainSignUpUserCourse.class, oldCnd);
//添加新的信息
List<TrainSignUpUserCourse> trainSignUpUserCourseList = new ArrayList<>();
activityCourseList.stream().forEach(item -> {
TrainSignUpUserCourse course = new TrainSignUpUserCourse();
course.setActivityCourseId(activityId);
course.setCourseId(newCourseId);
course.setUserId(userId);
course.setCourseStartTime(item.getCourseStartTime());
course.setCourseEndTime(item.getCourseEndTime());
course.setActivityCourseId(item.getId());
trainSignUpUserCourseList.add(course);
});
dao.insert(trainSignUpUserCourseList);
return AjaxResult.success();
}
@GetMapping("deleteSignUser")
@RequiresPermissions("activity:trainSignUp:userAdjust")
public AjaxResult deleteSignUser(String activityId, String courseId, String userId) {
Cnd cnd = Cnd.NEW();
cnd.and("activityId", "=", activityId);
cnd.and("courseId", "=", courseId);
cnd.and("userId", "=", userId);
dao.clear(TrainSignUpUser.class, cnd);
dao.clear(TrainSignUpUserCourse.class, cnd);
return AjaxResult.success();
}
}
@@ -0,0 +1,270 @@
package com.ruoyi.activity.controller.trainSignUp;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.export.ExcelExportService;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpActivity;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpCourse;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpUserManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
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.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/6
* @Description
*/
@RestController
@RequestMapping("/trainSignUp/userManage")
public class TrainSignUpUserManageController {
@Autowired
private Dao dao;
private TrainSignUpUserManageService trainSignUpUserManageService;
@Autowired
public TrainSignUpUserManageController(TrainSignUpUserManageService trainSignUpUserManageService) {
this.trainSignUpUserManageService = trainSignUpUserManageService;
}
@PostMapping("pageData")
@RequiresPermissions("activity:trainSignUp:userManage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "courseId", required = false) String courseId,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "userKeyWord", required = false) String userKeyWord) {
Cnd cnd = Cnd.NEW();
cnd.andEX("tsuu.activityId", "=", activityId);
cnd.andEX("tsuu.courseId", "=", courseId);
cnd.andEX("act.year", "=", year);
if (!AuthUtil.hasAnyRoles("admin")) {
cnd.and("act.userId", "=", SecurityUtils.getUserId());
}
if (StrUtil.isNotBlank(userKeyWord)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
cnd.and(seg.andLike("u.userName", userKeyWord).orLike("u.loginName", userKeyWord));
}
Pagination pagination = trainSignUpUserManageService.pageData(pageForm, cnd, activityId, courseId);
return AjaxResult.success(pagination);
}
@PostMapping("doHandleUser")
@RequiresPermissions("activity:trainSignUp:userManage")
public AjaxResult doHandleUser(@RequestParam Long userId) {
trainSignUpUserManageService.doHandleUser(userId);
return AjaxResult.success();
}
@PostMapping("attendClassRecord")
@RequiresPermissions("activity:trainSignUp:userManage")
public AjaxResult attendClassRecord(Long userId) {
trainSignUpUserManageService.attendClassRecord(userId);
return AjaxResult.success();
}
@RequestMapping("exportSignPerson")
@RequiresLogin
public void exportSignPerson(String activityId, HttpServletResponse response) {
TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, activityId);
Sql sql = Sqls.create("""
SELECT
uc.*,
DATE_FORMAT(uc.courseStartTime, '%Y-%m-%d %H:%i:%s') as courseStartTimeExcel,
DATE_FORMAT(uc.courseEndTime, '%Y-%m-%d %H:%i:%s') as courseEndTimeExcel,
DATE_FORMAT(uc.attendTime, '%Y-%m-%d %H:%i:%s') as attendTimeExcel,
u.userName as username,
u.loginName as loginname,
u.deptName as unitname,
u.unionName as unionname,
(case u.sex when 0 then '男' when 1 then '女' else '未知' end) as sex
FROM
train_sign_up_user_course uc
left join train_sign_up_course course on uc.courseId = course.id
left join `user` u on u.userId = uc.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("uc.activityId", "=", activityId);
cnd.and("course.isMobileSign", "=", true);
cnd.desc("isAttend").desc("attendTime");
sql.setCondition(cnd);
List<NutMap> userList = trainSignUpUserManageService.listMap(sql);
List<TrainSignUpCourse> courseList = dao.query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activityId));
List<Map<String, Object>> sheetsList = new ArrayList<>();
List<ExcelExportEntity> excelCommonExportEntity = new ArrayList<>();
excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20));
excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20));
excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitname", 20));
excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionname", 20));
excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20));
excelCommonExportEntity.add(new ExcelExportEntity("开始时间", "courseStartTimeExcel", 22));
excelCommonExportEntity.add(new ExcelExportEntity("结束时间", "courseEndTimeExcel", 22));
excelCommonExportEntity.add(new ExcelExportEntity("是否签到", "isAttend", 20));
excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22));
for (TrainSignUpCourse c : courseList) {
String courseId = c.getId();
String courseName = c.getCourseName();
List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList());
ExportParams userExportParams = new ExportParams();
userExportParams.setSheetName(courseName);
List<ExcelExportEntity> currentEntities = new ArrayList<>(excelCommonExportEntity);
for (NutMap userSignData : v) {
if (!userSignData.getBoolean("isAttend")) {
userSignData.put("isAttend", "未签到");
userSignData.put("attendTimeExcel", "未签到");
} else {
userSignData.put("isAttend", "已签到");
}
}
Map<String, Object> userExportMap = new HashMap<>();
userExportMap.put("name", courseName);
userExportMap.put("title", userExportParams);
userExportMap.put("entity", currentEntities);
userExportMap.put("data", v);
sheetsList.add(userExportMap);
try {
String fileName = activity.getActivityName() + "签到人员名单.xls";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
Workbook workbook = new HSSFWorkbook();
for (Map<String, Object> map : sheetsList) {
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();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@RequestMapping("exportGiftPerson")
@RequiresLogin
public void exportGiftPerson(String activityId, HttpServletResponse response) {
TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, activityId);
Sql sql = Sqls.create("""
SELECT
uc.*,
DATE_FORMAT(uc.courseStartTime, '%Y-%m-%d %H:%i:%s') as courseStartTimeExcel,
DATE_FORMAT(uc.courseEndTime, '%Y-%m-%d %H:%i:%s') as courseEndTimeExcel,
DATE_FORMAT(uc.receiveTime, '%Y-%m-%d %H:%i:%s') as receiveTimeExcel,
u.userName as username,
u.loginName as loginname,
u.deptName as unitname,
u.unionName as unionname,
(case u.sex when 0 then '男' when 1 then '女' else '未知' end) as sex
FROM
train_sign_up_user_course uc
left join train_sign_up_course course on uc.courseId = course.id
left join `user` u on u.userId = uc.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("uc.activityId", "=", activityId);
cnd.and("course.isReceiveGift", "=", true).and("course.giftType", "=", 1);
cnd.desc("isReceive").desc("receiveTime");
sql.setCondition(cnd);
List<NutMap> userList = trainSignUpUserManageService.listMap(sql);
List<TrainSignUpCourse> courseList = dao.query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activityId));
List<Map<String, Object>> sheetsList = new ArrayList<>();
List<ExcelExportEntity> excelCommonExportEntity = new ArrayList<>();
excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20));
excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20));
excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitname", 20));
excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionname", 20));
excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20));
excelCommonExportEntity.add(new ExcelExportEntity("开始时间", "courseStartTimeExcel", 22));
excelCommonExportEntity.add(new ExcelExportEntity("结束时间", "courseEndTimeExcel", 22));
excelCommonExportEntity.add(new ExcelExportEntity("是否领取", "isReceive", 20));
excelCommonExportEntity.add(new ExcelExportEntity("领取时间", "receiveTimeExcel", 22));
for (TrainSignUpCourse c : courseList) {
String courseId = c.getId();
String courseName = c.getCourseName();
List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList());
ExportParams userExportParams = new ExportParams();
userExportParams.setSheetName(courseName);
List<ExcelExportEntity> currentEntities = new ArrayList<>(excelCommonExportEntity);
for (NutMap userSignData : v) {
if (!userSignData.getBoolean("isReceive")) {
userSignData.put("isReceive", "未领取");
userSignData.put("receiveTimeExcel", "未领取");
} else {
userSignData.put("isReceive", "已领取");
}
}
Map<String, Object> userExportMap = new HashMap<>();
userExportMap.put("name", courseName);
userExportMap.put("title", userExportParams);
userExportMap.put("entity", currentEntities);
userExportMap.put("data", v);
sheetsList.add(userExportMap);
try {
String fileName = activity.getActivityName() + "礼品领取人员名单.xls";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
Workbook workbook = new HSSFWorkbook();
for (Map<String, Object> map : sheetsList) {
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();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
@@ -0,0 +1,267 @@
package com.ruoyi.activity.controller.trainSignUp.mobile;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUser;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUserCourse;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityService;
import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.SysFile;
import com.ruoyi.common.core.enums.ConditionalOperational;
import com.ruoyi.common.core.enums.MatchMethod;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteMatchCndService;
import com.ruoyi.system.api.domain.MatchCondition;
import com.ruoyi.system.api.domain.MatchConditionStructure;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.entity.annotation.Comment;
import org.nutz.lang.Lang;
import org.nutz.lang.Mirror;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/20
* @Description
*/
@RestController
@RequestMapping("/mobile/trainSignUp")
public class MTrainSignUpActivityController {
@Autowired
private Dao dao;
@Autowired
private TrainSignUpActivityService trainSignUpActivityService;
@Autowired
private RemoteMatchCndService matchConditionStructureService;
private final ReentrantLock lock = new ReentrantLock(true);
@PostMapping("pageData")
@RequiresLogin
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "activityStatus", required = false) Integer activityStatus,
@RequestParam(value = "type", required = false) String type) {
Pagination pagination = trainSignUpActivityService.mPageData(pageForm, year, activityStatus, type);
return AjaxResult.success(pagination);
}
@GetMapping("findOne")
@RequiresLogin
public AjaxResult findOne(@RequestParam(value = "id", required = false) String id,
@RequestParam(value = "tabIndex", required = false) Integer tabIndex) {
Cnd cnd = Cnd.NEW();
if (tabIndex > 0) {
List<TrainSignUpUser> mySignCourseList = dao.query(TrainSignUpUser.class, Cnd.where("userId", "=", SecurityUtils.getUserId()).and("activityId", "=", id));
List<String> mySignCourseIdList = mySignCourseList.stream().map(TrainSignUpUser::getCourseId).collect(Collectors.toList());
cnd.and("id", "in", mySignCourseIdList);
}
NutMap nutMap = trainSignUpActivityService.findOne(id, cnd);
return AjaxResult.success(nutMap);
}
@PostMapping("doSignUp")
@RequiresLogin
public AjaxResult doSignUp(@RequestBody TrainSignUpUser trainSignUpUser) {
lock.lock();
try {
String activityId = trainSignUpUser.getActivityId();
String courseId = trainSignUpUser.getCourseId();
//已报名人数
if (trainSignUpActivityService.isSignCourseByUser(courseId, SecurityUtils.getUserId())) {
return AjaxResult.warn("您已经报过了!");
}
if (trainSignUpActivityService.isSignFullByUnionId(courseId)) {
return AjaxResult.warn("该活动您所在的分工会名额已报满!");
}
if (trainSignUpActivityService.isSignFull(courseId)) {
return AjaxResult.warn("抱歉,此项已报满!");
}
if (!trainSignUpActivityService.isSignCourse(courseId, activityId)) {
return AjaxResult.warn("该类型不能再报!");
}
trainSignUpActivityService.doSignUp(trainSignUpUser);
return AjaxResult.success("报名成功");
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.success("报名失败");
} finally {
lock.unlock();
}
}
@PostMapping("cancelSignUp")
@RequiresLogin
public AjaxResult cancelSignUp(String activityId, String courseId) {
Long userId = SecurityUtils.getUserId();
//删除报名记录
dao.clear("train_sign_up_user_course", Cnd.where("activityId", "=", activityId)
.and("courseId", "=", courseId).and("userId", "=", userId));
dao.clear("train_sign_up_user", Cnd.where("activityId", "=", activityId)
.and("courseId", "=", courseId).and("userId", "=", userId));
return AjaxResult.success();
}
@PostMapping("doQd")
@RequiresLogin
public AjaxResult doQd(@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "courseId", required = false) String courseId,
@RequestParam(name = "points[]", required = false) Double[] points) {
trainSignUpActivityService.doQd(id);
return AjaxResult.success();
}
@GetMapping("getQdInfoList")
@RequiresLogin
public AjaxResult getQdInfoList(@RequestParam(value = "activityId", required = false) String activityId) {
List<NutMap> list = trainSignUpActivityService.qdInfoByUserId(SecurityUtils.getUserId(), activityId);
return AjaxResult.success(list);
}
@GetMapping("getActivityCnd")
@RequiresLogin
public AjaxResult getActivityCnd(@RequestParam(value = "activityId", required = false) String activityId) {
NutMap nutMap = trainSignUpActivityService.getActivityCnd(activityId);
return AjaxResult.success(nutMap);
}
@GetMapping("validateSignUp")
@RequiresLogin
public AjaxResult validateSignUp(@RequestParam(value = "id", required = false) String id) {
NutMap resultMap = NutMap.NEW();
StringBuffer sbf = new StringBuffer();
DynamicDataSourceContextHolder.push("system");
MatchConditionStructure conditionStructure = dao.fetch(MatchConditionStructure.class, id);
dao.fetchLinks(conditionStructure, "conditions");
DynamicDataSourceContextHolder.clear();
MatchMethod method = conditionStructure.getMethod();
List<MatchCondition> conditions = conditionStructure.getConditions();
//每个条件的判断结果
List<Boolean> cndResultList = new ArrayList<>();
conditions.forEach(c -> {
String fieldName = c.getField();
try {
Mirror<SysUser> userMirror = Mirror.me(SysUser.class);
Field field = userMirror.getField(fieldName);
Comment annotation = field.getAnnotation(Comment.class);
String fieldChineseName = annotation.value();
ConditionalOperational operational = c.getOperational();
String description = operational.getDescription();
String fieldValue = c.getValue();
if ("sex".equals(fieldName)) {
fieldValue = "0".equals(c.getValue()) ? "" : "";
}
sbf.append(fieldChineseName + description + fieldValue + "\n");
LoginUser loginUser = (LoginUser) SecurityContextHolder.getLocalMap().get("login_user");
if (loginUser != null) {
NutMap loginUserMap = Lang.obj2nutmap(loginUser.getSysUser());
cndResultList.add(loginUserMap.get(fieldName).equals(c.getValue()));
} else {
cndResultList.add(false);
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
});
switch (method.name()) {
case "AND" -> resultMap.addv("flag", cndResultList.stream().allMatch(x -> x));
case "OR" -> resultMap.addv("flag", cndResultList.stream().anyMatch(x -> x));
}
resultMap.addv("msg", sbf);
resultMap.addv("method", method.getDescription());
return AjaxResult.success(resultMap);
}
@GetMapping("isSignFullByUnionId")
@RequiresLogin
public AjaxResult isSignFullByUnionId(@RequestParam(value = "courseId", required = false) String courseId) {
if (trainSignUpActivityService.isSignCourseByUser(courseId, SecurityUtils.getUserId())) {
return AjaxResult.warn("该活动已报过了!");
}
if (trainSignUpActivityService.isSignFullByUnionId(courseId)) {
return AjaxResult.warn("该活动您所在的分工会名额已报满!");
}
if (trainSignUpActivityService.isSignFull(courseId)) {
return AjaxResult.warn("该活动已报满!");
}
return AjaxResult.success();
}
@RequestMapping("codeSign")
@RequiresLogin
public AjaxResult codeSign(@RequestParam(value = "id", required = false) String id,
@RequestParam(value = "codeCourseId", required = false) String codeCourseId,
@RequestParam(value = "clickCourseId", required = false) String clickCourseId) {
if (StrUtil.isBlank(codeCourseId) || StrUtil.isBlank(clickCourseId)) {
return AjaxResult.warn("签到失败,没有获取到扫描信息");
}
if (!codeCourseId.equals(clickCourseId)) {
return AjaxResult.warn("签到失败,二维码与您当前签到信息不符");
}
dao.update(TrainSignUpUserCourse.class, Chain.make("isAttend", true)
.add("attendTime", new Date()), Cnd.where("id", "=", id));
return AjaxResult.success();
}
@RequestMapping("summaryDo")
@RequiresLogin
public AjaxResult summaryDo(@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "courseId", required = false) String courseId,
@RequestParam(value = "summaryText", required = false) String summaryText) {
if (StrUtil.isBlank(activityId) || StrUtil.isBlank(courseId)) {
return AjaxResult.warn("操作失败,没有获取到课程信息");
}
dao.update(TrainSignUpUser.class, Chain.make("summaryText", summaryText),
Cnd.where("activityId", "=", activityId).and("courseId", "=", courseId)
.and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success();
}
@RequestMapping("photoDo")
@RequiresLogin
public AjaxResult photoDo(@RequestBody List<SysFile> photoFiles,
@RequestParam(value = "activityId", required = false) String activityId,
@RequestParam(value = "courseId", required = false) String courseId,
@RequestParam(value = "summaryText", required = false) String summaryText) {
if (StrUtil.isBlank(activityId) || StrUtil.isBlank(courseId)) {
return AjaxResult.warn("操作失败,没有获取到课程信息");
}
TrainSignUpUser signUpUser = dao.fetch(TrainSignUpUser.class, Cnd.where("activityId", "=", activityId).and("courseId", "=", courseId)
.and("userId", "=", SecurityUtils.getUserId()));
if(signUpUser.getClassPhoto() != null) {
photoFiles.addAll(signUpUser.getClassPhoto());
}
dao.update(TrainSignUpUser.class, Chain.make("classPhoto", photoFiles),
Cnd.where("activityId", "=", activityId).and("courseId", "=", courseId)
.and("userId", "=", SecurityUtils.getUserId()));
return AjaxResult.success();
}
}
@@ -0,0 +1,193 @@
package com.ruoyi.activity.controller.trainSignUp.mobile;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.domain.trainSignUp.TrainSignUpUserCourse;
import com.ruoyi.activity.service.trainSignUp.TrainSignUpActivityService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
* @Author JyuHsin
* @Date 2023/3/3
* @Description
*/
@RestController
@RequestMapping("/mobile/trainSignUpActivityScannerQrCode")
public class MTrainSignUpActivityScannerQrCodeController {
@Autowired
private Dao dao;
@Autowired
private TrainSignUpActivityService trainSignUpActivityService;
/**
* 微信js验证
*
* @param url
* @return
*/
@RequestMapping("/auth/sign")
@RequiresLogin
public AjaxResult wxAuthSign(String url) {
//String jsapi_ticket = wxTokenUtil.jsTicket();
String jsapi_ticket = "";
return AjaxResult.success(sign(jsapi_ticket, url));
}
@RequestMapping("/qrCodeInfo")
@RequiresLogin
public AjaxResult qrCodeInfo(String userId, String signId, String activityId) {
if (StrUtil.isBlank(userId) || StrUtil.isBlank(signId) || StrUtil.isBlank(activityId)) {
return AjaxResult.error("参数错误");
}
try {
// Sql activitySql = Sqls.create("select activityName,cover from train_sign_up_activity where id = @activityId");
// activitySql.setParam("activityId",activityId);
// NutMap activityMap = (NutMap) Daos.query(dao, activitySql.toString(), Sqls.callback.map());
Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from train_sign_up_user_course where id = @signId");
signSql.setParam("signId", signId);
NutMap attendInfo = (NutMap) Daos.query(dao, signSql.toString(), Sqls.callback.map());
Sql userSql = Sqls.create("""
select
id,
userName as username,
loginName as loginname,
deptName as unitname,
unionName as unionname,
sex
from
`user` where userId = @userId
""");
userSql.setParam("userId", userId);
NutMap userMap = (NutMap) Daos.query(dao, userSql.toString(), Sqls.callback.map());
return AjaxResult.success(Map.of("signInfo", attendInfo, "userInfo", userMap));
} catch (Exception e) {
return AjaxResult.error("获取信息失败");
}
}
@RequestMapping("/signInfo")
@RequiresLogin
public AjaxResult signInfo(String signId) {
if (StrUtil.isBlank(signId)) {
return AjaxResult.error("参数错误");
}
try {
Sql signSql = Sqls.create("select isAttend,attendTime from train_sign_up_user_course where id = @signId");
signSql.setParam("signId", signId);
NutMap signInfo = trainSignUpActivityService.fetch(signSql);
return AjaxResult.success(signInfo);
} catch (Exception e) {
return AjaxResult.error("获取信息失败");
}
}
@RequestMapping("/grantGiftByQrCode")
@RequiresLogin
public AjaxResult grantGiftByQrCode(String signId) {
if (StrUtil.isBlank(signId)) {
return AjaxResult.error("参数错误");
}
try {
Chain chain = Chain.make("isReceive", 1);
chain.add("receiveTime", new Date());
chain.add("giftScannerCodeUserId", SecurityUtils.getUserId());
dao.update(TrainSignUpUserCourse.class, chain, Cnd.where("id", "=", signId));
Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from train_sign_up_user_course where id = @signId");
signSql.setParam("signId", signId);
NutMap signInfo = trainSignUpActivityService.fetch(signSql);
return AjaxResult.success(signInfo);
} catch (Exception e) {
return AjaxResult.error("获取信息失败");
}
}
@RequestMapping("/confirmSignByQrCode")
@RequiresLogin
public AjaxResult confirmSignByQrCode(String signId) {
if (StrUtil.isBlank(signId)) {
return AjaxResult.error("参数错误");
}
try {
Chain chain = Chain.make("isAttend", 1);
chain.add("attendTime", new Date());
chain.add("signScannerCodeUserId", SecurityUtils.getUserId());
dao.update(TrainSignUpUserCourse.class, chain, Cnd.where("id", "=", signId));
Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from train_sign_up_user_course where id = @signId");
signSql.setParam("signId", signId);
NutMap signInfo = trainSignUpActivityService.fetch(signSql);
return AjaxResult.success(signInfo);
} catch (Exception e) {
return AjaxResult.error("获取信息失败");
}
}
public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"&timestamp=" + timestamp +
"&url=" + url;
System.out.println(string1);
try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
e.printStackTrace();
}
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash) {
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
@@ -0,0 +1,20 @@
package com.ruoyi.activity.param;
import lombok.Data;
import java.util.List;
@Data
public class ActivityMobileSignUpParam {
private String activityId;
private String eventId;
private String teamId;
private String teamName;
private List<Long> userIds;
}
@@ -0,0 +1,69 @@
package com.ruoyi.activity.service.basic;
import com.ruoyi.activity.api.constant.ActivityBasicScopePageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/1/4
* @Description
*/
public interface ActivityBasicScopeService extends BaseService {
/**
* @return java.util.List<org.nutz.lang.util.NutMap>
* @description 查询所有活动组别
* @author zhf
* @date 2023/1/11 10:00
*/
List<NutMap> getActivityUserScopeGroup();
/**
* @param activityGroupId
* @return java.util.List<org.nutz.lang.util.NutMap>
* @description 查询活动设置人员
* @author zhf
* @date 2023/2/13 14:54
*/
List<NutMap> getUserScope(Integer activityGroupId);
Pagination pageData(ActivityBasicScopePageForm pageForm);
Integer doSetActivityUser(ActivityBasicScopePageForm pageForm, Integer setGroupType, Integer setGroupId, String setGroupName);
/**
* @param id
* @return void
* @description 删除活动组别的人 可根据id删也可根据组别id删 都为空删除全部 两个id传一个即可
* @author zhf
* @date 2023/1/11 17:34
*/
void doDelete(String id,
ActivityBasicScopePageForm pageForm);
/**
* @param activityGroupId
* @return int
* @description 查看该人员是否在活动范围中
* @author zhf
* @date 2023/2/10 9:46
*/
int getScopeUserCount(Integer activityGroupId);
void doExportUser(String props,ActivityBasicScopePageForm pageForm, HttpServletResponse response);
}
@@ -0,0 +1,7 @@
package com.ruoyi.activity.service.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicSettings;
import com.ruoyi.common.core.service.BaseService;
public interface ActivityBasicSettingsService extends BaseService<ActivityBasicSettings> {
}
@@ -0,0 +1,7 @@
package com.ruoyi.activity.service.basic;
import com.ruoyi.activity.api.domain.basic.ActivityEvent;
import com.ruoyi.common.core.service.BaseService;
public interface ActivityEventService extends BaseService<ActivityEvent> {
}
@@ -0,0 +1,51 @@
package com.ruoyi.activity.service.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnion;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/12 11:23
*/
public interface ActivityUnionService extends BaseService<ActivityBasicUnion> {
/**
* @param pageNumber
* @param pageSize
* @param unionName
* @return com.ruoyi.common.core.page.Pagination
* @description 院级工会信息分页
* @author zhf
* @date 2023/1/12 11:45
*/
Pagination pageData(int pageNumber, int pageSize, String unionName);
/**
* @param unionId
* @param units
* @return void
* @description 设置组成单位
* @author zhf
* @date 2023/1/12 14:23
*/
void setUnit(String unionId, String[] units);
/**
* @param id
* @return void
* @description 删除活动分工会
* @author zhf
* @date 2023/1/12 14:55
*/
void remove(String id);
}
@@ -0,0 +1,19 @@
package com.ruoyi.activity.service.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicUnit;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/12 9:14
*/
public interface ActivityUnitService extends BaseService<ActivityBasicUnit> {
AjaxResult updateDept(ActivityBasicUnit basicUnit);
AjaxResult addDept(ActivityBasicUnit basicUnit);
}
@@ -0,0 +1,66 @@
package com.ruoyi.activity.service.common;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/1
* @Description
*/
public interface ActivityCommonService extends BaseService {
/**
* 根据typeId查询所属模块名称
*
* @param typeId
* @return
*/
String findModuleNameByTypeId(Integer typeId);
/**
* 根据MeetId查询所属模块名称
*
* @param meetingId
* @return
*/
String findModuleNameByActivityId(String meetingId);
/**
* 根据模块名称查找对应stateCode 最开始的那个
*
* @param moduleName
* @return
*/
Integer findStartStateCodeByModuleName(String moduleName);
Integer findAfterStateCode(Integer stateCode, boolean isPass);
Integer findAfterStateCodeByModuleName(Integer stateCode, String moduleName);
/**
* 根据会议id查询请假成功的code
*
* @param meetingId
* @return
*/
Integer findSuccessStateCode(String meetingId);
/**
* 获取当前用户关联哪些会议
*
* @return
*/
Object find();
/**
* 查询当前登录用户能审核的状态Id
*
* @return
*/
List<Integer> findStateIdForMeCanAudit();
List<NutMap> getNextAuditUser(Integer stateCode, String moduleName);
}
@@ -0,0 +1,26 @@
package com.ruoyi.activity.service.culture;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/16 11:51
*/
public interface ActivityCultureApplyService extends BaseService<ActivityTissue> {
void doAdd(ActivityTissue tissue);
void doEdit(ActivityTissue tissue);
void doDelete(String id);
AjaxResult pageData(PageForm page, String year, String name, String unionId, String clubId, Integer activityType);
AjaxResult findOne(String id);
}
@@ -0,0 +1,73 @@
package com.ruoyi.activity.service.culture;
import com.ruoyi.activity.api.domain.culture.ActivityTissuePerson;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface ActivityCultureApplyUserService extends BaseService<ActivityTissuePerson> {
/**
* 获取某个分工会限制的数量
*
* @param unionUserNumberLimit
* @param unionId
* @return
*/
int getLimitNumByUnion(List<NutMap> unionUserNumberLimit, String unionId);
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 个人报名
*/
AjaxResult doSingleRegister(String activityId);
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 取消报名
*/
AjaxResult doSingleCancelRegister(String activityId);
/**
* @param groupId
* @return java.util.List<org.nutz.lang.util.NutMap>
* @author zhf
* @description 查询可报名的人员
*/
List<NutMap> selfUnionUsers(String groupId);
/**
* @param tissueId
* @return java.util.List<org.nutz.lang.util.NutMap>
* @author zhf
* @description 查询已经报名的人员
*/
List<Long> getReportedUser(String tissueId);
/**
* @param activityId
* @param personIds
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 分工会报名
*/
AjaxResult doSaveUnionRegister(String activityId, Long[] personIds);
/**
* @param activityId
* @return com.ruoyi.common.core.web.domain.AjaxResult
* @author zhf
* @description 删除报名人员
*/
AjaxResult doDeleteActivityUser(String activityId, String applyUserId, String id);
}
@@ -0,0 +1,15 @@
package com.ruoyi.activity.service.culture.mobile;
import com.ruoyi.activity.api.domain.culture.ActivityTissue;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import java.util.List;
public interface MobileActivityCultureApplyService extends BaseService<ActivityTissue> {
void singleSignUp(String activityId);
}
@@ -0,0 +1,27 @@
package com.ruoyi.activity.service.fitnessWalk;
import com.ruoyi.activity.api.domain.fitnessWalk.FitnessWalk;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* 健身走活动管理
*
* @author jug
* @date 2023/02/13
*/
public interface FitnessWalkActivityManageService extends BaseService<FitnessWalk> {
Pagination pageData(PageForm pageForm, Integer year, String activityName);
void deleteActivity(String id) throws Exception;
List<NutMap> mainActivity(int year, String mode);
List<NutMap> branchActivity(String mainName, int year, String mode);
}
@@ -0,0 +1,27 @@
package com.ruoyi.activity.service.fitnessWalk;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface FitnessWalkSignInStatisticsService extends BaseService {
List<NutMap> unionNumData(String mainName, String branchActivity, Integer year);
Pagination getRegisterUser(PageForm pageForm, String mainName, String branchActivity, String unionId);
Pagination getSignUser(PageForm pageForm, String mainName, String branchActivity, String unionId);
List<NutMap> doExportRegister(String mainName, String branchActivity);
List<NutMap> doGiftExport(String mainName, String branchActivity, boolean flag);
List<NutMap> doExportSummary(String mainName, String branchActivity);
List<NutMap> doExportSign(String mainName, String branchActivity);
List<String> getFitNessActivityId(String mainName, String branchActivity, Integer year);
}
@@ -0,0 +1,35 @@
package com.ruoyi.activity.service.fitnessWalk;
import com.ruoyi.activity.api.domain.fitnessWalk.JszWxStep;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface FitnessWalkStepService extends BaseService<JszWxStep> {
/**
* 获取今天当前用户最新步数
*/
Object getStepByUserId(String userId);
/**
* 获取当日榜或者累计排榜榜
*
* @param hdid: 活动id
* @param type: 0-当日榜, 1-累计排行榜
* @return null
* @author JyuHsin
* @date 2022/9/7
*/
List<NutMap> getDataOfLeaderboard(String hdid, Integer type, String userId, String unionId, String unitId, String searchName, String searchKeyword);
/**
* 获取当日中奖榜
*
* @param hdid: 活动id
* @return java.lang.Object
* @author JyuHsin
* @date 2022/9/7
*/
List<NutMap> getDataOfPrize(String hdid, String unionId, String unitId, String searchName, String searchKeyword);
}
@@ -0,0 +1,42 @@
package com.ruoyi.activity.service.fitnessWalk;
import org.nutz.lang.util.NutMap;
/**
* 云函数请求地址
*
* @author jug
* @date 2023/02/13
*/
public class WxMpCloudHttpConstants {
private final NutMap jsonHeader = NutMap.NEW().setv("Content-Type", "application/json");
public static final String APPID = "wxf750f43635f770e0";
public static final String APP_SECRET = "a54517e19ab700f745f20f27312ab8b2";
public static final String ENV = "jsz-hnucm-1glpy4qeece72701";
public static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
public static final String QUERY_URL = "https://api.weixin.qq.com/tcb/databasequery?access_token=ACCESS_TOKEN";
public static final String INSERT_URL = "https://api.weixin.qq.com/tcb/databaseadd?access_token=ACCESS_TOKEN";
public static final String UPDATE_URL = "https://api.weixin.qq.com/tcb/databaseupdate?access_token=ACCESS_TOKEN";
public static final String DELETE_URL = "https://api.weixin.qq.com/tcb/databasedelete?access_token=ACCESS_TOKEN";
public static final String UPLOAD_URL = "https://api.weixin.qq.com/tcb/uploadfile?access_token=ACCESS_TOKEN";
public static final String DOWNLOAD_URL = "https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN";
public static final String CLOUD_URL = "https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME";
public static final String AGGREGATE_URL = "https://api.weixin.qq.com/tcb/databaseaggregate?access_token=ACCESS_TOKEN";
public static final String COUNT_URL = "https://api.weixin.qq.com/tcb/databasecount?access_token=ACCESS_TOKEN";
}
@@ -0,0 +1,209 @@
package com.ruoyi.activity.service.fitnessWalk;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.ruoyi.common.core.constant.WxMpConstants;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.redis.service.RedisService;
import org.apache.commons.io.FileUtils;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.upload.TempFile;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 微信小程序云数据库请求工具类
*
* @author jug
* @date 2023/02/13
*/
public class WxMpCloudHttpUtil {
private static final NutMap jsonHeader = NutMap.NEW().setv("Content-Type", "application/json");
/**
* 获取访问令牌
*
* @return {@link String}
*/
public static String getAccessToken() {
RedisService redisService = SpringUtils.getBean(RedisService.class);
String token = redisService.getCacheObject(WxMpConstants.WX_MP_TOKEN_KEY);
// if (StrUtil.isNotBlank(token)) {
// return token;
// }
String url = WxMpCloudHttpConstants.TOKEN_URL.replace("APPID", WxMpCloudHttpConstants.APPID).replace("APPSECRET", WxMpCloudHttpConstants.APP_SECRET);
String content = HttpUtil.get(url);
NutMap tokenResp = Json.fromJson(NutMap.class, content);
if (tokenResp.containsKey("errcode")) {
throw new RuntimeException(tokenResp.getString("errmsg"));
}
String new_token = tokenResp.getString("access_token");
redisService.setCacheObject(WxMpConstants.WX_MP_TOKEN_KEY, new_token, 7000L, TimeUnit.SECONDS);
return new_token;
}
public static NutMap getWxResult(String url, String query) {
String queryUrl = url.replace("ACCESS_TOKEN", getAccessToken());
Map<String, String> reqBody = new HashMap<>();
reqBody.put("env", WxMpCloudHttpConstants.ENV);
reqBody.put("query", query);
HttpRequest post = HttpUtil.createPost(queryUrl);
post.body(Json.toJson(reqBody));
post.header("Content-Type", "application/json");
post.timeout(10000);
HttpResponse httpResponse = post.execute();
NutMap respMap = Json.fromJson(NutMap.class, httpResponse.body());
if (respMap.getInt("errcode") != 0) {
throw new ServiceException(respMap.getString("errmsg"));
}
return respMap;
}
/**
* 云函数返回结果
*
* @param queryUrl 查询网址
* @param name 名字
* @param reqBody 请求身体
* @return {@link NutMap}
* @throws IOException ioexception
*/
public static NutMap getCloudResult(String queryUrl, String name, Map<String, Object> reqBody) throws Exception {
String url = queryUrl.replace("ACCESS_TOKEN", getAccessToken())
.replace("ENV", WxMpCloudHttpConstants.ENV).replace("FUNCTION_NAME", name);
HttpRequest post = HttpUtil.createPost(url);
post.body(Json.toJson(reqBody));
post.header("Content-Type", "application/json");
post.timeout(10000);
HttpResponse httpResponse = post.execute();
NutMap respMap = Json.fromJson(NutMap.class, httpResponse.body());
if (respMap.getInt("errcode") != 0) {
throw new ServiceException(respMap.getString("errmsg"));
}
return respMap;
}
/**
* 返回文件url
*
* @param fileid
* @return
* @throws IOException
*/
public String getWxFileUrl(String fileid) throws IOException {
// String url = WxMpCloudHttpConstants.DOWNLOAD_URL.replace("ACCESS_TOKEN", getAccessToken());
// Map mf = new HashMap<String, String>();
// mf.put("fileid", fileid);
// mf.put("max_age", 7200);
// ArrayList<Map> fm = new ArrayList<>();
// fm.add(mf);
// Map reqbody = new HashMap<String, String>();
// reqbody.put("env", this.env);
// reqbody.put("file_list", fm);
// Header header = Header.create(jsonHeader);
// org.nutz.http.Response response = Http.post3(url, Json.toJson(reqbody), header, 200000);
// NutMap map = Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
// if (map.getInt("errcode") == 0 && map.getString("errmsg").equals("ok")) {
// NutMap res = map.getAsList("file_list", NutMap.class).get(0);
// return res.getString("download_url");
// } else {
// log.error(map.getString("errmsg"));
// return null;
// }
return null;
}
/**
* 上传文件并返回文件id
*
* @param wxFilePath wxFilePath路径
* @return {@link NutMap}
* @throws Exception 异常
*/
public static String uploadFile(String localFilePath, String wxFilePath) throws Exception {
InputStream inputStream = HttpUtil.createGet(localFilePath).execute().bodyStream();
Path wxMpFile = Files.createTempFile("wxMpFile", FileUtil.getSuffix(localFilePath));
FileUtils.copyInputStreamToFile(inputStream, wxMpFile.toFile());
String url = WxMpCloudHttpConstants.UPLOAD_URL.replace("ACCESS_TOKEN", getAccessToken());
HttpRequest post = HttpUtil.createPost(url);
post.header("Content-Type", "application/json");
Map<String, String> requestBody = new HashMap<>();
requestBody.put("env", WxMpCloudHttpConstants.ENV);
requestBody.put("path", wxFilePath);
post.body(Json.toJson(requestBody));
post.timeout(10000);
HttpResponse httpResponse = post.execute();
NutMap respMap = Json.fromJson(NutMap.class, httpResponse.body());
if (respMap.getInt("errcode") != 0) {
throw new ServiceException(respMap.getString("errmsg"));
}
String uploadUrl = respMap.getString("url");
String token = respMap.getString("token");
String authorization = respMap.getString("authorization");
String file_id = respMap.getString("file_id");
String cos_file_id = respMap.getString("cos_file_id");
HttpRequest uploadPost = HttpUtil.createPost(uploadUrl);
uploadPost.form("key", wxFilePath);
uploadPost.form("Signature", authorization);
uploadPost.form("x-cos-security-token", token);
uploadPost.form("x-cos-meta-fileid", cos_file_id);
uploadPost.form("file", wxMpFile.toFile());
uploadPost.execute().body();
return file_id;
}
/**
* @param map
* @param file 文件
* @param wxFilePath 储存在微信云端的路径
* @return 文件id
* @throws Exception
*/
public String uploadFile(NutMap map, TempFile file, String wxFilePath) throws Exception {
// String url = map.getString("url");
// String token = map.getString("token");
// String authorization = map.getString("authorization");
// String file_id = map.getString("file_id");
// String cos_file_id = map.getString("cos_file_id");
// RequestBody fb = RequestBody.create(file.getFile(), formData);
// RequestBody b = new MultipartBody.Builder()
// .setType(MultipartBody.FORM)
// .addFormDataPart("key", wxfilePath)
// .addFormDataPart("Signature", authorization)
// .addFormDataPart("x-cos-security-token", token)
// .addFormDataPart("x-cos-meta-fileid", cos_file_id)
// .addFormDataPart("file", "filename", fb)
// .build();
//
// Request request = new Request.Builder()
// .url(url)
// .post(b)
// .build();
// Call call = okHttpClient.newCall(request);
// Response response = call.execute();
// //没有返回的内容 。。。怎么判断是否成功 难道去查?
// return file_id;
return null;
}
}
@@ -0,0 +1,28 @@
package com.ruoyi.activity.service.fourOneActivity;
import com.ruoyi.activity.api.constant.FourOneActivityForm;
import com.ruoyi.activity.api.domain.fourOneActivity.FourOneActivity;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/8 14:11
*/
public interface FourOneActivityService extends BaseService<FourOneActivity> {
void doSave(FourOneActivityForm fourOneActivityForm, Boolean flag);
void doEdit(FourOneActivityForm fourOneActivityForm, Boolean flag);
NutMap findOne(String id);
void doDelete(String id);
void doMakings(FourOneActivityForm fourOneActivityForm, Boolean flag, String id);
}
@@ -0,0 +1,385 @@
package com.ruoyi.activity.service.impl.basic;
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.hutool.core.util.StrUtil;
import com.ruoyi.activity.api.constant.ActivityBasicScopePageForm;
import com.ruoyi.activity.api.domain.basic.ActivityUserScope;
import com.ruoyi.activity.service.basic.ActivityBasicScopeService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.DictUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteClubService;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.domain.SysDictData;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
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.dao.util.cri.Static;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/1/4
* @Description
*/
@Service
public class ActivityBasicScopeServiceImpl extends BaseServiceImpl implements ActivityBasicScopeService {
public ActivityBasicScopeServiceImpl(Dao dao) {
super(dao);
}
@Autowired
private RemoteUserRoleService remoteUserRoleService;
@Autowired
private RemoteClubService remoteClubService;
@Autowired
public RedisTemplate redisTemplate;
@Override
public List<NutMap> getActivityUserScopeGroup() {
Sql sql = Sqls.create("""
SELECT
groupId,
groupName
FROM
activity_user_scope
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("sysadmin,H06")) {
if (AuthUtil.hasAnyRoles("H04,H02")) {
cnd.and("creator", "=", SecurityUtils.getUserId());
}
}
cnd.and("groupId", "IS NOT", null);
cnd.and("groupName", "IS NOT", null);
cnd.groupBy("groupId");
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.maps());
dao().execute(sql);
List<NutMap> mapList = sql.getList(NutMap.class);
return mapList;
}
@Override
public List<NutMap> getUserScope(Integer activityGroupId) {
Sql sql = Sqls.create("""
SELECT
u.userId,
u.userName,
u.loginName
FROM
`activity_user_scope` aus
LEFT JOIN `user` u ON u.userId = aus.userId
where aus.groupId=@groupId
""").setParam("groupId", activityGroupId);
return listMap(sql);
}
@Override
public Pagination pageData(ActivityBasicScopePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT DISTINCT
( u.userId ) AS id,
u.loginName,
u.userName,
u.sex,
u.birthday,
u.mobile,
u.personType,
u.userState,
u.deptName AS deptName,
u.unionname AS unionName,
TIMESTAMPDIFF(
YEAR,
u.birthday,
CURDATE()) AS age,
actun.unionname AS activityUnionName
FROM
`user` u
LEFT JOIN activity_basic_unit actit ON actit.dept_id = u.deptId
LEFT JOIN activity_basic_union actun ON actit.union_id = actun.id
$condition
""");
// LEFT JOIN sys_user_role sur ON sur.user_id = u.userId
// LEFT JOIN sys_club_user clubuser ON clubuser.userid = u.userId
Cnd cnd = Cnd.NEW();
Cnd dataCnd = pageDataCnd(pageForm, cnd);
sql.setCondition(dataCnd);
Pagination listPageMap = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return listPageMap;
}
@Override
@Transactional
public Integer doSetActivityUser(ActivityBasicScopePageForm pageForm, Integer setGroupType, Integer setGroupId, String setGroupName) {
Sql sql = Sqls.create("""
SELECT DISTINCT
( u.userId )
FROM
`user` u
LEFT JOIN activity_basic_unit actit ON actit.dept_id = u.deptId
LEFT JOIN activity_basic_union actun ON actit.union_id = actun.id
$condition
""");
Cnd cnd = Cnd.NEW();
Cnd dataCnd = pageDataCnd(pageForm, cnd);
sql.setCondition(dataCnd);
sql.setCallback(Sqls.callback.entities());
sql.setEntity(dao().getEntity(ActivityUserScope.class));
dao().execute(sql);
List<ActivityUserScope> list = sql.getList(ActivityUserScope.class);
NutMap groupMap = null;
int maxCount = 0;
if (setGroupType == 1) {
groupMap = fetch(Sqls.create("select groupName from activity_user_scope where groupId = @groupId").setParam("groupId", setGroupId));
} else if (setGroupType == 2) {
maxCount = count(Sqls.create("select max(groupId) from activity_user_scope"));
}
for (ActivityUserScope userScope : list) {
if (setGroupType == 1) {
userScope.setGroupId(setGroupId);
userScope.setGroupName(groupMap.getString("groupName"));
} else if (setGroupType == 2) {
userScope.setGroupId(maxCount + 1);
userScope.setGroupName(setGroupName);
}
userScope.setCreator(SecurityUtils.getUserId());
}
insert(list);
return setGroupType == 1 ? setGroupId : maxCount + 1;
}
@Override
@Transactional
public void doDelete(String id,
ActivityBasicScopePageForm pageForm) {
List<String> existsLoginNames = new ArrayList<>();
if (StrUtil.isNotBlank(pageForm.getExistsLoginNameRedisKey()) && redisTemplate.hasKey(pageForm.getExistsLoginNameRedisKey())) {
existsLoginNames = redisTemplate.opsForList().range(pageForm.getExistsLoginNameRedisKey(), 0, -1);
redisTemplate.delete(pageForm.getExistsLoginNameRedisKey());
}
Sql sql = Sqls.create("select userId from `user` u $condition");
Cnd userCnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
userCnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
userCnd.andEX("u.unionid", "=", pageForm.getUnionId());
userCnd.andEX("u.unitid", "=", pageForm.getUnitId());
userCnd.andEX("u.personType", "=", pageForm.getPersonType());
userCnd.andEX("u.userState", "=", pageForm.getUserState());
userCnd.andEX("u.loginname", "in", existsLoginNames);
sql.setCondition(userCnd);
Cnd cnd = Cnd.NEW();
cnd.and("groupId", "=", pageForm.getActivityGroupId());
if (!AuthUtil.hasAnyRoles("sysadmin,A06")) {
cnd.andEX("creator", "=", SecurityUtils.getUserId());
}
if (StrUtil.isNotBlank(id)) {
cnd.and("id", "=", id);
} else {
cnd.and(new Static("userId in (" + sql + ")"));
}
dao().clear(ActivityUserScope.class, cnd);
}
@Override
public int getScopeUserCount(Integer activityGroupId) {
return dao().count(ActivityUserScope.class, Cnd.where("groupId", "=", activityGroupId).and("userId", "=", SecurityUtils.getUserId()));
}
@Override
public void doExportUser(String props, ActivityBasicScopePageForm pageForm, HttpServletResponse response) {
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("人员名单.xlsx", StandardCharsets.UTF_8)));
Sql sql = Sqls.create("""
SELECT DISTINCT
( u.userId ) AS id,
u.loginName,
u.userName,
u.sex,
u.birthday,
u.mobile,
u.personType,
u.userState,
u.deptName AS deptName,
u.unionname AS unionName,
TIMESTAMPDIFF(
YEAR,
u.birthday,
CURDATE()) AS age,
actun.unionname AS activityUnionName
FROM
`user` u
LEFT JOIN activity_basic_unit actit ON actit.dept_id = u.deptId
LEFT JOIN activity_basic_union actun ON actit.union_id = actun.id
$condition
""");
Cnd cnd = Cnd.NEW();
Cnd dataCnd = pageDataCnd(pageForm, cnd);
sql.setCondition(dataCnd);
List<NutMap> map = listMap(sql);
List<SysDictData> userSexDicts = DictUtils.getDictCache("sys_user_sex");
List<SysDictData> userTypeDicts = DictUtils.getDictCache("user_type");
List<SysDictData> userStateDicts = DictUtils.getDictCache("user_state");
for (NutMap userMap : map) {
if (StrUtil.isNotBlank(userMap.getString("sex"))) {
String sex = userSexDicts.stream().filter(d -> d.getDictValue().equals(userMap.getString("sex")))
.findFirst().map(SysDictData::getDictLabel).orElse(null);
userMap.put("sex", sex);
}
if (StrUtil.isNotBlank(userMap.getString("personType"))) {
String personType = userTypeDicts.stream().filter(d -> d.getDictValue().equals(userMap.getString("personType")))
.findFirst().map(SysDictData::getDictLabel).orElse(null);
userMap.put("personType", personType);
}
if (StrUtil.isNotBlank(userMap.getString("userState"))) {
String userState = userStateDicts.stream().filter(d -> d.getDictValue().equals(userMap.getString("userState")))
.findFirst().map(SysDictData::getDictLabel).orElse(null);
userMap.put("userState", userState);
}
}
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
Map<String, String> propMap = Json.fromJson(Map.class, props);
propMap.forEach((k, v) -> {
entityList.add(new ExcelExportEntity(v, k, 40));
});
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map);
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param pageForm
* @param cnd
* @return org.nutz.dao.Cnd
* @description 给pageForm和设置活动人员用
* @author zhf
* @date 2023/1/11 10:01
*/
private Cnd pageDataCnd(ActivityBasicScopePageForm pageForm, Cnd cnd) {
if (StrUtil.isNotBlank(pageForm.getActivityGroupId())) {
cnd.and(new Static("u.userId NOT IN (SELECT userId FROM activity_user_scope where groupId = '%s')".formatted(pageForm.getActivityGroupId())));
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
}
if (Lang.isNotEmpty(pageForm.getMemberTypes())) {
if (pageForm.getMemberTypes().stream().anyMatch(v -> v.equals("工会会员"))) {
cnd.and("u.member", "=", 1);
}
if (pageForm.getMemberTypes().stream().anyMatch(v -> v.equals("福利会员"))) {
cnd.and("u.welfareMember", "=", 1);
}
}
if (pageForm.getMaxAge() != 0) {
cnd.and("TIMESTAMPDIFF(YEAR,u.birthday,CURDATE())", ">=", pageForm.getMinAge());
cnd.and("TIMESTAMPDIFF(YEAR,u.birthday,CURDATE())", "<=", pageForm.getMaxAge());
}
if (pageForm.getMinAge() != 0 && pageForm.getMaxAge() != 0 && pageForm.getMaxAge() > pageForm.getMinAge()) {
cnd.and(Cnd.cri().where().andBetween("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", pageForm.getMinAge(), pageForm.getMaxAge()));
}
if (StrUtil.isNotBlank(pageForm.getExistsLoginNameRedisKey()) && redisTemplate.hasKey(pageForm.getExistsLoginNameRedisKey())) {
List<String> loginNames = redisTemplate.opsForList().range(pageForm.getExistsLoginNameRedisKey(), 0, -1);
cnd.andEX("u.loginName", "in", loginNames);
}
cnd.andEX("actit.union_id", "=", pageForm.getActivityUnionId());
cnd.andEX("actit.dept_id", "=", pageForm.getActivityUnitId());
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
cnd.andEX("u.personType", "in", pageForm.getPersonTypes());
cnd.andEX("u.userState", "in", pageForm.getUserStates());
cnd.andEX("u.sex", "in", pageForm.getSexTypes());
cnd.andEX("u.unionGroupId", "=", pageForm.getUnionGroupId());
cnd.andEX("u.threeUnitId", "=", pageForm.getThreeUnitId());
List<FeignCnd> cndList = List.of(
new FeignCnd("jdhid", "=", pageForm.getTeacherMeetingId()),
new FeignCnd("roleid", "=", pageForm.getRoleIds())
);
List<SysUserRole> data = remoteUserRoleService.getUserRole(cndList).getData();
List<Long> RoleIds = data.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
if (Lang.isNotEmpty(pageForm.getTeacherMeetingId()) && Lang.isNotEmpty(pageForm.getRoleIds())) {
cnd.andEX("u.userId", "in", RoleIds);
}
if (StrUtil.isNotBlank(pageForm.getClubId())) {
List<Long> clubUserIdList = remoteClubService.getClubUserIdById(pageForm.getClubId()).getData();
if (Lang.isNotEmpty(clubUserIdList)) {
cnd.andEX("u.userId", "in", clubUserIdList);
} else {
cnd.and("u.userId", "is", null);
}
}
if (!AuthUtil.hasAnyRoles("sysadmin,A06")) {
if (AuthUtil.hasRole("H04")) {
}
}
return cnd;
}
}
@@ -0,0 +1,20 @@
package com.ruoyi.activity.service.impl.basic;
import com.ruoyi.activity.api.domain.basic.ActivityBasicSettings;
import com.ruoyi.activity.service.basic.ActivityBasicSettingsService;
import com.ruoyi.common.core.service.BaseServiceImpl;
import org.nutz.dao.Dao;
import org.springframework.stereotype.Service;
/**
* TODO
*
* @Author zhf
* @Date 2023/1/9 9:34
*/
@Service
public class ActivityBasicSettingsServiceImpl extends BaseServiceImpl<ActivityBasicSettings> implements ActivityBasicSettingsService {
public ActivityBasicSettingsServiceImpl(Dao dao) {
super(dao);
}
}

Some files were not shown because too many files have changed in this diff Show More