first commit
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
<?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-member</artifactId>
|
||||
|
||||
<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-system</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-api-staffService</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-api-member</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</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;
|
||||
|
||||
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 RuoYiMemberApplication
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/13 16:54
|
||||
* @Version 1.0
|
||||
*/
|
||||
@EnableCustomConfig
|
||||
@EnableCustomSwagger2
|
||||
@EnableRyFeignClients
|
||||
@SpringBootApplication
|
||||
public class RuoYiMemberApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(RuoYiMemberApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.ruoyi.member.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,21 @@
|
||||
package com.ruoyi.member.constant;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 数据源
|
||||
*
|
||||
* @author jug
|
||||
* @date 2022/12/30
|
||||
*/
|
||||
@Getter
|
||||
public enum Ds {
|
||||
/**
|
||||
* 主库
|
||||
*/
|
||||
STAFFSERVICE,
|
||||
/**
|
||||
* 系统
|
||||
*/
|
||||
SYSTEM,
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package com.ruoyi.member.controller.apply;
|
||||
|
||||
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.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberApplyRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.member.handle.MemberApplyAuditHandle;
|
||||
import com.ruoyi.member.service.MemberApplyRecordService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName MemberApplyAuditController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/15 13:58
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RequestMapping("/applyBranchAudit")
|
||||
@RestController
|
||||
public class MemberApplyBranchUnionAuditController {
|
||||
|
||||
@Autowired
|
||||
private MemberApplyRecordService memberApplyRecordService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:apply:branchUnionAudit:list")
|
||||
public AjaxResult pageData(@RequestBody MemberAuditPageForm memberAuditPageForm) {
|
||||
return AjaxResult.success(memberApplyRecordService.branchUnionAuditPageData(memberAuditPageForm));
|
||||
}
|
||||
|
||||
@PostMapping("/doAudit")
|
||||
@RequiresPermissions("member:apply:branchUnionAudit:list")
|
||||
public AjaxResult doAudit(@RequestBody Audit audit, @RequestParam String id, @RequestParam boolean flag) {
|
||||
if (!AuthUtil.hasAnyRoles("admin, A06, H04, gh01")) {
|
||||
return AjaxResult.error("您没有权限进行此操作");
|
||||
}
|
||||
audit.setAuditPass(flag);
|
||||
MemberApplyRecord memberApplyRecord = memberApplyRecordService.fetch(id);
|
||||
MemberApplyAuditHandle.AUDIT_UNION.next(memberApplyRecord, audit);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/doDelete")
|
||||
@RequiresPermissions("member:apply:branchUnionAudit:list")
|
||||
public AjaxResult doDelete(@RequestParam String id){
|
||||
memberApplyRecordService.delete(id);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
package com.ruoyi.member.controller.apply;
|
||||
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
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.member.api.domain.MemberApplyRecord;
|
||||
import com.ruoyi.member.service.MemberApplyRecordService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Dao;
|
||||
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.InputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberApplyController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/14 16:28
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/apply")
|
||||
@Slf4j
|
||||
public class MemberApplyController {
|
||||
|
||||
@Autowired
|
||||
private MemberApplyRecordService memberApplyRecordService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
/**
|
||||
* 分工会信息
|
||||
*/
|
||||
@RequestMapping("/applyInfo")
|
||||
@RequiresPermissions("member:apply")
|
||||
public AjaxResult applyInfo() {
|
||||
NutMap applyInfo = memberApplyRecordService.applyInfo();
|
||||
return AjaxResult.success(applyInfo);
|
||||
}
|
||||
|
||||
@RequestMapping("/currentStatus")
|
||||
@RequiresPermissions("member:apply")
|
||||
public AjaxResult currentStatus() {
|
||||
|
||||
// NutMap result = NutMap.NEW();
|
||||
//
|
||||
// Long userId = SecurityUtils.getUserId();
|
||||
//// SysUser sysUser = Daos.ext(dao, FieldFilter.create(SysUser.class, "member")).fetch(SysUser.class, userId);
|
||||
// SysUser sysUser = dao.fetch(SysUser.class, userId);
|
||||
// int member = sysUser.getMember() == null ? 0 : sysUser.getMember();
|
||||
// result.setv("isMember", member == 1);
|
||||
// if (member == 0) {
|
||||
// //查询是不是在申请中
|
||||
// MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId).desc("applyTime"));
|
||||
// dao.fetchLinks(applyRecord, "auditState");
|
||||
//
|
||||
//
|
||||
// if (applyRecord != null && MemberApplyState.NORMAL_MEMBER != applyRecord.getStateId()) {
|
||||
// result.setv("stateCode", applyRecord.getStateId());
|
||||
// result.setv("text", applyRecord.getAuditState().getStateName());
|
||||
// result.setv("status", "ING");
|
||||
// if (applyRecord.getStateId() == MemberApplyState.UNION_FAIL || applyRecord.getStateId() == MemberApplyState.SCHOOL_UNION_FAIL) {
|
||||
// result.setv("applyAgain", true);
|
||||
// result.setv("text", "(" + applyRecord.getAuditState().getStateName() + ")重新申请");
|
||||
// } else {
|
||||
// result.setv("applyAgain", false);
|
||||
// }
|
||||
// } else {
|
||||
// result.setv("status", "START");
|
||||
// result.setv("text", "申请加入");
|
||||
// result.setv("apply", true);
|
||||
// }
|
||||
// } else {
|
||||
// result.setv("status", "END");
|
||||
// result.setv("text", "正式会员");
|
||||
// result.setv("apply", false);
|
||||
// }
|
||||
//
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 申请
|
||||
*
|
||||
* @param sysUser 系统用户
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/doApply")
|
||||
@RequiresPermissions("member:apply")
|
||||
public AjaxResult doApply(@RequestBody SysUser sysUser) {
|
||||
memberApplyRecordService.doApply(sysUser);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/doCancel")
|
||||
@RequiresPermissions("member:apply")
|
||||
public AjaxResult doCancel(@RequestParam String recordId) {
|
||||
memberApplyRecordService.delete(recordId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 历史申请记录
|
||||
*/
|
||||
@GetMapping("/history/{id}")
|
||||
@RequiresPermissions("member:apply")
|
||||
public AjaxResult history(@PathVariable Long id) {
|
||||
List<NutMap> history = memberApplyRecordService.history(id);
|
||||
return AjaxResult.success(history);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单条变更的详细信息
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/historyOne/{id}")
|
||||
@RequiresPermissions(value = {"member:apply", "member:apply:branchUnionAudit:list"}, logical = Logical.OR)
|
||||
public AjaxResult historyOne(@PathVariable String id) {
|
||||
MemberApplyRecord applyRecord = memberApplyRecordService.fetch(id);
|
||||
memberApplyRecordService.fetchLinks(applyRecord, null);
|
||||
return AjaxResult.success(applyRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单条申请记录
|
||||
*/
|
||||
@GetMapping("/applyProcessInfo/{id}")
|
||||
@RequiresPermissions("member:apply:branchUnionAudit:list")
|
||||
public AjaxResult applyProcessInfo(@PathVariable String id) {
|
||||
MemberApplyRecord applyRecord = memberApplyRecordService.applyProcessInfo(id);
|
||||
return AjaxResult.success(applyRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打印
|
||||
*
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/printForm")
|
||||
@RequiresPermissions("member:apply:branchUnionAudit:list")
|
||||
public void printForm(HttpServletResponse response) {
|
||||
try (ServletOutputStream outputStream = response.getOutputStream();
|
||||
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("docTemplate/memberApply.docx");) {
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("会员申请表.docx", StandardCharsets.UTF_8)));
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
NutMap dataMap = memberApplyRecordService.printFormData(userId);
|
||||
assert inputStream != null;
|
||||
XWPFTemplate.compile(inputStream, Configure.builder().build()).render(dataMap, outputStream);
|
||||
} catch (Exception e) {
|
||||
log.error("提案汇总导出失败{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
package com.ruoyi.member.controller.apply;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
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.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberApplyRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.member.handle.MemberApplyAuditHandle;
|
||||
import com.ruoyi.member.service.MemberApplyRecordService;
|
||||
import com.ruoyi.staffService.api.RemoteWelfareService;
|
||||
import com.ruoyi.staffService.api.constant.welfare.WelfareMemberMode;
|
||||
import com.ruoyi.staffService.api.domain.welfare.WelfareList;
|
||||
import com.ruoyi.staffService.api.domain.welfare.WelfareProject;
|
||||
import com.ruoyi.system.api.RemoteSysLocalProcessService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
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.ioc.aop.Aop;
|
||||
import org.nutz.lang.Lang;
|
||||
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.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberApplyAuditController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/15 13:58
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RequestMapping("/applyMasterAudit")
|
||||
@RestController
|
||||
public class MemberApplyMasterUnionAuditController {
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
@Autowired
|
||||
private RemoteWelfareService remoteWelfareService;
|
||||
@Autowired
|
||||
private RemoteSysLocalProcessService localProcessService;
|
||||
@Autowired
|
||||
private MemberApplyRecordService memberApplyRecordService;
|
||||
|
||||
/**
|
||||
* 分页数据
|
||||
*/
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:apply:masterUnionAudit:list")
|
||||
public AjaxResult pageData(@RequestBody MemberAuditPageForm memberAuditPageForm) {
|
||||
return AjaxResult.success(memberApplyRecordService.masterUnionAuditPageData(memberAuditPageForm));
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核
|
||||
*/
|
||||
@PostMapping("/doAudit")
|
||||
@RequiresPermissions("member:apply:masterUnionAudit:list")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@DSTransactional
|
||||
public AjaxResult doAudit(@RequestBody Audit audit, @RequestParam String id,
|
||||
@RequestParam boolean flag, @RequestParam boolean insertWelfareList,
|
||||
@RequestParam(value = "projectId", required = false) String projectId) {
|
||||
if (!AuthUtil.hasAnyRoles("admin, A06")) {
|
||||
return AjaxResult.error("您没有权限进行此操作");
|
||||
}
|
||||
audit.setAuditPass(flag);
|
||||
MemberApplyRecord memberApplyRecord = memberApplyRecordService.fetch(id);
|
||||
MemberApplyAuditHandle.AUDIT_SCHOOL.next(memberApplyRecord, audit);
|
||||
|
||||
Sql sql = Sqls.create("select * from `user` where userId = @userId and member = 1").setParam("userId", memberApplyRecord.getUserId());
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao.execute(sql);
|
||||
NutMap user = (NutMap) sql.getResult();
|
||||
if (Lang.isNotEmpty(user) && insertWelfareList) {
|
||||
// 新会员,将其添加到福利项目中
|
||||
WelfareList welfareList = new WelfareList();
|
||||
welfareList.setProjectId(projectId);
|
||||
welfareList.setUserId(String.valueOf(memberApplyRecord.getUserId()));
|
||||
welfareList.setLoginName(user.getString("loginName"));
|
||||
welfareList.setUserName(user.getString("userName"));
|
||||
welfareList.setSex(user.getString("sex"));
|
||||
welfareList.setUserState(user.getString("userState"));
|
||||
welfareList.setPersonType(user.getString("personType"));
|
||||
welfareList.setMobile(user.getString("mobile"));
|
||||
welfareList.setUnionId(user.getString("unionId"));
|
||||
welfareList.setUnionName(user.getString("unionName"));
|
||||
welfareList.setUnitId(user.getString("deptId"));
|
||||
welfareList.setUnitName(user.getString("deptName"));
|
||||
welfareList.setThreeUnitId(user.getString("threeUnitId"));
|
||||
welfareList.setThreeUnitName(user.getString("threeUnitName"));
|
||||
welfareList.setUnionGroupId(user.getString("unionGroupId"));
|
||||
welfareList.setUnionGroupName(user.getString("unionGroupName"));
|
||||
remoteWelfareService.insertWelfareList(List.of(welfareList));
|
||||
|
||||
dao.update(SysUser.class, Chain.make("welfareMember", WelfareMemberMode.NORMAL.getCode())
|
||||
.add("welfareMemberJoinTime", DateUtil.now()),Cnd.where("userId","=",user.getString("userId")));
|
||||
}
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/doDelete")
|
||||
@RequiresPermissions("member:apply:masterUnionAudit:list")
|
||||
public AjaxResult doDelete(@RequestParam String id) {
|
||||
memberApplyRecordService.delete(id);
|
||||
localProcessService.deleteProcessInstance("MEMBER_APPLY@" + id, SecurityConstants.INNER);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/getWelfareProjectList")
|
||||
@RequiresPermissions("member:apply:masterUnionAudit:list")
|
||||
public AjaxResult getWelfareProjectList() {
|
||||
R<List<WelfareProject>> listR = remoteWelfareService.listAfootWelfare(null);
|
||||
return AjaxResult.success(listR.getData());
|
||||
}
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.ruoyi.member.controller.change;
|
||||
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberChangeRecordService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName MemberApplyAuditController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/15 13:58
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RequestMapping("/changeBranchAudit")
|
||||
@RestController
|
||||
public class MemberChangeBranchUnionAuditController {
|
||||
|
||||
@Autowired
|
||||
private MemberChangeRecordService memberChangeRecordService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:change:branchUnionAudit:list")
|
||||
public AjaxResult pageData(@RequestBody MemberAuditPageForm memberAuditPageForm) {
|
||||
return AjaxResult.success(memberChangeRecordService.branchUnionAuditPageData(memberAuditPageForm));
|
||||
}
|
||||
|
||||
@PostMapping("/doAudit")
|
||||
@RequiresPermissions("member:change:branchUnionAudit:list")
|
||||
public AjaxResult doAudit(@RequestBody Audit audit, @RequestParam String id, @RequestParam boolean flag) {
|
||||
audit.setAuditPass(flag);
|
||||
MemberChangeRecord memberChangeRecord = memberChangeRecordService.fetch(id);
|
||||
MemberChangeAuditHandle.UNION.next(memberChangeRecord, audit);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/doDelete")
|
||||
@RequiresPermissions("member:change:branchUnionAudit:list")
|
||||
public AjaxResult doDelete(@RequestParam String id){
|
||||
memberChangeRecordService.delete(id);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
package com.ruoyi.member.controller.change;
|
||||
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
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.member.api.constant.MemberChangeApplyState;
|
||||
import com.ruoyi.member.api.constant.MemberChangeOrigin;
|
||||
import com.ruoyi.member.api.constant.MemberChangeRecordMode;
|
||||
import com.ruoyi.member.api.constant.UserChangeType;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.dto.MemberChangeDto;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberChangeRecordService;
|
||||
import com.ruoyi.system.api.RemoteSysLocalProcessService;
|
||||
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.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @ClassName MemberChangeController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/16 9:40
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/change")
|
||||
public class MemberChangeController {
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
@Autowired
|
||||
private RemoteSysLocalProcessService localProcessService;
|
||||
@Autowired
|
||||
private MemberChangeRecordService memberChangeRecordService;
|
||||
|
||||
/**
|
||||
* 申请信息
|
||||
*/
|
||||
@RequestMapping("/applyInfo")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult applyInfo() {
|
||||
return AjaxResult.success(memberChangeRecordService.applyInfo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前状态
|
||||
*/
|
||||
@RequestMapping("/currentStatus")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult currentStatus() {
|
||||
NutMap result = NutMap.NEW();
|
||||
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
Sql sql = Sqls.create("select member from sys_user where user_id = @id");
|
||||
sql.setParam("id", userId);
|
||||
NutMap userMap = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map());
|
||||
int member = userMap.getInt("member", 0);
|
||||
boolean isMember = member == 1;
|
||||
|
||||
MemberChangeRecord changeRecord = memberChangeRecordService.fetch(Cnd.where("userId", "=", userId).desc("applyTime"));
|
||||
dao.fetchLinks(changeRecord, "auditState");
|
||||
|
||||
if (changeRecord != null) {
|
||||
if (changeRecord.getStateId() == MemberChangeApplyState.UNION_FAIL
|
||||
|| changeRecord.getStateId() == MemberChangeApplyState.SCHOOL_UNION_FAIL) {
|
||||
result.setv("reApply", true);
|
||||
result.setv("text", "(" + changeRecord.getAuditState().getStateName() + ")重新申请");
|
||||
} else if (changeRecord.getStateId() == MemberChangeApplyState.SUCCESS && isMember) {
|
||||
result.setv("apply", true);
|
||||
} else {
|
||||
result.setv("text", changeRecord.getAuditState().getStateName());
|
||||
}
|
||||
result.setv("changeRecord", changeRecord);
|
||||
} else {
|
||||
result.setv("apply", isMember);
|
||||
}
|
||||
result.setv("isMember", isMember);
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请变更
|
||||
*/
|
||||
@PostMapping("/doChangeByAdmin")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult doChangeByAdmin(@RequestBody MemberChangeRecord memberChangeRecord) {
|
||||
if (memberChangeRecord.getType() == UserChangeType.NEW.getCode()) {
|
||||
return AjaxResult.warn("您已经入职!");
|
||||
}
|
||||
if (memberChangeRecord.getType() == UserChangeType.UNIT_CHANGE.getCode()) {
|
||||
if (memberChangeRecord.getCurrentUnitId().equals(memberChangeRecord.getOriginUnitId())) {
|
||||
return AjaxResult.warn("请选择不同的单位!");
|
||||
}
|
||||
}
|
||||
if (memberChangeRecord.getType() != UserChangeType.UNIT_CHANGE.getCode()) {
|
||||
memberChangeRecord.setCurrentUnitId(null);
|
||||
memberChangeRecord.setCurrentUnionId(null);
|
||||
}
|
||||
memberChangeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.PERSONAL.getCode());
|
||||
MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请变更
|
||||
*/
|
||||
@PostMapping("/doChange")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult doChange(@RequestBody MemberChangeDto memberChangeDto) {
|
||||
MemberChangeRecord memberChangeRecord = memberChangeDto.getMemberChangeRecord();
|
||||
// if (Objects.equals(memberChangeRecord.getType(), UserChangeType.NEW.getCode())) {
|
||||
// return AjaxResult.warn("您已经入职!");
|
||||
// }
|
||||
if (Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
|
||||
if (memberChangeRecord.getCurrentUnitId().equals(memberChangeRecord.getOriginUnitId())) {
|
||||
return AjaxResult.warn("请选择不同的单位!");
|
||||
}
|
||||
}
|
||||
memberChangeRecordService.doApply(memberChangeRecord, memberChangeDto.getSysUser());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*
|
||||
* @param recordId 记录id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/doCancel")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult doCancel(@RequestParam String recordId) {
|
||||
memberChangeRecordService.delete(recordId);
|
||||
localProcessService.deleteProcessInstance("MEMBER_CHANGE@" + recordId, SecurityConstants.INNER);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 历史变更记录
|
||||
*/
|
||||
@GetMapping("/history/{id}")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult history(@PathVariable Long id) {
|
||||
List<NutMap> history = memberChangeRecordService.history(id);
|
||||
return AjaxResult.success(history);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单条变更的详细信息
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/historyOne/{id}")
|
||||
@RequiresPermissions("member:change")
|
||||
public AjaxResult historyOne(@PathVariable String id) {
|
||||
MemberChangeRecord changeRecord = memberChangeRecordService.fetch(id);
|
||||
memberChangeRecordService.fetchLinks(changeRecord, null);
|
||||
return AjaxResult.success(changeRecord);
|
||||
}
|
||||
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package com.ruoyi.member.controller.change;
|
||||
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberChangeRecordService;
|
||||
import com.ruoyi.system.api.RemoteSysLocalProcessService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName MemberApplyAuditController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/15 13:58
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RequestMapping("/changeMasterAudit")
|
||||
@RestController
|
||||
public class MemberChangeMasterUnionAuditController {
|
||||
|
||||
@Autowired
|
||||
private RemoteSysLocalProcessService localProcessService;
|
||||
@Autowired
|
||||
private MemberChangeRecordService memberChangeRecordService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:change:masterUnionAudit:list")
|
||||
public AjaxResult pageData(@RequestBody MemberAuditPageForm memberAuditPageForm) {
|
||||
return AjaxResult.success(memberChangeRecordService.masterUnionAuditPageData(memberAuditPageForm));
|
||||
}
|
||||
|
||||
@PostMapping("/doAudit")
|
||||
@RequiresPermissions("member:change:masterUnionAudit:list")
|
||||
public AjaxResult doAudit(@RequestBody Audit audit, @RequestParam String id, @RequestParam boolean flag) {
|
||||
audit.setAuditPass(flag);
|
||||
MemberChangeRecord memberChangeRecord = memberChangeRecordService.fetch(id);
|
||||
MemberChangeAuditHandle.SCHOOL.next(memberChangeRecord, audit);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/doDelete")
|
||||
@RequiresPermissions("member:change:masterUnionAudit:list")
|
||||
public AjaxResult doDelete(@RequestParam String id){
|
||||
memberChangeRecordService.delete(id);
|
||||
localProcessService.deleteProcessInstance("MEMBER_CHANGE@" + id, SecurityConstants.INNER);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
package com.ruoyi.member.controller.change;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.api.constant.MemberChangeRecordMode;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.service.MemberChangeRecordService;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
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 java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberChangeRecordController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 10:01
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/changeRecords")
|
||||
public class MemberChangeRecordController {
|
||||
|
||||
@Autowired
|
||||
private MemberChangeRecordService memberChangeRecordService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:change:changeRecords:list")
|
||||
public AjaxResult pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) Integer year,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) String campus,
|
||||
@RequestParam(required = false) String sex,
|
||||
@RequestParam(required = false) String userType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) Integer changeType,
|
||||
@RequestParam(required = false) Integer applyOrigin
|
||||
) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(mcr.applyTime)", "=", year);
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderBy(), pageForm.getPageOrderName())) {
|
||||
cnd.desc("mcr.applyTime");
|
||||
} else {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
}
|
||||
cnd.and("mcr.recordMode", "=", MemberChangeRecordMode.MEMBER.getCode());
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("u.deptId", "=", unitId);
|
||||
cnd.andEX("u.personType", "=", userType);
|
||||
cnd.andEX("mcr.type", "=", changeType);
|
||||
cnd.andEX("mcr.applyOrigin", "=", applyOrigin);
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.asc("u.loginName");
|
||||
cnd.asc("u.userState");
|
||||
}
|
||||
|
||||
|
||||
Pagination pagination = memberChangeRecordService.history(pageForm, cnd);
|
||||
List<NutMap> list = pagination.getList();
|
||||
list.forEach(v -> {
|
||||
v.setv("unionAudit", dao.fetch(Audit.class, Cnd.where("id", "=", v.getString("unionAuditId"))));
|
||||
v.setv("schoolAudit", dao.fetch(Audit.class, Cnd.where("id", "=", v.getString("schoolAuditId"))));
|
||||
});
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
}
|
||||
+337
@@ -0,0 +1,337 @@
|
||||
package com.ruoyi.member.controller.change;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.api.constant.*;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberChangeRecordService;
|
||||
import com.ruoyi.system.api.domain.SysConfig;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
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.util.NutMap;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @ClassName MemberChangeSeniorManageController
|
||||
* @Description 高级管理
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/16 16:35
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/changeSeniorManage")
|
||||
public class MemberChangeSeniorManageController {
|
||||
|
||||
@Autowired
|
||||
private MemberChangeRecordService memberChangeRecordService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:change:seniorManage:list")
|
||||
public AjaxResult pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) Long threeUnitId,
|
||||
@RequestParam(required = false) String campus,
|
||||
@RequestParam(required = false) String sex,
|
||||
@RequestParam(required = false) String userType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String changeType,
|
||||
@RequestParam(required = false) Integer changed,
|
||||
@RequestParam(required = false) String isMember,
|
||||
@RequestParam(value = "retireTime", required = false) String retireTime,
|
||||
@RequestParam(required = false, name = "changeDateRange[]") String[] changeDateRange
|
||||
) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.*,
|
||||
his.changeType,
|
||||
his.changeTime,
|
||||
IF
|
||||
( his.id IS NULL, FALSE, TRUE ) hasHis,
|
||||
state.stateId,
|
||||
state.stateName,
|
||||
state.stateColor,
|
||||
IF
|
||||
( mcr.userId IS NULL OR mcr.stateId = @success, TRUE, FALSE ) apply,
|
||||
IF
|
||||
( mcr.stateId IN ( $failStates ), TRUE, FALSE ) reApply
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginname
|
||||
LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
|
||||
$condition
|
||||
""")
|
||||
.setParam("recordMode", MemberChangeRecordMode.MEMBER.getCode())
|
||||
.setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION)
|
||||
.setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL)
|
||||
.setParam("success", MemberChangeApplyState.SUCCESS)
|
||||
.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(isMember)) {
|
||||
if ("1".equals(isMember)) {
|
||||
cnd.and("u.member", "=", 1);
|
||||
} else {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("u.member", "is", null);
|
||||
seg.or("u.member", "=", "");
|
||||
seg.or("u.member", "=", 0);
|
||||
cnd.and(seg);
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(retireTime)) {
|
||||
cnd.and("DATE_FORMAT(u.retireTime, '%Y-%m')", "=", retireTime);
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasAnyRole("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
seg.or("unionGroupId", "is", null);
|
||||
cnd.and(seg);
|
||||
}
|
||||
}
|
||||
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("u.deptId", "=", unitId);
|
||||
cnd.andEX("u.unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("u.threeUnitId", "=", threeUnitId);
|
||||
cnd.andEX("u.campus", "=", campus);
|
||||
cnd.andEX("u.sex", "=", sex);
|
||||
cnd.andEX("u.personType", "=", userType);
|
||||
cnd.andEX("u.userState", "=", userState);
|
||||
|
||||
if (Lang.isNotEmpty(changeDateRange)) {
|
||||
String startTime = changeDateRange[0];
|
||||
String endTime = changeDateRange[1];
|
||||
cnd.and(new Static(String.format("Date(his.changeTime) >= '%s' and Date(his.changeTime) <= '%s'", startTime, endTime)));
|
||||
}
|
||||
|
||||
cnd.andEX("his.changeType", "=", changeType);
|
||||
|
||||
if (changed != null) {
|
||||
cnd.and(new Static(changed == 1 ? "his.user_name is not null" : "his.user_name is null"));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
}
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.userId");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = memberChangeRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
for (NutMap nutMap : list) {
|
||||
if (!SecurityUtils.isAdmin()) {
|
||||
nutMap.put("idcard", "******");
|
||||
}
|
||||
}
|
||||
pagination.setList(list);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
@PostMapping("/doChange")
|
||||
@RequiresPermissions("member:change:seniorManage:list")
|
||||
public AjaxResult doChange(@RequestBody MemberChangeRecord memberChangeRecord) {
|
||||
// if (Objects.equals(memberChangeRecord.getType(), UserChangeType.NEW.getCode())) {
|
||||
// return AjaxResult.warn("您已经入职!");
|
||||
// }
|
||||
if (Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
|
||||
boolean unionGroupEnable = Optional.ofNullable(memberChangeRecordService.dao().fetch(SysConfig.class, Cnd.where("configKey", "=", "sys.unionGroup"))).map(v -> v.getConfigValue()).orElse("false").equals("true");
|
||||
|
||||
if (unionGroupEnable && memberChangeRecord.getCurrentThreeUnitId().equals(memberChangeRecord.getOriginThreeUnitId())) {
|
||||
return AjaxResult.warn("请选择不同的单位!");
|
||||
} else if (!unionGroupEnable && memberChangeRecord.getCurrentUnitId().equals(memberChangeRecord.getOriginUnitId())) {
|
||||
return AjaxResult.warn("请选择不同的单位!");
|
||||
}
|
||||
}
|
||||
// if (!Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
|
||||
// memberChangeRecord.setCurrentUnitId(null);
|
||||
// memberChangeRecord.setCurrentUnionId(null);
|
||||
// }
|
||||
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditPass(true);
|
||||
|
||||
memberChangeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
if (AuthUtil.hasRole("admin, A06")) {
|
||||
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
|
||||
memberChangeRecord = MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
|
||||
MemberChangeAuditHandle.SCHOOL.next(memberChangeRecord, audit);
|
||||
} else {
|
||||
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
|
||||
memberChangeRecord = MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
|
||||
MemberChangeAuditHandle.UNION.next(memberChangeRecord, audit);
|
||||
}
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量修改校区
|
||||
*
|
||||
* @param sysUsers 系统用户
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/batchModifyCampus")
|
||||
@RequiresPermissions("member:change:seniorManage:list")
|
||||
public AjaxResult batchModifyCampus(@RequestBody List<SysUser> sysUsers) {
|
||||
memberChangeRecordService.dao().update(sysUsers, "campus");
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户单位调整
|
||||
*
|
||||
* @param changeRecords 更改记录
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/userUnitMove")
|
||||
@RequiresPermissions("member:change:seniorManage:list")
|
||||
public AjaxResult userUnitMove(@RequestBody List<MemberChangeRecord> changeRecords) {
|
||||
memberChangeRecordService.userUnitMove(changeRecords);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/getButtonNum")
|
||||
@RequiresPermissions("member:change:seniorManage:list")
|
||||
public AjaxResult getButtonNum(@RequestBody MemberPageForm pageForm,
|
||||
@RequestParam(required = false) String isMember,
|
||||
@RequestParam(value = "retireTime", required = false) String retireTime,
|
||||
@RequestParam(required = false) Integer changed,
|
||||
@RequestParam(required = false) Integer changeType) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
SUM(changeTypeNotNull) AS 'changeNum',
|
||||
SUM(changeTypeNull) AS 'notChangeNum',
|
||||
COUNT(DISTINCT userId) AS 'userSumNum',
|
||||
SUM(memberEqual1) AS 'memberNum',
|
||||
SUM(memberNotEqual1) AS 'notMemberNum'
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
u.userId,
|
||||
CASE WHEN his.changeType IS NOT NULL THEN 1 ELSE 0 END AS changeTypeNotNull,
|
||||
CASE WHEN his.changeType IS NULL THEN 1 ELSE 0 END AS changeTypeNull,
|
||||
CASE WHEN u.member = 1 THEN 1 ELSE 0 END AS memberEqual1,
|
||||
CASE WHEN u.member != 1 THEN 1 ELSE 0 END AS memberNotEqual1
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginName
|
||||
LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
|
||||
$condition
|
||||
) AS subquery
|
||||
""")
|
||||
.setParam("recordMode", MemberChangeRecordMode.MEMBER.getCode())
|
||||
.setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION)
|
||||
.setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL)
|
||||
.setParam("success", MemberChangeApplyState.SUCCESS)
|
||||
.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
// cnd.andEX("u.member", "=", isMember);
|
||||
if (StrUtil.isNotBlank(isMember)) {
|
||||
if ("1".equals(isMember)) {
|
||||
cnd.and("u.member", "=", 1);
|
||||
} else {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("u.member", "is", null);
|
||||
seg.or("u.member", "=", "");
|
||||
seg.or("u.member", "=", 0);
|
||||
cnd.and(seg);
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(retireTime)) {
|
||||
cnd.and("DATE_FORMAT(u.retireTime, '%Y-%m')", "=", retireTime);
|
||||
}
|
||||
|
||||
cnd.groupBy("u.userId");
|
||||
cnd.andEX("u.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("u.personType", "=", pageForm.getUserType());
|
||||
cnd.andEX("u.userState", "=", pageForm.getUserState());
|
||||
cnd.andEX("u.sex", "=", pageForm.getSex());
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("u.unionGroupId", "=", pageForm.getUnionGroupId());
|
||||
cnd.andEX("u.threeUnitId", "=", pageForm.getThreeUnitId());
|
||||
cnd.andEX("u.campus", "=", pageForm.getCampus());
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("u.unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
seg.or("u.unionGroupId", "is", null);
|
||||
cnd.and(seg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cnd.andEX("his.changeType", "=", changeType);
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
if ("changeTime".equals(pageForm.getPageOrderName()) || "changeType".equals(pageForm.getPageOrderName())) {
|
||||
cnd.orderBy("his." + pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.orderBy("u." + pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
}
|
||||
} else {
|
||||
cnd.asc("u.loginName");
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.asc("u.userState");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
NutMap numMap = memberChangeRecordService.fetch(sql);
|
||||
return AjaxResult.success(numMap);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/doDelete")
|
||||
public AjaxResult doDelete(@RequestParam Long userId) {
|
||||
UserMode.removeMemberRole(userId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
+351
@@ -0,0 +1,351 @@
|
||||
package com.ruoyi.member.controller.checkTask;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.api.constant.*;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.MemberCheckUnionTask;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberService;
|
||||
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.cri.SqlExpressionGroup;
|
||||
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.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工会小组审核
|
||||
*
|
||||
* @author jug
|
||||
* @date 2023/05/30
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/checkTask/branchUnionCheck")
|
||||
public class MemberBranchUnionCheckTaskController {
|
||||
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult pageData(@RequestBody MemberPageForm pageForm, @RequestParam(required = false) Integer isMember, @RequestParam(required = false) Integer changed, @RequestParam(required = false) Integer changeType) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.*,
|
||||
his.id as hisId,
|
||||
his.changeType,
|
||||
his.changeTime,
|
||||
IF
|
||||
( his.id IS NULL, FALSE, TRUE ) hasHis,
|
||||
TRUE AS flag,
|
||||
mcr.type,
|
||||
mcr_state.stateId stateId,
|
||||
mcr_state.stateName stateName,
|
||||
mcr_state.stateColor stateColor,
|
||||
IF(mcr.stateId = @changeUnitAuditing,TRUE,FALSE) changeUnitAuditing,
|
||||
IF(mcr.stateId = @changeUnitError,TRUE,FALSE) changeUnitError
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN (select * from member_change_record where (userId,applyTime) in (SELECT userId, MAX( applyTime ) FROM member_change_record GROUP BY userId)) mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginName
|
||||
LEFT JOIN audit_state mcr_state ON mcr_state.stateId = mcr.stateId
|
||||
$condition
|
||||
""").setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION).setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL);
|
||||
//查询出是在审核中还是审核拒绝了
|
||||
|
||||
// LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
|
||||
sql.setVar("states", Joiner.on(",").join(List.of(MemberApplyState.SCHOOL_UNION_FAIL)));
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("u.member", "=", isMember);
|
||||
|
||||
cnd.andEX("u.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("u.userState", "=", pageForm.getUserState());
|
||||
cnd.andEX("u.sex", "=", pageForm.getSex());
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("u.unionGroupId", "=", pageForm.getUnionGroupId());
|
||||
cnd.andEX("u.threeUnitId", "=", pageForm.getThreeUnitId());
|
||||
cnd.andEX("u.campus", "=", pageForm.getCampus());
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("u.unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
if (changed != null) {
|
||||
if (changed == 1) {
|
||||
cnd.and(new Static("his.user_name is not null"));
|
||||
} else {
|
||||
cnd.and(new Static("his.user_name is null"));
|
||||
}
|
||||
}
|
||||
|
||||
cnd.andEX("his.changeType", "=", changeType);
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.asc("u.userState");
|
||||
cnd.asc("u.loginName");
|
||||
cnd.asc("u.unionId");
|
||||
cnd.desc("his.changeTime");
|
||||
}
|
||||
cnd.groupBy("u.userId");
|
||||
sql.setCondition(cnd);
|
||||
return AjaxResult.success(memberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/getButtonNum")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult getButtonNum(@RequestBody MemberPageForm pageForm, @RequestParam(required = false) Integer isMember, @RequestParam(required = false) Integer changed, @RequestParam(required = false) Integer changeType) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
SUM(changeTypeNotNull) AS 'changeNum',
|
||||
SUM(changeTypeNull) AS 'notChangeNum',
|
||||
COUNT(DISTINCT userId) AS 'userSumNum',
|
||||
SUM(memberEqual1) AS 'memberNum',
|
||||
SUM(memberNotEqual1) AS 'notMemberNum'
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
u.userId,
|
||||
CASE WHEN his.changeType IS NOT NULL THEN 1 ELSE 0 END AS changeTypeNotNull,
|
||||
CASE WHEN his.changeType IS NULL THEN 1 ELSE 0 END AS changeTypeNull,
|
||||
CASE WHEN u.member = 1 THEN 1 ELSE 0 END AS memberEqual1,
|
||||
CASE WHEN u.member != 1 THEN 1 ELSE 0 END AS memberNotEqual1
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginName
|
||||
LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
|
||||
$condition
|
||||
) AS subquery
|
||||
""")
|
||||
.setParam("recordMode", MemberChangeRecordMode.MEMBER.getCode())
|
||||
.setParam("changeUnitAuditing", MemberChangeApplyState.SCHOOL_UNION)
|
||||
.setParam("changeUnitError", MemberChangeApplyState.SCHOOL_UNION_FAIL)
|
||||
.setParam("success", MemberChangeApplyState.SUCCESS)
|
||||
.setVar("failStates", Joiner.on(",").join(List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL)));
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("u.member", "=", isMember);
|
||||
cnd.groupBy("u.userId");
|
||||
cnd.andEX("u.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("u.userState", "=", pageForm.getUserState());
|
||||
cnd.andEX("u.sex", "=", pageForm.getSex());
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("u.unionGroupId", "=", pageForm.getUnionGroupId());
|
||||
cnd.andEX("u.threeUnitId", "=", pageForm.getThreeUnitId());
|
||||
cnd.andEX("u.campus", "=", pageForm.getCampus());
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("u.unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
cnd.andEX("his.changeType", "=", changeType);
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.asc("u.userState");
|
||||
sql.setCondition(cnd);
|
||||
NutMap numMap = memberService.fetch(sql);
|
||||
return AjaxResult.success(numMap);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 提交核对任务至校工会
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @param unionGroupId 工会小组id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/submitCheck")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult submitCheck(@RequestParam String taskId, @RequestParam(required = false) String unionGroupId) {
|
||||
Cnd cnd = Cnd.where("taskId", "=", taskId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
if (StrUtil.isBlank(unionGroupId) && AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.andEX("unionGroupId", "=", SecurityUtils.getUnionGroupId());
|
||||
}
|
||||
dao.update(MemberCheckUnionTask.class, Chain.make("isFinish", true), cnd);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交变更人员
|
||||
*
|
||||
* @param record 记录
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/doSubmitChangeUser")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult doSubmitChangeUser(@RequestBody MemberChangeRecord record) {
|
||||
record.setApplyOrigin(MemberChangeOrigin.UNION_GROUP.getCode());
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record = MemberChangeAuditHandle.CREATE.next(record, null);
|
||||
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditPass(true);
|
||||
audit.setAuditOpinion(record.getRemark());
|
||||
MemberChangeAuditHandle.UNION.next(record, audit);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 分工会核对任务状态
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @param unionGroupId 工会小组id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@GetMapping("/getUnionTaskStatus")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult getUnionTaskStatus(@RequestParam String taskId, @RequestParam(required = false) String unionGroupId) {
|
||||
Cnd cnd = Cnd.where("taskId", "=", taskId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
if (StrUtil.isBlank(unionGroupId) && AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.andEX("unionGroupId", "=", SecurityUtils.getUnionGroupId());
|
||||
}
|
||||
MemberCheckUnionTask unionTask = dao.fetch(MemberCheckUnionTask.class, cnd);
|
||||
boolean status = unionTask != null && unionTask.getIsFinish();
|
||||
return AjaxResult.success(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新核对
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/checkAgain")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult checkAgain(@RequestParam String taskId, @RequestParam(required = false) String unionGroupId) {
|
||||
Cnd cnd = Cnd.where("taskId", "=", taskId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
if (StrUtil.isBlank(unionGroupId) && AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.andEX("unionGroupId", "=", SecurityUtils.getUnionGroupId());
|
||||
}
|
||||
dao.update(MemberCheckUnionTask.class, Chain.make("isFinish", false), cnd);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/getChangeNumber")
|
||||
@RequiresPermissions("member:checkTask:branchUnionCheck")
|
||||
public AjaxResult getChangeNumber(@RequestBody MemberPageForm pageForm, @RequestParam(required = false) Integer member, @RequestParam(required = false) Boolean changed, @RequestParam(required = false) Integer welfareMember, @RequestParam(required = false) Integer changeType) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
(
|
||||
SELECT
|
||||
COUNT( DISTINCT u.userId )
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginname
|
||||
LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state mcr_state ON mcr_state.stateId = mcr.stateId
|
||||
$condition
|
||||
) `all`,
|
||||
(
|
||||
SELECT
|
||||
COUNT( DISTINCT u.userId )
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginname
|
||||
LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state mcr_state ON mcr_state.stateId = mcr.stateId
|
||||
$condition
|
||||
AND his.user_name IS NOT NULL
|
||||
) have,
|
||||
(
|
||||
SELECT
|
||||
COUNT( DISTINCT u.userId )
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginname
|
||||
LEFT JOIN member_change_record_latest mcr ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state mcr_state ON mcr_state.stateId = mcr.stateId
|
||||
$condition
|
||||
AND his.user_name IS NULL
|
||||
) `no`
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
cnd.and("1", "=", 1);
|
||||
|
||||
if (member != null && member != 1) {
|
||||
if (2 == member) {
|
||||
cnd.and("u.member", "=", MemberMode.NORMAL.getCode());
|
||||
} else if (3 == member) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.or("u.member", "is", null);
|
||||
group.or("u.member", "!=", MemberMode.NORMAL.getCode());
|
||||
cnd.and(group);
|
||||
}
|
||||
}
|
||||
|
||||
cnd.andEX("u.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("u.userState", "=", pageForm.getUserState());
|
||||
cnd.andEX("u.sex", "=", pageForm.getSex());
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("u.unionGroupId", "=", pageForm.getUnionGroupId());
|
||||
cnd.andEX("u.threeUnitId", "=", pageForm.getThreeUnitId());
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
cnd.and("u.unionGroupId", "=", SecurityUtils.getUnionGroupId());
|
||||
}
|
||||
|
||||
cnd.andEX("his.changeType", "=", changeType);
|
||||
sql.setCondition(cnd);
|
||||
NutMap nutMap = memberService.fetch(sql);
|
||||
return AjaxResult.success(nutMap);
|
||||
}
|
||||
|
||||
|
||||
public void doExportByUnion() {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
package com.ruoyi.member.controller.checkTask;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
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.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.MemberCheckTask;
|
||||
import com.ruoyi.member.api.domain.MemberCheckUnionTask;
|
||||
import com.ruoyi.member.service.MemberService;
|
||||
import com.ruoyi.system.api.domain.SysUnionGroup;
|
||||
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.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/checkTask/taskManage")
|
||||
public class MemberCheckTaskController {
|
||||
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:checkTask:taskManage")
|
||||
public AjaxResult pageData(@RequestBody PageForm pageForm, @RequestParam(required = false) Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
select * from member_check_task $condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("year", "=", year);
|
||||
sql.setCondition(cnd);
|
||||
return AjaxResult.success(memberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 做添加
|
||||
*
|
||||
* @param task 任务
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/doAdd")
|
||||
@RequiresPermissions("member:checkTask:taskManage")
|
||||
public AjaxResult doAdd(@RequestBody MemberCheckTask task) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(task.getStartTime());
|
||||
List<SysUnionGroup> unionGroups = dao.query(SysUnionGroup.class, null);
|
||||
dao.fetchLinks(unionGroups, null);
|
||||
|
||||
task.setYear(calendar.get(Calendar.YEAR));
|
||||
dao.insert(task);
|
||||
List<MemberCheckUnionTask> unionTasks = unionGroups.stream().map(v -> {
|
||||
MemberCheckUnionTask unionTask = new MemberCheckUnionTask();
|
||||
unionTask.setTaskId(task.getId());
|
||||
unionTask.setUnionId(v.getId());
|
||||
unionTask.setUnionGroupId(v.getId());
|
||||
unionTask.setUnionId(v.getUnionId());
|
||||
unionTask.setUnionName(v.getSysUnion().getUnionName());
|
||||
unionTask.setUnionCode(v.getSysUnion().getUnionCode());
|
||||
unionTask.setIsFinish(false);
|
||||
return unionTask;
|
||||
}).collect(Collectors.toList());
|
||||
dao.insert(unionTasks);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/doEdit")
|
||||
@RequiresPermissions("member:checkTask:taskManage")
|
||||
public AjaxResult doEdit(@RequestBody MemberCheckTask task) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(task.getStartTime());
|
||||
task.setYear(calendar.get(Calendar.YEAR));
|
||||
dao.updateIgnoreNull(task);
|
||||
return null;
|
||||
}
|
||||
|
||||
@PostMapping("/doDelete")
|
||||
@RequiresPermissions("member:checkTask:taskManage")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult doDelete(@RequestParam String id) {
|
||||
Assert.notBlank(id);
|
||||
dao.clear(MemberCheckTask.class, Cnd.where("id", "=", id));
|
||||
dao.clear(MemberCheckUnionTask.class, Cnd.where("taskId", "=", id));
|
||||
dao.clear(MemberChangeRecord.class, Cnd.where("taskId", "=", id));
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/getAllTask")
|
||||
public AjaxResult getAllTask(@RequestParam(required = false) Integer year) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("year", "=", year);
|
||||
return AjaxResult.success(dao.query(MemberCheckTask.class, cnd));
|
||||
}
|
||||
|
||||
}
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
package com.ruoyi.member.controller.checkTask;
|
||||
|
||||
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.member.api.constant.MemberChangeApplyState;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberService;
|
||||
import com.ruoyi.system.api.domain.SysDept;
|
||||
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;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/checkTask/schoolUnionCheck")
|
||||
public class MemberSchoolUnionCheckTaskController {
|
||||
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:checkTask:schoolUnionCheck")
|
||||
public AjaxResult pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam String taskId,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mcut.unionId,
|
||||
mcut.unionName,
|
||||
mcut.unionCode,
|
||||
mcut.isFinish,
|
||||
IF(mcut.isFinish is true,'是','否') as isFinishText,
|
||||
sum( CASE WHEN u.member = 1 THEN 1 ELSE 0 END ) AS memberNum,
|
||||
(SELECT count( 1 ) FROM member_change_record mcr WHERE mcr.originUnionId = mcut.unionId AND mcr.taskId = mcut.taskId AND mcr.stateId = @stateId) as notCheckNum,
|
||||
(SELECT COUNT( 1 ) FROM member_check_union_task WHERE unionid = gh.id and taskId = @taskId ) unionGroupNum,
|
||||
(SELECT COUNT( 1 ) FROM member_check_union_task WHERE isFinish = 1 AND unionid = gh.id and taskId = @taskId ) hasCheckUnionGroupNum,
|
||||
(SELECT COUNT( 1 ) FROM member_check_union_task WHERE isFinish = 0 AND unionid = gh.id and taskId = @taskId ) notCheckUnionGroupNum
|
||||
FROM
|
||||
member_check_union_task mcut
|
||||
LEFT JOIN `user` u ON u.unionId = mcut.unionId
|
||||
LEFT JOIN (select distinct unionId as id from member_check_union_task where taskId = @taskId) gh on gh.id = mcut.unionId
|
||||
$condition
|
||||
""");
|
||||
sql.setParam("stateId", MemberChangeApplyState.SCHOOL_UNION);
|
||||
sql.setParam("taskId", taskId);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("mcut.unionId", "=", unionId);
|
||||
cnd.and("mcut.taskId", "=", taskId);
|
||||
cnd.groupBy("mcut.unionId");
|
||||
cnd.asc("mcut.unionCode");
|
||||
sql.setCondition(cnd);
|
||||
return AjaxResult.success(memberService.listMap(sql));
|
||||
}
|
||||
|
||||
/**
|
||||
* 小组核对情况
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @param unionId 工会id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@RequestMapping("/unionGroupCheckDesc")
|
||||
@RequiresPermissions("member:checkTask:schoolUnionCheck")
|
||||
public AjaxResult pageData(@RequestParam String taskId, @RequestParam String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
sug.id,
|
||||
sug.groupName,
|
||||
sug.groupCode,
|
||||
mcut.isFinish,
|
||||
u.user_name as loginName,
|
||||
u.nick_name as userName,
|
||||
u.mobile\s
|
||||
FROM
|
||||
member_check_union_task mcut
|
||||
LEFT JOIN sys_union_group sug ON mcut.unionGroupId = sug.id
|
||||
LEFT JOIN sys_user_role sur ON sur.unionGroupId = sug.id\s
|
||||
AND sur.role_id = 112
|
||||
LEFT JOIN sys_user u ON u.user_id = sur.user_id
|
||||
WHERE mcut.unionId = @unionId AND mcut.taskId = @taskId
|
||||
ORDER BY mcut.isFinish ASC,sug.groupCode ASC
|
||||
""");
|
||||
sql.setParam("unionId", unionId);
|
||||
sql.setParam("taskId", taskId);
|
||||
List list = memberService.listMap(sql);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/getNotCheckUsers")
|
||||
@RequiresPermissions("member:checkTask:schoolUnionCheck")
|
||||
public AjaxResult getNotCheckUsers(@RequestParam String taskId, @RequestParam String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mcr.id,
|
||||
mcr.type,
|
||||
mcr.userId,
|
||||
mcr.originUnitId,
|
||||
mcr.currentUnitId,
|
||||
mcr.originThreeUnitId,
|
||||
mcr.currentThreeUnitId,
|
||||
u.username AS userName,
|
||||
u.loginname AS loginName,
|
||||
u.member,
|
||||
u.welfareMember,
|
||||
his.changeType,
|
||||
his.changeTime,
|
||||
state.stateId,
|
||||
state.stateName
|
||||
FROM
|
||||
member_change_record mcr
|
||||
LEFT JOIN `user` u ON u.userId = mcr.userId
|
||||
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
|
||||
LEFT JOIN user_history_latest his ON his.user_name = u.loginName
|
||||
WHERE
|
||||
mcr.taskId = @taskId
|
||||
AND mcr.originUnionId = @unionId
|
||||
AND mcr.stateId = @stateId
|
||||
""");
|
||||
sql.setParam("taskId", taskId);
|
||||
sql.setParam("unionId", unionId);
|
||||
sql.setParam("stateId", MemberChangeApplyState.SCHOOL_UNION);
|
||||
List<NutMap> userList = memberService.listMap(sql);
|
||||
|
||||
List<SysDept> units = dao.query(SysDept.class, Cnd.NEW());
|
||||
for (NutMap user : userList) {
|
||||
user.put("originUnitName", units.stream().filter(v -> v.getDeptId() == user.getLong("originUnitId")).findFirst().map(v -> v.getDeptName()).orElse("无单位"));
|
||||
user.put("currentUnitName", units.stream().filter(v -> v.getDeptId() == user.getLong("currentUnitId")).findFirst().map(v -> v.getDeptName()).orElse("无单位"));
|
||||
user.put("originThreeUnitName", units.stream().filter(v -> v.getDeptId() == user.getLong("originThreeUnitId")).findFirst().map(v -> v.getDeptName()).orElse("无单位"));
|
||||
user.put("currentThreeUnitName", units.stream().filter(v -> v.getDeptId() == user.getLong("currentThreeUnitId")).findFirst().map(v -> v.getDeptName()).orElse("无单位"));
|
||||
}
|
||||
return AjaxResult.success(userList);
|
||||
}
|
||||
|
||||
@PostMapping("/doAudit")
|
||||
@RequiresPermissions("member:checkTask:schoolUnionCheck")
|
||||
public AjaxResult doAudit(@RequestBody MemberChangeRecord record, @RequestParam(required = false) String auditOpinion, @RequestParam boolean flag) {
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditOpinion(auditOpinion);
|
||||
audit.setAuditPass(flag);
|
||||
MemberChangeAuditHandle.SCHOOL.next(dao.fetch(MemberChangeRecord.class, record.getId()), audit);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
package com.ruoyi.member.controller.common;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.member.service.MemberService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
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.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.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberCommonController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/16 10:42
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/common")
|
||||
public class MemberCommonController {
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@RequestMapping("getEnumSelect")
|
||||
public AjaxResult getEnumSelect(String enumName) {
|
||||
try {
|
||||
String enumPackage = "com.ruoyi.member.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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 成员信息
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@RequestMapping("/memberInfo/{id}")
|
||||
public AjaxResult memberInfo(@PathVariable Long id) {
|
||||
if (!AuthUtil.hasAnyRole("admin,A06,H04,unionGroupLeader") && !SecurityUtils.getUserId().equals(id)) {
|
||||
return AjaxResult.warn("没有权限");
|
||||
}
|
||||
Sql sql = Sqls.create("select * from user where userId = @id");
|
||||
sql.setParam("id", id);
|
||||
NutMap userMap = (NutMap) Daos.query(dao, sql.toString(), Sqls.callback.map());
|
||||
return AjaxResult.success(userMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@RequestMapping("/userInfo/{id}")
|
||||
public AjaxResult userInfo(@PathVariable Long id) {
|
||||
if (!AuthUtil.hasAnyRole("admin,A06,H04,unionGroupLeader") && !SecurityUtils.getUserId().equals(id)) {
|
||||
return AjaxResult.warn("没有权限");
|
||||
}
|
||||
SysUser user = dao.fetch(SysUser.class, Cnd.where("userId", "=", id));
|
||||
user.setPassword(null);
|
||||
return AjaxResult.success(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户信息2
|
||||
*
|
||||
* @param id id
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@RequestMapping("/userInfo2/{id}")
|
||||
public AjaxResult userInfo2(@PathVariable Long id) {
|
||||
if (!AuthUtil.hasAnyRole("admin,A06,H04,unionGroupLeader") && !SecurityUtils.getUserId().equals(id)) {
|
||||
return AjaxResult.warn("没有权限");
|
||||
}
|
||||
Sql sql = Sqls.create("select * from user where userId = @userId");
|
||||
sql.setParam("userId", id);
|
||||
Object user = Daos.query(dao, sql.toString(), Sqls.callback.map());
|
||||
return AjaxResult.success(user);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新成员
|
||||
*
|
||||
* @param user 用户
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/updateMember")
|
||||
public AjaxResult updateMember(@RequestBody SysUser user) {
|
||||
if (!AuthUtil.hasAnyRole("admin,A06,H04,unionGroupLeader") && !SecurityUtils.getUserId().equals(user.getUserId())) {
|
||||
return AjaxResult.warn("没有权限");
|
||||
}
|
||||
dao.updateIgnoreNull(user);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 补充成员
|
||||
*
|
||||
* @param user 用户
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/supplementMember")
|
||||
@RequiresPermissions("member:info:supplement")
|
||||
public AjaxResult supplementMember(@RequestBody SysUser user) {
|
||||
if (dao.count(SysUser.class, Cnd.where("userName", "=", user.getUserName())) > 0) {
|
||||
return AjaxResult.warn("用户名已存在");
|
||||
}
|
||||
memberService.supplementMember(user);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/hyPageData")
|
||||
public AjaxResult hyPageData(@RequestParam(required = false) String unitid,
|
||||
@RequestParam(required = false) String unionid,
|
||||
@RequestBody PageForm page){
|
||||
try {
|
||||
Sql sql = Sqls.create("SELECT u.userId,u.userName,u.loginName,u.sex,u.deptName,u.mobile from member u $condition");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
cnd.andEX("u.unionId", "=", unionid);
|
||||
|
||||
if (Strings.isNotBlank(unitid)) {
|
||||
cnd.and("u.deptId", "=", unitid);
|
||||
}
|
||||
if (Strings.isNotBlank(page.getSearchName()) && Strings.isNotBlank(page.getSearchKeyword())) {
|
||||
cnd.where().andLike(page.getSearchName(), page.getSearchKeyword());
|
||||
}
|
||||
if (StrUtil.isNotBlank(page.getPageOrderName()) && StrUtil.isNotBlank(page.getPageOrderBy())) {
|
||||
cnd.orderBy(page.getPageOrderName(), page.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
|
||||
} else {
|
||||
cnd.asc("u.deptId");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return AjaxResult.success(memberService.listPage(page.getPageNumber(), page.getPageSize(), sql));
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
package com.ruoyi.member.controller.dashBoard;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||
import com.ruoyi.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.service.MemberHistoryService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
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.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName MemberDashBoardController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 15:10
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/dashBoard")
|
||||
public class MemberDashBoardController {
|
||||
|
||||
@Autowired
|
||||
private MemberHistoryService memberHistoryService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
/**
|
||||
* 今年和去年的会员数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/memberNumber")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public AjaxResult memberNumber() {
|
||||
List<SysUser> member = dao.query(SysUser.class, Cnd.where("member", "=", MemberMode.NORMAL.getCode()));
|
||||
long maleCount = member.stream().filter(v -> null != v.getSex() && v.getSex().equals("0")).count();
|
||||
long femaleCount = member.stream().filter(v -> null != v.getSex() && v.getSex().equals("1")).count();
|
||||
int year = Calendar.getInstance().get(Calendar.YEAR);
|
||||
int lastYearMemberNum = dao.count("member_his", Cnd.where("year", "=", year - 1));
|
||||
Map<String, Integer> map = Map.of("memberNum", member.size(), "lastYearMemberNum", lastYearMemberNum,
|
||||
"maleCount", (int) maleCount, "femaleCount", (int) femaleCount);
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员增长趋势
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/growthTrend")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public AjaxResult growthTrend() {
|
||||
List<Map> result = new ArrayList<>();
|
||||
int year = Calendar.getInstance().get(Calendar.YEAR);
|
||||
for (int i = year - 5; i < year; i++) {
|
||||
int count = memberHistoryService.count(Sqls.create("select * from member_his where year = @year ").setParam("year", year));
|
||||
result.add(Map.of("label", i, "value", count));
|
||||
}
|
||||
result.add(Map.of("label", year, "value", memberHistoryService.count(Sqls.create("select count(1) from member"))));
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员占比
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/memberPercentage")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public Object memberPercentage() {
|
||||
int member = memberHistoryService.count(Sqls.create("select count(1) from member"));
|
||||
int user = memberHistoryService.count(Sqls.create("select count(1) from sys_user"));
|
||||
return AjaxResult.success(NumberUtil.div(member, user, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* 男女占比
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/memberSexPercentage")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public AjaxResult memberSexPercentage() {
|
||||
int men = memberHistoryService.count(Sqls.create("select count(1) from member where sex = '0' "));
|
||||
int women = memberHistoryService.count(Sqls.create("select count(1) from member where sex = '1' "));
|
||||
return AjaxResult.success(List.of(Map.of("type", "男", "value", men), Map.of("type", "女", "value", women)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 各工会会员数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/unionMember")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public AjaxResult unionMember() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
( SELECT count( 1 ) FROM member WHERE unionId = gh.id ) AS `value`\s
|
||||
FROM
|
||||
sys_union gh\s
|
||||
ORDER BY
|
||||
gh.unionCode
|
||||
""");
|
||||
List<NutMap> list = memberHistoryService.listMap(sql);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据人员类型查找会员数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/personTypeMember")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public AjaxResult personTypeMember() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
dict.dict_label as label,
|
||||
( SELECT count( 1 ) FROM member WHERE personType = dict.dict_value ) as `value`
|
||||
FROM
|
||||
sys_dict_data dict\s
|
||||
WHERE
|
||||
dict.dict_type = 'user_type'\s
|
||||
ORDER BY
|
||||
dict.dict_sort
|
||||
""");
|
||||
return AjaxResult.success(memberHistoryService.list(sql));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据在职状态查找会员数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/userStateMember")
|
||||
@RequiresPermissions("member:dashBoard:list")
|
||||
public AjaxResult userStateMember() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
dict.dict_label as `label`,
|
||||
( SELECT count( 1 ) FROM member WHERE personType = dict.dict_value ) as `value`
|
||||
FROM
|
||||
sys_dict_data dict\s
|
||||
WHERE
|
||||
dict.dict_type = 'user_type'\s
|
||||
ORDER BY
|
||||
dict.dict_sort
|
||||
""");
|
||||
return AjaxResult.success(memberHistoryService.list(sql));
|
||||
}
|
||||
|
||||
}
|
||||
+343
@@ -0,0 +1,343 @@
|
||||
package com.ruoyi.member.controller.info;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.api.constant.*;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.service.MemberHistoryService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
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.cri.SqlExpressionGroup;
|
||||
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.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName MemberDataManageController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2023/8/24 10:55
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/info/dataManage")
|
||||
public class MemberDataManageController {
|
||||
|
||||
|
||||
@Autowired
|
||||
private MemberHistoryService memberHistoryService;
|
||||
|
||||
@Autowired
|
||||
private Dao dao;
|
||||
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:info:dataManage")
|
||||
public AjaxResult pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) String threeUnitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) String personType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String campus,
|
||||
@RequestParam(required = false) String startLoginNames,
|
||||
@RequestParam(required = false) String endLoginNames,
|
||||
@RequestParam(name = "personTypes[]", required = false) String[] personTypes,
|
||||
@RequestParam(name = "userStates[]", required = false) String[] userStates
|
||||
) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
userId,
|
||||
loginName,
|
||||
userName,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
personType,
|
||||
userState,
|
||||
unionCode,
|
||||
unionName,
|
||||
unionId,
|
||||
deptName,
|
||||
deptCode,
|
||||
deptId,
|
||||
threeDeptName,
|
||||
threeDeptCode,
|
||||
unionGroupName,
|
||||
mobile,
|
||||
birthday
|
||||
from
|
||||
`user`
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.desc("member");
|
||||
}
|
||||
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
cnd.andEX("deptId", "=", unitId);
|
||||
cnd.andEX("threeDeptId", "=", threeUnitId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("personType", "=", personType);
|
||||
cnd.andEX("userState", "=", userState);
|
||||
cnd.andEX("personType", "in", personTypes);
|
||||
cnd.andEX("userState", "in", userStates);
|
||||
|
||||
if (StrUtil.isNotBlank(startLoginNames)) {
|
||||
String[] loginNames = startLoginNames.split(",");
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String loginName : loginNames) {
|
||||
seg.orLikeL("loginName", loginName);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(endLoginNames)) {
|
||||
String[] loginNames = endLoginNames.split(",");
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String loginName : loginNames) {
|
||||
seg.orLikeR("loginName", loginName);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06,H03")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else {
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return AjaxResult.success(memberHistoryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@PostMapping("/setBirthdayByIdCard")
|
||||
@RequiresPermissions("member:info:dataManage")
|
||||
public AjaxResult setBirthdayByIdCard() {
|
||||
dao.update(Sqls.create("""
|
||||
UPDATE sys_user
|
||||
SET birthday = STR_TO_DATE(SUBSTRING(idcard, 7, 8), '%Y%m%d')
|
||||
WHERE (birthday IS NULL OR birthday = '') AND length(idCard)=18
|
||||
"""));
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@DSTransactional
|
||||
@PostMapping("/setMemberByCnd")
|
||||
@RequiresPermissions("member:info:dataManage")
|
||||
public AjaxResult setMemberByCnd(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) String threeUnitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) String personType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String campus,
|
||||
@RequestParam(required = false) String startLoginNames,
|
||||
@RequestParam(required = false) String endLoginNames,
|
||||
@RequestParam(name = "personTypes[]", required = false) String[] personTypes,
|
||||
@RequestParam(name = "userStates[]", required = false) String[] userStates) {
|
||||
|
||||
Sql sql = Sqls.create("SELECT userId from `user` $condition");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
cnd.andEX("DeptId", "=", unitId);
|
||||
cnd.andEX("threeDeptId", "=", threeUnitId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("personType", "=", personType);
|
||||
cnd.andEX("userState", "=", userState);
|
||||
cnd.andEX("personType", "in", personTypes);
|
||||
cnd.andEX("userState", "in", userStates);
|
||||
|
||||
if (StrUtil.isNotBlank(startLoginNames)) {
|
||||
String[] loginNames = startLoginNames.split(",");
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String loginName : loginNames) {
|
||||
seg.orLikeL("loginName", loginName);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(endLoginNames)) {
|
||||
String[] loginNames = endLoginNames.split(",");
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String loginName : loginNames) {
|
||||
seg.orLikeR("loginName", loginName);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06,H03")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionid", "=", SecurityUtils.getUnionId());
|
||||
} else {
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
cnd.and(Cnd.exps("member", "=", MemberMode.NONE.getCode()).or("member", "is", null));
|
||||
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> mapList = memberHistoryService.listMap(sql);
|
||||
List<Long> userList = mapList.stream().map(v -> v.getLong("userId")).collect(Collectors.toList());
|
||||
Long[] userIds = userList.toArray(new Long[0]);
|
||||
|
||||
//批量设置会员
|
||||
UserMode.addMemberRole(userIds);
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditPass(true);
|
||||
audit.setAuditOpinion("数据管理工具" + MemberOrigin.BATCH.getDescription());
|
||||
dao.insert(audit);
|
||||
|
||||
List<MemberChangeRecord> insertMemberChangeRecords = Arrays.stream(userIds).map(v -> {
|
||||
MemberChangeRecord record = new MemberChangeRecord();
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setType(UserChangeType.RESTORE.getCode());
|
||||
record.setUserId(v);
|
||||
record.setApplyTime(new Date());
|
||||
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setStateId(MemberChangeApplyState.SUCCESS);
|
||||
record.setSchoolAuditId(audit.getId());
|
||||
return record;
|
||||
}).collect(Collectors.toList());
|
||||
dao.insert(insertMemberChangeRecords);
|
||||
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@DSTransactional
|
||||
@PostMapping("/setWelfareMemberByCnd")
|
||||
@RequiresPermissions("member:info:dataManage")
|
||||
public AjaxResult setWelfareMemberByCnd(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) String threeUnitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) String personType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String campus,
|
||||
@RequestParam(required = false) String startLoginNames,
|
||||
@RequestParam(required = false) String endLoginNames,
|
||||
@RequestParam(name = "personTypes[]", required = false) String[] personTypes,
|
||||
@RequestParam(name = "userStates[]", required = false) String[] userStates) {
|
||||
|
||||
Sql sql = Sqls.create("SELECT userId from `user` $condition");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
cnd.andEX("DeptId", "=", unitId);
|
||||
cnd.andEX("threeDeptId", "=", threeUnitId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("personType", "=", personType);
|
||||
cnd.andEX("userState", "=", userState);
|
||||
cnd.andEX("personType", "in", personTypes);
|
||||
cnd.andEX("userState", "in", userStates);
|
||||
|
||||
if (StrUtil.isNotBlank(startLoginNames)) {
|
||||
String[] loginNames = startLoginNames.split(",");
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String loginName : loginNames) {
|
||||
seg.orLikeL("loginName", loginName);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(endLoginNames)) {
|
||||
String[] loginNames = endLoginNames.split(",");
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String loginName : loginNames) {
|
||||
seg.orLikeR("loginName", loginName);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06,H03")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionid", "=", SecurityUtils.getUnionId());
|
||||
} else {
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
cnd.and(Cnd.exps("welfareMember", "=", MemberMode.NONE.getCode()).or("welfareMember", "is", null));
|
||||
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> mapList = memberHistoryService.listMap(sql);
|
||||
List<Long> userList = mapList.stream().map(v -> v.getLong("userId")).collect(Collectors.toList());
|
||||
Long[] userIds = userList.toArray(new Long[0]);
|
||||
|
||||
dao.update(SysUser.class, Chain.make("welfareMember", MemberMode.NORMAL.getCode())
|
||||
.add("welfareMemberJoinTime", new Date()),
|
||||
Cnd.where("userId", "in", userIds).and("welfareMember", "is not", null).and("welfareMember", "!=", 1));
|
||||
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditPass(true);
|
||||
audit.setAuditOpinion("数据管理工具" + MemberOrigin.BATCH.getDescription());
|
||||
dao.insert(audit);
|
||||
List<MemberChangeRecord> insertMemberChangeRecords = Arrays.stream(userIds).map(v -> {
|
||||
MemberChangeRecord record = new MemberChangeRecord();
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setType(UserChangeType.RESTORE.getCode());
|
||||
record.setUserId(v);
|
||||
record.setApplyTime(new Date());
|
||||
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setStateId(MemberChangeApplyState.SUCCESS);
|
||||
record.setSchoolAuditId(audit.getId());
|
||||
return record;
|
||||
}).collect(Collectors.toList());
|
||||
dao.insert(insertMemberChangeRecords);
|
||||
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+651
@@ -0,0 +1,651 @@
|
||||
package com.ruoyi.member.controller.info;
|
||||
|
||||
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.collection.ListUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.IdcardUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.constant.Roles;
|
||||
import com.ruoyi.common.core.domain.TableColumn;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.log.annotation.Log;
|
||||
import com.ruoyi.common.log.enums.BusinessType;
|
||||
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 com.ruoyi.member.api.constant.MemberComparisonTemp;
|
||||
import com.ruoyi.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.api.constant.MemberPageForm;
|
||||
import com.ruoyi.member.api.constant.UserMode;
|
||||
import com.ruoyi.member.service.MemberHistoryService;
|
||||
import com.ruoyi.member.service.MemberService;
|
||||
import com.ruoyi.member.service.MemberStatisticQueryService;
|
||||
import com.ruoyi.system.api.RemoteDictService;
|
||||
import com.ruoyi.system.api.domain.SysDept;
|
||||
import com.ruoyi.system.api.domain.SysDictData;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import com.ruoyi.system.api.domain.SysUserRole;
|
||||
import com.ruoyi.system.api.domain.data.UserSource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.*;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
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.AdaptBy;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
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;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName MemberInfoArchivesController
|
||||
* @Description 会员档案管理
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 10:53
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/info/archives")
|
||||
@Slf4j
|
||||
public class MemberInfoArchivesController {
|
||||
|
||||
@Autowired
|
||||
private MemberHistoryService memberHistoryService;
|
||||
|
||||
@Autowired
|
||||
private MemberStatisticQueryService memberStatisticQueryService;
|
||||
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@Autowired
|
||||
private RemoteDictService remoteDictService;
|
||||
|
||||
@Autowired
|
||||
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
||||
|
||||
/**
|
||||
* year年是否备份过
|
||||
*/
|
||||
@GetMapping("/getMemberHistoryNum/{year}")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
public AjaxResult getMemberHistoryNum(@PathVariable("year") Integer year) {
|
||||
return AjaxResult.success(memberHistoryService.count(Cnd.where("year", "=", year)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 存档
|
||||
*/
|
||||
@PostMapping("/doArchive")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
@Log(title = "会员-高级管理-备份会员", businessType = BusinessType.INSERT)
|
||||
public AjaxResult doArchive(@RequestParam Integer year) {
|
||||
memberHistoryService.archive(year);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
public AjaxResult pageData(@RequestBody MemberPageForm pageForm) {
|
||||
Sql sql = Sqls.create("SELECT * from `user` $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("unionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("deptId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("unionGroupId", "=", pageForm.getUnionGroupId());
|
||||
cnd.andEX("threeUnitId", "=", pageForm.getThreeUnitId());
|
||||
cnd.andEX("sex", "=", pageForm.getSex());
|
||||
cnd.andEX("personType", "in", pageForm.getPersonTypes());
|
||||
cnd.andEX("userState", "in", pageForm.getUserStates());
|
||||
cnd.andEX("member", "=", MemberMode.NORMAL.getCode());
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getRetireTime())) {
|
||||
cnd.and("DATE_FORMAT(retireTime, '%Y-%m')", "=", pageForm.getRetireTime());
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.asc("unionId");
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.asc("loginName");
|
||||
cnd.asc("userState");
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = memberHistoryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
for (NutMap nutMap : list) {
|
||||
if(!SecurityUtils.isAdmin()) {
|
||||
nutMap.put("idcard", "******");
|
||||
}
|
||||
}
|
||||
pagination.setList(list);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新身份证生日
|
||||
*
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@RequestMapping("updateBirthdayByIdCard")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
public AjaxResult updateBirthdayByIdCard() {
|
||||
FieldFilter fieldFilter = FieldFilter.create(SysUser.class, "userId|idcard|birthday");
|
||||
Dao extDao = Daos.ext(memberStatisticQueryService.dao(), fieldFilter);
|
||||
List<SysUser> users = extDao.query(SysUser.class, Cnd.where("idcard", "is not", null).and("idcard", "!=", ""));
|
||||
users.forEach(u -> {
|
||||
DateTime birthDate = IdcardUtil.getBirthDate(u.getIdcard());
|
||||
u.setBirthday(birthDate);
|
||||
});
|
||||
|
||||
List<List<SysUser>> avgList = ListUtil.splitAvg(users, 10);
|
||||
avgList.forEach(a -> {
|
||||
threadPoolTaskExecutor.execute(() -> extDao.update(a, fieldFilter));
|
||||
});
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/exportMember")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
public void exportMember(HttpServletResponse response, @RequestBody MemberPageForm pageForm) {
|
||||
try (ServletOutputStream outputStream = response.getOutputStream()) {
|
||||
List<NutMap> memberList = memberStatisticQueryService.exportList(pageForm);
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
List<SysDictData> dictDataList = memberStatisticQueryService.dao().query(SysDictData.class, Cnd.where("dictType", "in", new String[]{"sys_user_sex", "user_type", "user_state"}));
|
||||
String[] sys_user_sexes = dictDataList.stream().filter(v -> v.getDictType().equals("sys_user_sex")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
String[] user_types = dictDataList.stream().filter(v -> v.getDictType().equals("user_type")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
String[] user_states = dictDataList.stream().filter(v -> v.getDictType().equals("user_state")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
|
||||
for (TableColumn prop : pageForm.getProps()) {
|
||||
if(!SecurityUtils.isAdmin() && "idcard".equals(prop.getProp())) {
|
||||
continue;
|
||||
}
|
||||
ExcelExportEntity excelExportEntity = new ExcelExportEntity(prop.getLabel(), prop.getProp(), 20);
|
||||
switch (prop.getProp()) {
|
||||
case "sex" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(sys_user_sexes, "_null"));
|
||||
}
|
||||
case "personType" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(user_types, "_null"));
|
||||
}
|
||||
case "userState" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(user_states, "_null"));
|
||||
}
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
entityList.add(excelExportEntity);
|
||||
}
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, memberList);
|
||||
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) {
|
||||
e.printStackTrace();
|
||||
log.error("会员存档固定格式导出失败{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 下载模板
|
||||
*
|
||||
* @param response 响应
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/downLoadTemplate")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
public void downLoadTemplate(HttpServletResponse response) {
|
||||
try (ServletOutputStream outputStream = response.getOutputStream()) {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
entityList.add(new ExcelExportEntity("工号", "userName", 20));
|
||||
entityList.add(new ExcelExportEntity("姓名", "nickName", 20));
|
||||
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, new ArrayList<>());
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/importComparison")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
@RequiresRoles(value = {"admin", "A06"}, logical = Logical.OR)
|
||||
public AjaxResult importComparison(@RequestParam MultipartFile file) {
|
||||
try {
|
||||
//获取文件数据
|
||||
List<MemberComparisonTemp> memberImportList = ExcelImportUtil.importExcel(file.getInputStream(), MemberComparisonTemp.class, new ImportParams());
|
||||
//工号为空,错误记录
|
||||
List<MemberComparisonTemp> loginNameNullList = memberImportList.stream().filter(v -> Strings.isBlank(v.getUserName())).collect(Collectors.toList());
|
||||
//工号不为空的人员
|
||||
List<String> hasLoginNameList = memberImportList.stream().filter(member -> StrUtil.isNotBlank(member.getUserName())).map(member -> member.getUserName().trim()).collect(Collectors.toList());
|
||||
List<MemberComparisonTemp> memberTempList = memberImportList.stream().filter(v -> Strings.isNotBlank(v.getUserName())).collect(Collectors.toList());
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasAnyRole("admin,A06")) {
|
||||
if (AuthUtil.hasAnyRoles("H04,gh01")) {
|
||||
cnd.and("dept_id", "in", Sqls.create("select dept_id from sys_dept where union_id = @unionId").setParam("unionId", SecurityUtils.getUnionId()));
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("threeUnitId", "in", Sqls.create("select dept_id from sys_dept where union_group_id = @union_group_id").setParam("union_group_id", SecurityUtils.getUnionGroupId()));
|
||||
}
|
||||
}
|
||||
List<SysUser> userList = memberHistoryService.dao().query(SysUser.class, cnd);
|
||||
//系统用户,判断是否存在
|
||||
// Map<String, Sys_user> userMap = userList.stream().collect(Collectors.toMap(Sys_user::getLoginname, v -> v));
|
||||
List<String> userLoginNameList = userList.stream().map(SysUser::getUserName).collect(Collectors.toList());
|
||||
|
||||
//错误记录
|
||||
loginNameNullList.forEach(v -> {
|
||||
v.setErrorInfo("工号为空,查询不到此用户!");
|
||||
});
|
||||
List<MemberComparisonTemp> errorInfos = new ArrayList<>(loginNameNullList);
|
||||
|
||||
//查会员
|
||||
List<SysUser> memberUserList = userList.stream().filter(v -> Lang.isNotEmpty(v.getMember()) && v.getMember() == 1).collect(Collectors.toList());
|
||||
|
||||
//系统中为会员,导入名单中不存在
|
||||
List<SysUser> users = memberUserList.stream().filter(v -> !hasLoginNameList.contains(v.getUserName())).collect(Collectors.toList());
|
||||
users.forEach(v -> {
|
||||
MemberComparisonTemp memberTemp = new MemberComparisonTemp();
|
||||
memberTemp.setUserName(v.getUserName());
|
||||
memberTemp.setNickName(v.getNickName());
|
||||
memberTemp.setErrorInfo("系统中为会员,导入名单中不存在");
|
||||
errorInfos.add(memberTemp);
|
||||
});
|
||||
|
||||
//查非会员
|
||||
List<SysUser> unMemberList = userList.stream().filter(v -> v.getMember() == null || v.getMember() != 1).collect(Collectors.toList());
|
||||
List<String> unMemberLoginNameList = unMemberList.stream().map(SysUser::getUserName).collect(Collectors.toList());
|
||||
memberTempList.forEach(v -> {
|
||||
if (userLoginNameList.contains(v.getUserName().trim())) {
|
||||
if (!unMemberLoginNameList.contains(v.getUserName().trim())) {
|
||||
v.setErrorInfo("名单中是会员,系统中不是会员");
|
||||
}
|
||||
} else {
|
||||
//获取不到该工号
|
||||
v.setErrorInfo("系统中不存在此用户");
|
||||
}
|
||||
});
|
||||
|
||||
if (Lang.isNotEmpty(errorInfos)) {
|
||||
NutMap nutMap = NutMap.NEW();
|
||||
nutMap.setv("totalCount", memberImportList.size());
|
||||
nutMap.setv("errorCount", errorInfos.size());
|
||||
nutMap.setv("errorList", errorInfos.stream().map(v -> {
|
||||
return NutMap.NEW().addv("工号", v.getUserName()).addv("姓名", v.getNickName()).addv("错误原因", v.getErrorInfo());
|
||||
}).collect(Collectors.toList()));
|
||||
return AjaxResult.success("比对成功", nutMap);
|
||||
}
|
||||
|
||||
return AjaxResult.success();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 下载模板
|
||||
*
|
||||
* @param response 响应
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/downLoadMemberTemplate")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
public void downLoadMemberTemplate(HttpServletResponse response) {
|
||||
try (ServletOutputStream outputStream = response.getOutputStream()) {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
entityList.add(new ExcelExportEntity("工号", "userName", 20));
|
||||
entityList.add(new ExcelExportEntity("姓名", "nickName", 20));
|
||||
entityList.add(new ExcelExportEntity("性别", "sex", 10));
|
||||
entityList.add(new ExcelExportEntity("联系方式", "mobile", 10));
|
||||
entityList.add(new ExcelExportEntity("身份证号", "idCard", 30));
|
||||
entityList.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
entityList.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
entityList.add(new ExcelExportEntity("单位编号", "deptCode", 20));
|
||||
entityList.add(new ExcelExportEntity("单位名称", "deptName", 20));
|
||||
entityList.add(new ExcelExportEntity("科室编号", "threeUnitCode", 20));
|
||||
entityList.add(new ExcelExportEntity("科室名称", "threeUnitName", 20));
|
||||
entityList.add(new ExcelExportEntity("是否会员", "isMember", 20));
|
||||
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, new ArrayList<>());
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/importMember")
|
||||
@RequiresPermissions("member:info:archives")
|
||||
@RequiresRoles(value = {"admin", "A06"}, logical = Logical.OR)
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public AjaxResult importMember(@RequestParam MultipartFile file, @RequestParam boolean isFlag) {
|
||||
try {
|
||||
List<MemberComparisonTemp> memberImportList = ExcelImportUtil.importExcel(file.getInputStream(), MemberComparisonTemp.class, new ImportParams());
|
||||
//获取系统用户
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasAnyRole("admin,A06")) {
|
||||
if (AuthUtil.hasAnyRoles("H04,gh01")) {
|
||||
cnd.and("dept_id", "in", Sqls.create("select dept_id from sys_dept where union_id = @unionId").setParam("unionId", SecurityUtils.getUnionId()));
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("threeUnitId", "in", Sqls.create("select dept_id from sys_dept where union_group_id = @union_group_id").setParam("union_group_id", SecurityUtils.getUnionGroupId()));
|
||||
}
|
||||
}
|
||||
List<SysUser> dataUserList = memberHistoryService.dao().query(SysUser.class, cnd);
|
||||
Map<String, SysUser> userMap = dataUserList.stream().collect(Collectors.toMap(SysUser::getUserName, v -> v));
|
||||
|
||||
List<SysDept> unitList = memberHistoryService.dao().query(SysDept.class, Cnd.where("unit_level", "is not", null).and("unit_level", "!=", ""));
|
||||
|
||||
//单位名称,单位Id
|
||||
Map<String, Long> unitNameLevelTwoMap = unitList.stream().filter(v -> v.getUnitLevel() == 2).collect(Collectors.toMap(SysDept::getDeptName, SysDept::getDeptId));
|
||||
|
||||
//单位编号,单位Id
|
||||
Map<String, Long> unitCodeMap = unitList.stream().collect(Collectors.toMap(SysDept::getDeptCode, SysDept::getDeptId));
|
||||
|
||||
//性别
|
||||
Map<String, String> sexMap = remoteDictService.dictType("sys_user_sex").getData().stream().collect(Collectors.toMap(v -> v.getDictLabel(), v -> v.getDictValue()));
|
||||
|
||||
//在职状态
|
||||
Map<String, String> userStateMap = remoteDictService.dictType("user_state").getData().stream().collect(Collectors.toMap(v -> v.getDictLabel(), v -> v.getDictValue()));
|
||||
|
||||
//人员类型
|
||||
Map<String, String> personTypeMap = remoteDictService.dictType("user_type").getData().stream().collect(Collectors.toMap(v -> v.getDictLabel(), v -> v.getDictValue()));
|
||||
|
||||
//系统中有此用户,修改
|
||||
List<Long> needUpdateUserIds = new ArrayList<>();
|
||||
|
||||
//系统中没有,新增
|
||||
List<String> needInsertUser = new ArrayList<>();
|
||||
|
||||
//赋予角色
|
||||
List<SysUserRole> userRoles = new ArrayList<>();
|
||||
|
||||
//返回错误记录
|
||||
List<MemberComparisonTemp> errorInfos = new ArrayList<>();
|
||||
|
||||
List<SysUser> insertOrUpdateUserList = new ArrayList<>();
|
||||
|
||||
//需要删除掉会员角色的用户id集合
|
||||
List<Long> removeMemberUserIds = new ArrayList<>();
|
||||
|
||||
for (MemberComparisonTemp v : memberImportList) {
|
||||
if (StrUtil.isNotBlank(v.getUserName())) {
|
||||
v.setUserName(v.getUserName().trim());
|
||||
} else {
|
||||
v.setErrorInfo("工号不能为空!");
|
||||
continue;
|
||||
}
|
||||
|
||||
Long deptId = memberService.getDeptId(unitCodeMap, unitNameLevelTwoMap, v.getDeptCode(), v.getDeptName());
|
||||
if (deptId == null) {
|
||||
v.setErrorInfo("单位编号或单位名称有误,请确保其准确!");
|
||||
errorInfos.add(v);
|
||||
continue;
|
||||
}
|
||||
|
||||
//判断在职状态合法
|
||||
if (StrUtil.isNotBlank(v.getUserState()) && !userStateMap.containsKey(v.getUserState())) {
|
||||
Set<String> userStateKeys = userStateMap.keySet();
|
||||
v.setErrorInfo("在职状态有误,请确保其准确!【" + String.join(",", userStateKeys) + "】");
|
||||
errorInfos.add(v);
|
||||
continue;
|
||||
}
|
||||
|
||||
//判断人员类型合法
|
||||
if (StrUtil.isNotBlank(v.getPersonType()) && !personTypeMap.containsKey(v.getPersonType())) {
|
||||
Set<String> personTypeKeys = personTypeMap.keySet();
|
||||
v.setErrorInfo("人员类型有误,请确保其准确!【" + String.join(",", personTypeKeys) + "】");
|
||||
errorInfos.add(v);
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<String, Long> unitNameLevelThreeMap = unitList.stream().filter(item -> item.getParentId().equals(deptId) && item.getUnitLevel() == 3).collect(Collectors.toMap(SysDept::getDeptName, SysDept::getDeptId));
|
||||
|
||||
// 获取三级单位ID
|
||||
Long threeUnitId = memberService.getDeptId(unitCodeMap, unitNameLevelThreeMap, v.getThreeUnitCode(), v.getThreeUnitName());
|
||||
if (threeUnitId == null) {
|
||||
String threeUnitNames = unitList.stream().filter(x -> x.getParentId().equals(deptId)).map(SysDept::getDeptName).collect(Collectors.joining(";"));
|
||||
v.setErrorInfo("科室编号或科室名称有误,请确保其准确!【" + threeUnitNames + "】");
|
||||
errorInfos.add(v);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (v.getIsMember() == null) {
|
||||
v.setErrorInfo("是否会员不能为空,请填写是或否");
|
||||
errorInfos.add(v);
|
||||
continue;
|
||||
}
|
||||
|
||||
//判断是否在系统中
|
||||
SysUser user = userMap.get(v.getUserName());
|
||||
|
||||
//初始化用户
|
||||
if (user == null) {
|
||||
user = new SysUser();
|
||||
UserMode.initUser(user);
|
||||
needInsertUser.add(user.getUserName());
|
||||
}
|
||||
|
||||
//设置excel列的数据
|
||||
user.setNickName(v.getNickName());
|
||||
if(StrUtil.isNotBlank(v.getSex())) user.setSex(StrUtil.blankToDefault(sexMap.get(v.getSex()), "2"));
|
||||
if (StrUtil.isNotBlank(v.getMobile())) user.setMobile(v.getMobile());
|
||||
if (StrUtil.isNotBlank(v.getIdCard())) user.setIdcard(v.getIdCard());
|
||||
if (StrUtil.isNotBlank(v.getPersonType())) user.setPersonType(personTypeMap.get(v.getPersonType()));
|
||||
if (StrUtil.isNotBlank(v.getUserState())) user.setUserState(userStateMap.get(v.getUserState()));
|
||||
user.setDeptId(deptId);
|
||||
user.setThreeUnitId(threeUnitId);
|
||||
user.setMember("是".equals(v.getIsMember()) ? 1 : 0);
|
||||
|
||||
insertOrUpdateUserList.add(user);
|
||||
}
|
||||
|
||||
List<List<SysUser>> splitInsertOrUpdateUserList = ListUtil.split(insertOrUpdateUserList, 500);
|
||||
|
||||
AtomicInteger count = new AtomicInteger(splitInsertOrUpdateUserList.size());
|
||||
CountDownLatch latch = new CountDownLatch(count.get());
|
||||
|
||||
for (List<SysUser> splitUserSource : splitInsertOrUpdateUserList) {
|
||||
threadPoolTaskExecutor.execute(() -> {
|
||||
try {
|
||||
memberService.dao().insertOrUpdate(splitUserSource);
|
||||
} catch (Exception e) {
|
||||
log.error("Error inserting user sources", e);
|
||||
} finally {
|
||||
latch.countDown();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
latch.await();
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
//删除会员角色
|
||||
memberService.dao().clear(SysUserRole.class, Cnd.where("roleId", "=", Roles.MEMBER));
|
||||
|
||||
//新增用户赋值普通角色
|
||||
if (Lang.isNotEmpty(needInsertUser)) {
|
||||
Sql newUserSql = Sqls.create("select user_id from sys_user where username in (@needInsertUser)");
|
||||
newUserSql.setParam("needInsertUser", needInsertUser);
|
||||
newUserSql.setCallback(Sqls.callback.maps());
|
||||
memberService.dao().execute(newUserSql);
|
||||
List<NutMap> newUserSqlList = newUserSql.getList(NutMap.class);
|
||||
List<Long> newUserIds = newUserSqlList.stream().map(user -> user.getLong("user_id")).collect(Collectors.toList());
|
||||
|
||||
List<SysUserRole> newUserRoles = newUserIds.stream().map(userId -> {
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
sysUserRole.setUserId(userId);
|
||||
sysUserRole.setRoleId(Roles.COMMON);
|
||||
return sysUserRole;
|
||||
}).collect(Collectors.toList());
|
||||
memberService.dao().insert(newUserRoles);
|
||||
}
|
||||
|
||||
//根据用户表的member添加会员角色
|
||||
Sql memberUserSql = Sqls.create("select user_id from sys_user where member = 1");
|
||||
memberUserSql.setCallback(Sqls.callback.maps());
|
||||
memberService.dao().execute(memberUserSql);
|
||||
List<NutMap> memberUserSqlList = memberUserSql.getList(NutMap.class);
|
||||
List<Long> memberUserIds = memberUserSqlList.stream().map(user -> user.getLong("user_id")).collect(Collectors.toList());
|
||||
|
||||
|
||||
List<SysUserRole> memberUserRoles = memberUserIds.stream().map(userId -> {
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
sysUserRole.setUserId(userId);
|
||||
sysUserRole.setRoleId(Roles.MEMBER);
|
||||
return sysUserRole;
|
||||
}).collect(Collectors.toList());
|
||||
// memberService.dao().insert(memberUserRoles);
|
||||
|
||||
List<List<SysUserRole>> splitMemberUserRoles = ListUtil.split(memberUserRoles, 500);
|
||||
for (List<SysUserRole> memberUserRole : splitMemberUserRoles) {
|
||||
threadPoolTaskExecutor.execute(() -> {
|
||||
memberService.dao().insert(memberUserRole);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// //需要删除角色的用户ID
|
||||
// List<Long> doCleanRoleUsers = needInsertUser.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
||||
// doCleanRoleUsers.addAll(needUpdateUserIds);
|
||||
// memberHistoryService.dao().clear(SysUserRole.class, Cnd.where("userId", "in", doCleanRoleUsers).and("roleId", "=", Roles.MEMBER));
|
||||
// //新增会员或者普通角色
|
||||
// if (userRoles.size() >= 500) {
|
||||
// memberService.largeQuantitiesInsert(userRoles, 1, false);
|
||||
// } else {
|
||||
// memberService.dao().insert(userRoles);
|
||||
// }
|
||||
//
|
||||
// //系统中存在就修改
|
||||
// memberService.dao().update(SysUser.class, Chain.make("member", 1), Cnd.where("user_id", "in", needUpdateUserIds));
|
||||
// //系统中不存在就新增
|
||||
// List<SysUser> insert = memberService.dao().insert(needInsertUser);
|
||||
//
|
||||
// //初始化没有userId,在此新增会员角色
|
||||
// if (Lang.isNotEmpty(insert)) {
|
||||
// List<SysUserRole> collect = insert.stream().map(v -> {
|
||||
// SysUserRole sysUserRole = new SysUserRole();
|
||||
// sysUserRole.setUserId(v.getUserId());
|
||||
// sysUserRole.setRoleId(Roles.MEMBER);
|
||||
// return sysUserRole;
|
||||
// }).collect(Collectors.toList());
|
||||
// memberService.dao().insert(collect);
|
||||
// }
|
||||
//
|
||||
// if (needUpdateUser.size() > 500) {
|
||||
// memberService.largeQuantitiesInsert(needInsertUser, 2, true);
|
||||
// } else {
|
||||
// memberService.dao().updateIgnoreNull(needUpdateUser);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// if (isFlag) {
|
||||
// List<String> importMemberLoginNames = memberImportList.stream().filter(member -> StrUtil.isNotBlank(member.getUserName())).map(member -> member.getUserName().trim()).collect(Collectors.toList());
|
||||
// memberService.dao().update(SysUser.class, Chain.make("member", 0), Cnd.where(SysUser::getUserName, "not in", importMemberLoginNames));
|
||||
// Sql deleteMemberRoleSql = Sqls.create("select user_id from sys_user where user_name not in (@importMemberLoginNames)");
|
||||
// deleteMemberRoleSql.setParam("importMemberLoginNames", importMemberLoginNames);
|
||||
// deleteMemberRoleSql.setCallback(Sqls.callback.maps());
|
||||
// memberService.dao().execute(deleteMemberRoleSql);
|
||||
// List<NutMap> memberRoleSqlList = deleteMemberRoleSql.getList(NutMap.class);
|
||||
// Long[] deleteMemberRoleUserIds = memberRoleSqlList.stream().map(v -> v.getLong("user_id")).toArray(Long[]::new);
|
||||
// UserMode.removeMemberRole(deleteMemberRoleUserIds);
|
||||
// }
|
||||
|
||||
|
||||
//如果有错误数据就返回给前端
|
||||
if (org.nutz.lang.Lang.isNotEmpty(errorInfos)) {
|
||||
NutMap nutMap = NutMap.NEW();
|
||||
nutMap.setv("totalCount", memberImportList.size());
|
||||
nutMap.setv("successCount", Math.max(memberImportList.size() - errorInfos.size(), 0));
|
||||
nutMap.setv("errorCount", errorInfos.size());
|
||||
nutMap.setv("errorList", errorInfos.stream().map(v -> {
|
||||
return NutMap.NEW().addv("工号", v.getUserName()).addv("姓名", v.getNickName()).addv("错误原因", v.getErrorInfo());
|
||||
}).collect(Collectors.toList()));
|
||||
return AjaxResult.success(nutMap);
|
||||
}
|
||||
|
||||
return AjaxResult.success("导入成功");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error(e.getMessage());
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
package com.ruoyi.member.controller.info;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.service.MemberInfoBatchMakeService;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName MemberInfoBatchMakeController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 14:45
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/info/batchMake")
|
||||
public class MemberInfoBatchMakeController {
|
||||
|
||||
@Autowired
|
||||
private MemberInfoBatchMakeService memberInfoBatchMakeService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:info:batchMake")
|
||||
public Object pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) Long unitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) Long threeUnitId,
|
||||
@RequestParam(required = false) String personType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String campus) {
|
||||
Sql sql = Sqls.create("SELECT * from `user` $condition");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and(Cnd.exps("member", "=", MemberMode.NONE.getCode()).or("member", "is", null));
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
cnd.andEX("deptId", "=", unitId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("threeUnitId", "=", threeUnitId);
|
||||
cnd.andEX("personType", "=", personType);
|
||||
cnd.andEX("userState", "=", userState);
|
||||
cnd.andEX("campus", "=", campus);
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.asc("loginName");
|
||||
cnd.asc("unionId");
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = memberInfoBatchMakeService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量设置会员
|
||||
*
|
||||
* @param userIds 用户ids
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/joinMemberFamily")
|
||||
@RequiresPermissions("member:info:batchMake")
|
||||
public AjaxResult joinMemberFamily(@RequestBody Long[] userIds) {
|
||||
memberInfoBatchMakeService.joinMemberFamily(userIds);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
package com.ruoyi.member.controller.info;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.service.MemberHistoryService;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName MemberInfoHistoryController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 15:41
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/info/history")
|
||||
public class MemberInfoHistoryController {
|
||||
|
||||
@Autowired
|
||||
private MemberHistoryService memberHistoryService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:info:history")
|
||||
public Object pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam Integer year,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) Long unitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) Long threeUnitId,
|
||||
@RequestParam(required = false) String personType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String campus) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.userId,
|
||||
u.loginName,
|
||||
u.userName,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.personType,
|
||||
u.userState,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode
|
||||
FROM
|
||||
`member_his` u
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("u.year", "=", year);
|
||||
cnd.andEX("u.deptId", "=", unitId);
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("u.unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("u.threeUnitId", "=", threeUnitId);
|
||||
cnd.andEX("u.personType", "=", personType);
|
||||
cnd.andEX("u.userState", "=", userState);
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.asc("u.loginName");
|
||||
cnd.asc("u.unionCode");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = memberHistoryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
package com.ruoyi.member.controller.info;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
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.member.api.constant.MemberOrigin;
|
||||
import com.ruoyi.member.service.MemberHistoryService;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @ClassName MemberInfoSupplementController
|
||||
* @Description 会员补录
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/21 10:44
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/info/supplement")
|
||||
public class MemberInfoSupplementController {
|
||||
|
||||
@Autowired
|
||||
private MemberHistoryService memberHistoryService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:info:supplement")
|
||||
public Object pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) Integer year,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) Long unitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) Long threeUnitId,
|
||||
@RequestParam(required = false) String personType,
|
||||
@RequestParam(required = false) String userState,
|
||||
@RequestParam(required = false) String campus) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.userId,
|
||||
u.loginName,
|
||||
u.userName,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.personType,
|
||||
u.userState,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode
|
||||
FROM
|
||||
`user` u
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("u.memberOrigin", "=", MemberOrigin.MAKE.getCode());
|
||||
|
||||
cnd.andEX("u.deptId", "=", unitId);
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("u.unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("u.threeUnitId", "=", threeUnitId);
|
||||
cnd.andEX("u.personType", "=", personType);
|
||||
cnd.andEX("u.userState", "=", userState);
|
||||
|
||||
if (!AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.and("u.unionGroupId", "in", SecurityUtils.getManageUnionGroupIds());
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.asc("u.loginName");
|
||||
cnd.asc("u.unionId");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = memberHistoryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
}
|
||||
+169
@@ -0,0 +1,169 @@
|
||||
package com.ruoyi.member.controller.statistic;
|
||||
|
||||
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.ArrayUtil;
|
||||
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.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.api.constant.MemberPageForm;
|
||||
import com.ruoyi.member.service.MemberStatisticQueryService;
|
||||
import com.ruoyi.system.api.domain.SysDictData;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.entity.annotation.ColType;
|
||||
import org.nutz.dao.entity.annotation.Column;
|
||||
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.http.HttpServletResponse;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticQueryController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 9:04
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/statisticQuery")
|
||||
@Slf4j
|
||||
public class MemberStatisticQueryController {
|
||||
|
||||
@Autowired
|
||||
private MemberStatisticQueryService memberStatisticQueryService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
@RequiresPermissions("member:statistic:query:list")
|
||||
public Object pageData(@RequestBody PageForm pageForm, @RequestParam(required = false) Integer year,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) Long unitId,
|
||||
@RequestParam(required = false) String unionGroupId,
|
||||
@RequestParam(required = false) Long threeUnitId,
|
||||
@RequestParam(required = false, name = "personTypes[]") List<String> personTypes,
|
||||
@RequestParam(required = false, name = "userStates[]") List<String> userStates,
|
||||
@RequestParam(required = false, name = "memberStatus[]") List<String> memberStatus,
|
||||
@RequestParam(required = false, name = "sexs[]") List<String> sexs,
|
||||
@RequestParam(required = false, name = "age[]") List<Integer> age,
|
||||
@RequestParam(required = false) String field, @RequestParam(required = false) String fieldInputValue,
|
||||
@RequestParam(required = false, name = "fieldSelectValues[]") Object[] fieldSelectValues,
|
||||
@RequestParam(required = false) String fieldDateValue,
|
||||
@RequestParam(required = false) String campus,
|
||||
@RequestParam(value = "retireTime",required = false) String retireTime) {
|
||||
Pagination pagination = memberStatisticQueryService.pageData(pageForm, year, unionId, unitId, unionGroupId, threeUnitId, personTypes, userStates, memberStatus, sexs, age, field, fieldInputValue, fieldSelectValues, fieldDateValue,retireTime);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
@RequestMapping("/exportMember")
|
||||
@RequiresPermissions("member:statistic:query:list")
|
||||
public void exportMember(HttpServletResponse response, @RequestParam String props, @RequestBody MemberPageForm pageForm) {
|
||||
try {
|
||||
List<NutMap> memberList = memberStatisticQueryService.exportList(pageForm);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
Map<String, String> propMap = Json.fromJson(Map.class, props);
|
||||
|
||||
List<SysDictData> dictDataList = memberStatisticQueryService.dao().query(SysDictData.class, Cnd.where("dictType", "in", new String[]{"sys_user_sex", "user_type", "user_state"}));
|
||||
String[] sys_user_sexes = dictDataList.stream().filter(v -> v.getDictType().equals("sys_user_sex")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
String[] user_types = dictDataList.stream().filter(v -> v.getDictType().equals("user_type")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
String[] user_states = dictDataList.stream().filter(v -> v.getDictType().equals("user_state")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
|
||||
for (String k : propMap.keySet()) {
|
||||
String v = propMap.get(k);
|
||||
if(!SecurityUtils.isAdmin() && "idcard".equals(k)) {
|
||||
continue;
|
||||
}
|
||||
ExcelExportEntity excelExportEntity = new ExcelExportEntity(v, k, 20);
|
||||
switch (k) {
|
||||
case "sex" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(sys_user_sexes, "_null"));
|
||||
}
|
||||
case "personType" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(user_types, "_null"));
|
||||
}
|
||||
case "userState" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(user_states, "_null"));
|
||||
}
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
entityList.add(excelExportEntity);
|
||||
}
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, memberList);
|
||||
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();
|
||||
log.error("导出会员信息失败{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 全部设置福利成员
|
||||
*
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/setWelfareMember")
|
||||
@RequiresPermissions("member:statistic:query:list")
|
||||
public AjaxResult setWelfareMember() {
|
||||
Dao dao = memberStatisticQueryService.dao();
|
||||
dao.update(SysUser.class, Chain.make("welfareMember", 1).add("welfareMemberJoinTime", new Date()), Cnd.where("member", "=", MemberMode.NORMAL.getCode()));
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/userFields")
|
||||
@RequiresPermissions("member:statistic:query:list")
|
||||
public AjaxResult userFields() {
|
||||
List<NutMap> fields = new ArrayList<>();
|
||||
fields.add(NutMap.NEW().addv("name", "工号").addv("key", "userName").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "姓名").addv("key", "nickName").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "用户邮箱").addv("key", "email").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "性别").addv("key", "sex").addv("type", ColType.VARCHAR).addv("ui_type", "select").addv("selectValues", DictUtils.getDictCache("sys_user_sex")));
|
||||
fields.add(NutMap.NEW().addv("name", "出生日期").addv("key", "birthday").addv("type", ColType.DATE).addv("ui_type", "date"));
|
||||
fields.add(NutMap.NEW().addv("name", "人员类型").addv("key", "personType").addv("type", ColType.VARCHAR).addv("ui_type", "select").addv("selectValues", DictUtils.getDictCache("user_type")));
|
||||
fields.add(NutMap.NEW().addv("name", "在职状态").addv("key", "userState").addv("type", ColType.VARCHAR).addv("ui_type", "select").addv("selectValues", DictUtils.getDictCache("user_state")));
|
||||
fields.add(NutMap.NEW().addv("name", "出生地点").addv("key", "birthPlace").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "职务").addv("key", "position").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "职称").addv("key", "jobTitle").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "籍贯").addv("key", "hometown").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "民族").addv("key", "nation").addv("type", ColType.VARCHAR).addv("ui_type", "select").addv("selectValues", DictUtils.getDictCache("user_state")));
|
||||
fields.add(NutMap.NEW().addv("name", "手机号码").addv("key", "mobile").addv("type", ColType.VARCHAR));
|
||||
fields.add(NutMap.NEW().addv("name", "学历").addv("key", "education").addv("type", ColType.VARCHAR).addv("ui_type", "select").addv("selectValues", DictUtils.getDictCache("sys_user_education")));
|
||||
fields.add(NutMap.NEW().addv("name", "政治面貌").addv("key", "political").addv("type", ColType.VARCHAR).addv("ui_type", "select").addv("selectValues", DictUtils.getDictCache("political_status")));
|
||||
fields.add(NutMap.NEW().addv("name", "入校时间").addv("key", "schoolTime").addv("type", ColType.DATE));
|
||||
fields.add(NutMap.NEW().addv("name", "身份证").addv("key", "idcard").addv("type", ColType.VARCHAR));
|
||||
|
||||
return AjaxResult.success(fields.stream().peek(v -> {
|
||||
if (v.getString("ui_type") == null) {
|
||||
v.put("ui_type", "input");
|
||||
}
|
||||
}).collect(Collectors.toList()));
|
||||
|
||||
}
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
package com.ruoyi.member.controller.statistic;
|
||||
|
||||
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.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||
import com.ruoyi.member.service.MemberStatisticSexAgeService;
|
||||
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.http.HttpServletResponse;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticSexAgeController
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/21 9:26
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/statisticSexAge")
|
||||
@Slf4j
|
||||
public class MemberStatisticSexAgeController {
|
||||
|
||||
@Autowired
|
||||
private MemberStatisticSexAgeService memberStatisticSexAgeService;
|
||||
|
||||
@GetMapping("/list")
|
||||
@RequiresPermissions("member:statistic:sexAge:list")
|
||||
public AjaxResult list(@RequestParam int searchType,
|
||||
@RequestParam int year,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) Long unitId,
|
||||
@RequestParam(required = false, name = "userTypes[]") List<String> userTypes) {
|
||||
return AjaxResult.success(memberStatisticSexAgeService.list(searchType, year, unionId, unitId, userTypes));
|
||||
}
|
||||
|
||||
@PostMapping("/exportMember")
|
||||
@RequiresPermissions("member:statistic:sexAge:list")
|
||||
public void exportMember(@RequestParam int searchType,
|
||||
@RequestParam int year,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) Long unitId,
|
||||
HttpServletResponse response) {
|
||||
NutMap nutMap = memberStatisticSexAgeService.list(searchType, year, unionId, unitId, null);
|
||||
List<NutMap> labelList = nutMap.getList("labelList", NutMap.class);
|
||||
List<NutMap> dataList = nutMap.getList("dataList", NutMap.class);
|
||||
|
||||
//合计
|
||||
dataList.add(new NutMap() {{
|
||||
put("unionName", "合计");
|
||||
put("unionCode", null);
|
||||
put("总人数", dataList.stream().mapToInt(v -> v.getInt("总人数")).reduce(Integer::sum).orElse(0));
|
||||
put("男会员", dataList.stream().mapToInt(v -> v.getInt("男会员")).reduce(Integer::sum).orElse(0));
|
||||
put("女会员", dataList.stream().mapToInt(v -> v.getInt("女会员")).reduce(Integer::sum).orElse(0));
|
||||
put("小于等于40岁会员", dataList.stream().mapToInt(v -> v.getInt("小于等于40岁会员")).reduce(Integer::sum).orElse(0));
|
||||
put("40~50", dataList.stream().mapToInt(v -> v.getInt("40~50")).reduce(Integer::sum).orElse(0));
|
||||
put("50~55", dataList.stream().mapToInt(v -> v.getInt("50~55")).reduce(Integer::sum).orElse(0));
|
||||
put("大于55", dataList.stream().mapToInt(v -> v.getInt("大于55")).reduce(Integer::sum).orElse(0));
|
||||
}});
|
||||
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
for (NutMap label : labelList) {
|
||||
entityList.add(new ExcelExportEntity(label.getString("label"), label.getString("prop"), 20));
|
||||
}
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, dataList);
|
||||
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) {
|
||||
log.error("导出会员信息失败{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
package com.ruoyi.member.controller.statistic;
|
||||
|
||||
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.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||
import com.ruoyi.member.service.MemberStatisticUserTypeService;
|
||||
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.http.HttpServletResponse;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticUserTypeController
|
||||
* @Description 会员人员类型统计
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 11:30
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/statisticUserType")
|
||||
@Slf4j
|
||||
public class MemberStatisticUserTypeController {
|
||||
|
||||
@Autowired
|
||||
private MemberStatisticUserTypeService memberStatisticUserTypeService;
|
||||
|
||||
@GetMapping("/list")
|
||||
@RequiresPermissions("member:statistic:userType:list")
|
||||
public AjaxResult list(@RequestParam(required = false) String unionId, @RequestParam(required = false) String unitId, @RequestParam int searchType) {
|
||||
if (searchType == 1) {
|
||||
return AjaxResult.success(memberStatisticUserTypeService.listByUnion(unionId, unitId));
|
||||
} else {
|
||||
return AjaxResult.success(memberStatisticUserTypeService.listByUnit(unitId));
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/exportMember")
|
||||
@RequiresPermissions("member:statistic:sexAge:list")
|
||||
public void exportMember(@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam int searchType,
|
||||
HttpServletResponse response) {
|
||||
|
||||
|
||||
NutMap dataMap = NutMap.NEW();
|
||||
|
||||
if (searchType == 1) {
|
||||
dataMap.putAll(memberStatisticUserTypeService.listByUnion(unionId, unitId));
|
||||
} else {
|
||||
dataMap.putAll(memberStatisticUserTypeService.listByUnit(unitId));
|
||||
}
|
||||
|
||||
List<NutMap> labelList = dataMap.getList("labelList", NutMap.class);
|
||||
List<NutMap> dataList = dataMap.getList("dataList", NutMap.class);
|
||||
|
||||
List<String> labelList2 = labelList.stream()
|
||||
.filter(v -> !v.getString("prop").equals("unionName") && !v.getString("prop").equals("unionCode"))
|
||||
.map(x -> x.getString("prop"))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
|
||||
//合计
|
||||
dataList.add(new NutMap() {{
|
||||
put("unionName", "合计");
|
||||
put("unionCode", null);
|
||||
for (String key : labelList2) {
|
||||
put(key, dataList.stream().mapToInt(v -> v.getInt(key)).reduce(Integer::sum).orElse(0));
|
||||
}
|
||||
}});
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
for (NutMap label : labelList) {
|
||||
entityList.add(new ExcelExportEntity(label.getString("label"), label.getString("prop"), 20));
|
||||
}
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, dataList);
|
||||
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) {
|
||||
log.error("导出会员信息失败{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
package com.ruoyi.member.handle;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.ruoyi.common.core.constant.Roles;
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.utils.SpringUtils;
|
||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.api.constant.MemberApplyState;
|
||||
import com.ruoyi.member.api.constant.MemberChangeOrigin;
|
||||
import com.ruoyi.member.api.constant.UserMode;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberApplyRecord;
|
||||
import com.ruoyi.member.api.domain.UserHistory;
|
||||
import com.ruoyi.member.service.MemberApplyRecordService;
|
||||
import com.ruoyi.system.api.RemoteSysLocalProcessService;
|
||||
import com.ruoyi.system.api.RemoteUserService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import com.ruoyi.system.api.domain.Sys_local_process_instance;
|
||||
import com.ruoyi.system.api.domain.Sys_local_process_instance_task;
|
||||
import lombok.Getter;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员申请审核
|
||||
*
|
||||
* @author: 1V
|
||||
* @date: 2021/1/25
|
||||
* @since 1.0
|
||||
*/
|
||||
@Getter
|
||||
public enum MemberApplyAuditHandle {
|
||||
|
||||
/**
|
||||
* 创建
|
||||
*/
|
||||
CREATE(null) {
|
||||
@Override
|
||||
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
|
||||
record.setUserId(SecurityUtils.getUserId());
|
||||
record.setStateId(MemberApplyState.UNION);
|
||||
record.setUnionId(SecurityUtils.getLoginUser().getSysUser().getDept().getUnionId());
|
||||
record.setApplyTime(new Date());
|
||||
MemberApplyRecord insert = memberApplyRecordService.insert(record);
|
||||
|
||||
String processUniqueId = "MEMBER_APPLY@" + record.getId();
|
||||
|
||||
// 创建实例
|
||||
localProcessService.initCreateInstance(
|
||||
processUniqueId,
|
||||
record.getId(),
|
||||
"[会员申请]" + SecurityUtils.getNickName(),
|
||||
"/member/apply/applyIndex",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
|
||||
// 获取负责人
|
||||
R<List<String>> assignments = localProcessService.getAssignments(SecurityUtils.getUnionId(), null, Roles.FGH_ADMIN, SecurityConstants.INNER);
|
||||
List<String> loginNameList = assignments.getData();
|
||||
|
||||
localProcessService.initCreateTask(
|
||||
processUniqueId,
|
||||
String.valueOf(MemberApplyState.UNION),
|
||||
"分工会审核",
|
||||
loginNameList,
|
||||
"/member/apply/applyBranchUnionAudit",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
|
||||
// sysUserService.sendSms(SecurityConstants.INNER)
|
||||
|
||||
return insert;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 院级工会审核
|
||||
*/
|
||||
AUDIT_UNION(MemberApplyState.UNION) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
|
||||
record.setStateId(audit.getAuditPass() ? MemberApplyState.SCHOOL_UNION : MemberApplyState.UNION_FAIL);
|
||||
record.setUnionAuditId(dao.insert(audit).getId());
|
||||
memberApplyRecordService.update(record);
|
||||
if (!audit.getAuditPass()) {
|
||||
refuseToUpdateSourceUser(record.getId());
|
||||
}
|
||||
|
||||
String processUniqueId = "MEMBER_APPLY@" + record.getId();
|
||||
// 先完成当前节点的任务
|
||||
localProcessService.completeTask(processUniqueId, String.valueOf(MemberApplyState.UNION), audit.getAuditPass() ? "分工会通过" : "分工会拒绝", SecurityConstants.INNER);
|
||||
|
||||
if (audit.getAuditPass()) {
|
||||
// 审核通过,往下走流程
|
||||
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.SCHOOL_ADMIN, SecurityConstants.INNER);
|
||||
List<String> loginNameList = assignments.getData();
|
||||
|
||||
localProcessService.initCreateTask(
|
||||
processUniqueId,
|
||||
String.valueOf(MemberApplyState.SCHOOL_UNION),
|
||||
"校工会审核",
|
||||
loginNameList,
|
||||
"/member/apply/applyMasterUnionAudit",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
} else {
|
||||
// 审核不通过,流程结束
|
||||
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
|
||||
}
|
||||
|
||||
return record;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 校工会审核
|
||||
*/
|
||||
AUDIT_SCHOOL(MemberApplyState.SCHOOL_UNION) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public MemberApplyRecord next(MemberApplyRecord record, Audit audit) {
|
||||
record.setStateId(audit.getAuditPass() ? MemberApplyState.NORMAL_MEMBER : MemberApplyState.SCHOOL_UNION_FAIL);
|
||||
record.setSchoolAuditId(dao.insert(audit).getId());
|
||||
memberApplyRecordService.update(record);
|
||||
if (audit.getAuditPass()) {
|
||||
UserMode.addMemberRole(record.getUserId(), MemberChangeOrigin.PERSONAL.getCode());
|
||||
} else {
|
||||
refuseToUpdateSourceUser(record.getId());
|
||||
}
|
||||
|
||||
String processUniqueId = "MEMBER_APPLY@" + record.getId();
|
||||
// 先完成当前节点的任务
|
||||
localProcessService.completeTask(processUniqueId, String.valueOf(MemberApplyState.SCHOOL_UNION), audit.getAuditPass() ? "校工会通过" : "校工会拒绝", SecurityConstants.INNER);
|
||||
// 这一步,不管是通过还是拒绝,流程都结束
|
||||
localProcessService.completeProcess(processUniqueId, !audit.getAuditPass(), SecurityConstants.INNER);
|
||||
|
||||
return record;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private static void refuseToUpdateSourceUser(String id) {
|
||||
UserHistory history = dao.fetch(UserHistory.class, Cnd.where("memberApplyRecordId", "=", id));
|
||||
SysUser sysUser = BeanUtil.copyProperties(history, SysUser.class);
|
||||
dao.update(sysUser);
|
||||
dao.clear(UserHistory.class, Cnd.where("memberApplyRecordId", "=", id));
|
||||
}
|
||||
|
||||
|
||||
public static Dao dao = SpringUtils.getBean(Dao.class);
|
||||
public MemberApplyRecordService memberApplyRecordService = SpringUtils.getBean(MemberApplyRecordService.class);
|
||||
public RemoteUserService sysUserService = SpringUtils.getBean(RemoteUserService.class);
|
||||
public RemoteSysLocalProcessService localProcessService = SpringUtils.getBean(RemoteSysLocalProcessService.class);
|
||||
|
||||
private Integer state;
|
||||
|
||||
MemberApplyAuditHandle(Integer state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public abstract MemberApplyRecord next(MemberApplyRecord record, Audit audit);
|
||||
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
package com.ruoyi.member.handle;
|
||||
|
||||
import cn.hutool.core.util.EnumUtil;
|
||||
import com.ruoyi.common.core.constant.Roles;
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.utils.SpringUtils;
|
||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.api.constant.MemberApplyState;
|
||||
import com.ruoyi.member.api.constant.MemberChangeApplyState;
|
||||
import com.ruoyi.member.api.constant.MemberChangeOrigin;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.system.api.RemoteSysLocalProcessService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import lombok.Getter;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Getter
|
||||
public enum MemberChangeAuditHandle {
|
||||
/**
|
||||
* 创建
|
||||
*/
|
||||
CREATE(null) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public MemberChangeRecord next(MemberChangeRecord record, Audit audit) {
|
||||
record.setApplyTime(new Date());
|
||||
|
||||
if (record.getApplyOrigin() == MemberChangeOrigin.PERSONAL.getCode()) {
|
||||
record.setUserId(SecurityUtils.getUserId());
|
||||
record.setOriginUnitId(SecurityUtils.getDeptId());
|
||||
record.setOriginUnionId(SecurityUtils.getUnionId());
|
||||
record.setStateId(MemberChangeApplyState.UNION);
|
||||
} else if (record.getApplyOrigin() == MemberChangeOrigin.UNION.getCode()) {
|
||||
record.setStateId(MemberChangeApplyState.SCHOOL_UNION);
|
||||
} else if (record.getApplyOrigin() == MemberChangeOrigin.SCHOOL.getCode()) {
|
||||
record.setStateId(MemberChangeApplyState.SUCCESS);
|
||||
}
|
||||
MemberChangeRecord insert = dao.insert(record);
|
||||
|
||||
// 被变更人
|
||||
SysUser user = dao.fetch(SysUser.class, record.getUserId());
|
||||
|
||||
String processUniqueId = "MEMBER_CHANGE@" + record.getId();
|
||||
// 创建实例
|
||||
localProcessService.initCreateInstance(
|
||||
processUniqueId,
|
||||
record.getId(),
|
||||
"[会员变更]" + user.getNickName(),
|
||||
"/member/change/changeIndex",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
|
||||
if (record.getApplyOrigin() == MemberChangeOrigin.PERSONAL.getCode()) {
|
||||
// 个人申请,创建分工会任务
|
||||
R<List<String>> assignments = localProcessService.getAssignments(SecurityUtils.getUnionId(), null, Roles.FGH_ADMIN, SecurityConstants.INNER);
|
||||
List<String> loginNameList = assignments.getData();
|
||||
|
||||
localProcessService.initCreateTask(
|
||||
processUniqueId,
|
||||
String.valueOf(MemberChangeApplyState.UNION),
|
||||
"分工会审核",
|
||||
loginNameList,
|
||||
"/member/change/changeBranchUnionAudit",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
} else if (record.getApplyOrigin() == MemberChangeOrigin.UNION.getCode()) {
|
||||
// 院级工会申请,创建校工会任务
|
||||
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.SCHOOL_ADMIN, SecurityConstants.INNER);
|
||||
List<String> loginNameList = assignments.getData();
|
||||
|
||||
localProcessService.initCreateTask(
|
||||
processUniqueId,
|
||||
String.valueOf(MemberChangeApplyState.SCHOOL_UNION),
|
||||
"校工会审核",
|
||||
loginNameList,
|
||||
"/member/change/changeMasterUnionAudit",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
} else if (record.getApplyOrigin() == MemberChangeOrigin.SCHOOL.getCode()) {
|
||||
// 校级工会申请,直接审核通过
|
||||
localProcessService.completeProcess(processUniqueId, false, SecurityConstants.INNER);
|
||||
}
|
||||
|
||||
return insert;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 院级工会审核
|
||||
*/
|
||||
UNION(MemberChangeApplyState.UNION) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public MemberChangeRecord next(MemberChangeRecord record, Audit audit) {
|
||||
record.setStateId(audit.getAuditPass() ? MemberChangeApplyState.SCHOOL_UNION : MemberChangeApplyState.UNION_FAIL);
|
||||
record.setUnionAuditId(dao.insert(audit).getId());
|
||||
dao.update(record);
|
||||
|
||||
String processUniqueId = "MEMBER_CHANGE@" + record.getId();
|
||||
|
||||
// 分工会审核,先完成任务,根据审核情况是否创建校工会任务
|
||||
localProcessService.completeTask(processUniqueId, String.valueOf(MemberChangeApplyState.UNION), audit.getAuditPass() ? "分工会通过" : "分工会不通过", SecurityConstants.INNER);
|
||||
if (audit.getAuditPass()) {
|
||||
// 创建校工会任务
|
||||
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.SCHOOL_ADMIN, SecurityConstants.INNER);
|
||||
List<String> loginNameList = assignments.getData();
|
||||
|
||||
localProcessService.initCreateTask(
|
||||
processUniqueId,
|
||||
String.valueOf(MemberChangeApplyState.SCHOOL_UNION),
|
||||
"校工会审核",
|
||||
loginNameList,
|
||||
"/member/change/changeMasterUnionAudit",
|
||||
null,
|
||||
SecurityConstants.INNER
|
||||
);
|
||||
} else {
|
||||
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
|
||||
}
|
||||
|
||||
return record;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 校工会审核
|
||||
*/
|
||||
SCHOOL(MemberChangeApplyState.SCHOOL_UNION) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public MemberChangeRecord next(MemberChangeRecord record, Audit audit) {
|
||||
record.setStateId(audit.getAuditPass() ? MemberChangeApplyState.SUCCESS : MemberChangeApplyState.SCHOOL_UNION_FAIL);
|
||||
record.setSchoolAuditId(dao.insert(audit).getId());
|
||||
if (record.getStateId() == MemberChangeApplyState.SUCCESS) {
|
||||
MemberChangeHandle changeHandle = EnumUtil.getBy(MemberChangeHandle.class, v -> Objects.equals(v.getChangeType(), record.getType()));
|
||||
changeHandle.change(record);
|
||||
}
|
||||
dao.update(record);
|
||||
|
||||
String processUniqueId = "MEMBER_CHANGE@" + record.getId();
|
||||
// 先完成当前节点的任务
|
||||
localProcessService.completeTask(processUniqueId, String.valueOf(MemberChangeApplyState.SCHOOL_UNION), audit.getAuditPass() ? "校工会通过" : "校工会不通过", SecurityConstants.INNER);
|
||||
// 这一步,不管是通过还是拒绝,流程都结束
|
||||
localProcessService.completeProcess(processUniqueId, record.getStateId() == MemberChangeApplyState.SCHOOL_UNION_FAIL, SecurityConstants.INNER);
|
||||
|
||||
return record;
|
||||
}
|
||||
};
|
||||
|
||||
public Dao dao = SpringUtils.getBean(Dao.class);
|
||||
private Integer state;
|
||||
public RemoteSysLocalProcessService localProcessService = SpringUtils.getBean(RemoteSysLocalProcessService.class);
|
||||
|
||||
MemberChangeAuditHandle(Integer state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public abstract MemberChangeRecord next(MemberChangeRecord record, Audit audit);
|
||||
|
||||
}
|
||||
+231
@@ -0,0 +1,231 @@
|
||||
package com.ruoyi.member.handle;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.ruoyi.common.core.utils.SpringUtils;
|
||||
import com.ruoyi.member.api.constant.MemberStatus;
|
||||
import com.ruoyi.member.api.constant.UserChangeType;
|
||||
import com.ruoyi.member.api.constant.UserMode;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.UserHistory;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import lombok.Getter;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.FieldMatcher;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 会员变更Handle
|
||||
*
|
||||
* @author: 1V
|
||||
* @date: 2021/1/27
|
||||
* @see UserChangeType
|
||||
* @since 1.0
|
||||
*/
|
||||
@Getter
|
||||
public enum MemberChangeHandle {
|
||||
|
||||
|
||||
//单位异动
|
||||
UNIT_CHANGE(UserChangeType.UNIT_CHANGE.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.UNIT_CHANGE);
|
||||
Chain chain = Chain.make("deptId", record.getCurrentUnitId());
|
||||
chain.add("threeUnitId", record.getCurrentThreeUnitId());
|
||||
dao.update(SysUser.class, chain, Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
},
|
||||
//新入职
|
||||
NEW(UserChangeType.NEW.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.NEW);
|
||||
if (null != record.getInsertMember() && record.getInsertMember()) {
|
||||
UserMode.addMemberRole(record.getUserId(), record.getApplyOrigin());
|
||||
}
|
||||
if (null != record.getUpdateWelfareMember() && record.getUpdateWelfareMember()) {
|
||||
dao.update(SysUser.class, Chain.make("welfareMember", 1), Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//离职
|
||||
RESIGN(UserChangeType.RESIGN.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.RESIGN);
|
||||
updateMember(record);
|
||||
updateWelfareMember(record);
|
||||
updateUserStateAndPersonType(record);
|
||||
}
|
||||
},
|
||||
|
||||
//去世
|
||||
DIE(UserChangeType.DIE.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.DIE);
|
||||
updateMember(record);
|
||||
updateWelfareMember(record);
|
||||
updateUserStateAndPersonType(record);
|
||||
}
|
||||
},
|
||||
|
||||
//退休
|
||||
RETIREMENT(UserChangeType.RETIREMENT.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.RETIREMENT);
|
||||
updateMember(record);
|
||||
updateWelfareMember(record);
|
||||
updateUserStateAndPersonType(record);
|
||||
if (record.getRetireTime() != null) {
|
||||
dao.update(SysUser.class, Chain.make("retireTime", record.getRetireTime())
|
||||
, Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//开除
|
||||
EXPELLED(UserChangeType.EXPELLED.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.EXPELLED);
|
||||
updateMember(record);
|
||||
updateWelfareMember(record);
|
||||
updateUserStateAndPersonType(record);
|
||||
}
|
||||
},
|
||||
|
||||
//恢复
|
||||
RESTORE(UserChangeType.RESTORE.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.RESTORE);
|
||||
UserMode.addMemberRole(record.getUserId(), record.getApplyOrigin());
|
||||
updateMemberStatus(MemberStatus.RESTORE, record.getUserId());
|
||||
updateWelfareMember(record);
|
||||
dao.update(SysUser.class,Chain.make("retireTime",null),Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
},
|
||||
|
||||
//退会
|
||||
WITHDRAWAL(UserChangeType.WITHDRAWAL.getCode()) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void change(MemberChangeRecord record) {
|
||||
archive(record.getUserId(), UserChangeType.WITHDRAWAL);
|
||||
updateMember(record);
|
||||
updateWelfareMember(record);
|
||||
updateUserStateAndPersonType(record);
|
||||
// UserMode.removeMemberRole(record.getUserId());
|
||||
// updateMemberStatus(MemberStatus.WITHDRAWAL, record.getUserId());
|
||||
}
|
||||
};
|
||||
|
||||
public static Dao dao = SpringUtils.getBean(Dao.class);
|
||||
|
||||
/**
|
||||
* 变更类型
|
||||
*/
|
||||
private final String changeType;
|
||||
|
||||
MemberChangeHandle(String changeType) {
|
||||
this.changeType = changeType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 存档
|
||||
*
|
||||
* @param userId
|
||||
* @param changeType
|
||||
*/
|
||||
private static void archive(Long userId, UserChangeType changeType) {
|
||||
SysUser user = dao.fetch(SysUser.class, userId);
|
||||
UserHistory history = new UserHistory();
|
||||
BeanUtils.copyProperties(user, history);
|
||||
history.setChangeTime(new Date());
|
||||
history.setChangeType(changeType.getCode());
|
||||
history.setId(R.UU32());
|
||||
dao.fastInsert(history);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 在职状态和人员类别变更
|
||||
* zzr 2024-03-10 新增在职状态及人员类别的变更
|
||||
*
|
||||
* @param record 变更记录
|
||||
*/
|
||||
public static void updateUserStateAndPersonType(MemberChangeRecord record) {
|
||||
// Chain chain = null;
|
||||
if (Strings.isNotBlank(record.getUserState()) && Strings.isNotBlank(record.getPersonType())) {
|
||||
Chain chain = Chain.make("userState", record.getUserState()).add("personType", record.getPersonType());
|
||||
dao.update(SysUser.class, chain, Cnd.where("userId", "=", record.getUserId()));
|
||||
} else if (Strings.isNotBlank(record.getUserState()) && Strings.isBlank(record.getPersonType())) {
|
||||
Chain chain = Chain.make("userState", record.getUserState());
|
||||
dao.update(SysUser.class, chain, Cnd.where("userId", "=", record.getUserId()));
|
||||
} else if (Strings.isBlank(record.getUserState()) && Strings.isNotBlank(record.getPersonType())) {
|
||||
Chain chain = Chain.make("personType", record.getPersonType());
|
||||
dao.update(SysUser.class, chain, Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
// if (chain != null) {
|
||||
// dao.update(SysUser.class, chain, Cnd.where("userId", "=", record.getUserId()));
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据record的updateMember改变会员状态
|
||||
*
|
||||
* @param record
|
||||
*/
|
||||
public static void updateMember(MemberChangeRecord record) {
|
||||
if (null != record.getUpdateMember() && record.getUpdateMember()) {
|
||||
UserMode.removeMemberRole(record.getUserId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新福利会员
|
||||
*
|
||||
* @param record 变更记录
|
||||
*/
|
||||
public static void updateWelfareMember(MemberChangeRecord record) {
|
||||
//record.getUpdateWelfareMember() (true:增加福利会员 false:取消福利会员);针对入会(恢复)
|
||||
if (null != record.getUpdateWelfareMember() && record.getUpdateWelfareMember()) {
|
||||
dao.update(SysUser.class, Chain.make("welfareMember", 1), Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
//record.getUpdateWelfare() (true:取消 false:不取消);针对(退休、离职、退会、去世)
|
||||
if (null != record.getUpdateWelfare() && record.getUpdateWelfare()) {
|
||||
dao.update(SysUser.class, Chain.make("welfareMember", 0), Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新会员状态
|
||||
*
|
||||
* @param status 会员状态
|
||||
* @param userId 用户id
|
||||
*/
|
||||
public static void updateMemberStatus(MemberStatus status, Long userId) {
|
||||
dao.update(SysUser.class, Chain.make("memberStatus", status.getCode()), Cnd.where("userId", "=", userId));
|
||||
}
|
||||
|
||||
public abstract void change(MemberChangeRecord record);
|
||||
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import com.ruoyi.member.api.domain.MemberApplyRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/13 17:35
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberApplyRecordService extends BaseService<MemberApplyRecord> {
|
||||
|
||||
/**
|
||||
* 申请
|
||||
*
|
||||
* @param sysUser 系统用户
|
||||
*/
|
||||
void doApply(SysUser sysUser);
|
||||
|
||||
/***
|
||||
* 申请信息
|
||||
* @description
|
||||
* @author zhaoxinyu
|
||||
* @date 2022/12/15 13:47
|
||||
* @param userId 用户id
|
||||
* @return org.nutz.lang.util.NutMap
|
||||
*/
|
||||
NutMap applyInfo();
|
||||
|
||||
/***
|
||||
* 历史申请记录
|
||||
* @description
|
||||
* @author zhaoxinyu
|
||||
* @date 2022/12/15 13:46
|
||||
* @param userId 用户id
|
||||
* @return java.util.List<org.nutz.lang.util.NutMap>
|
||||
*/
|
||||
List<NutMap> history(Long userId);
|
||||
|
||||
/**
|
||||
* 分工会 审核分页数据
|
||||
*/
|
||||
Pagination branchUnionAuditPageData(MemberAuditPageForm pageFormDTO);
|
||||
|
||||
/**
|
||||
* 校工会 审核分页数据
|
||||
*/
|
||||
Pagination masterUnionAuditPageData(MemberAuditPageForm pageFormDTO);
|
||||
|
||||
/**
|
||||
* 审核信息
|
||||
* @param id 申请id
|
||||
* @return
|
||||
*/
|
||||
MemberApplyRecord applyProcessInfo(String id);
|
||||
|
||||
|
||||
/**
|
||||
* 打印表单数据
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @return {@link NutMap}
|
||||
*/
|
||||
NutMap printFormData(Long userId);
|
||||
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberChangeRecordService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/16 9:41
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberChangeRecordService extends BaseService<MemberChangeRecord> {
|
||||
|
||||
/**
|
||||
* 做应用
|
||||
*
|
||||
* @param memberChangeRecord 成员变更记录
|
||||
* @param sysUser 系统用户
|
||||
*/
|
||||
void doApply(MemberChangeRecord memberChangeRecord, SysUser sysUser);
|
||||
|
||||
/***
|
||||
* 申请信息
|
||||
* @description
|
||||
* @author zhaoxinyu
|
||||
* @date 2022/12/15 13:47
|
||||
* @return org.nutz.lang.util.NutMap
|
||||
*/
|
||||
NutMap applyInfo();
|
||||
|
||||
/***
|
||||
* 历史变更记录
|
||||
* @description
|
||||
* @author zhaoxinyu
|
||||
* @date 2022/12/15 13:46
|
||||
* @param userId 用户id
|
||||
* @return java.util.List<org.nutz.lang.util.NutMap>
|
||||
*/
|
||||
List<NutMap> history(Long userId);
|
||||
|
||||
/***
|
||||
* 历史变更记录
|
||||
* @description
|
||||
* @author zhaoxinyu
|
||||
* @date 2022/12/19 10:05
|
||||
* @param pageForm
|
||||
* @param cnd
|
||||
* @return com.ruoyi.common.core.page.Pagination
|
||||
*/
|
||||
Pagination history(PageForm pageForm, Cnd cnd);
|
||||
|
||||
/**
|
||||
* 分工会 审核分页数据
|
||||
*/
|
||||
Pagination branchUnionAuditPageData(MemberAuditPageForm pageForm);
|
||||
|
||||
/**
|
||||
* 校工会 审核分页数据
|
||||
*/
|
||||
Pagination masterUnionAuditPageData(MemberAuditPageForm pageForm);
|
||||
|
||||
|
||||
/**
|
||||
* 用户单位调整
|
||||
*
|
||||
* @param changeRecords 更改记录
|
||||
*/
|
||||
void userUnitMove(List<MemberChangeRecord> changeRecords);
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import com.ruoyi.member.api.domain.MemberHistory;
|
||||
|
||||
/**
|
||||
* @ClassName MemberHistoryService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 11:16
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberHistoryService extends BaseService<MemberHistory> {
|
||||
|
||||
/**
|
||||
* 存档
|
||||
*/
|
||||
void archive(Integer year);
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
|
||||
/**
|
||||
* @ClassName MemberInfoBatchMakeService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 15:27
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberInfoBatchMakeService extends BaseService {
|
||||
|
||||
/**
|
||||
* 批量设置会员
|
||||
* @param userIds
|
||||
*/
|
||||
void joinMemberFamily(Long[] userIds);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nutz.dao.entity.Entity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName MemberService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/21 17:15
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberService extends BaseService {
|
||||
|
||||
|
||||
/**
|
||||
* 补充成员
|
||||
*
|
||||
* @param user 用户
|
||||
*/
|
||||
void supplementMember(SysUser user);
|
||||
|
||||
Long getDeptId(Map<String, Long> codeMap, Map<String, Long> nameMap, String code, String name);
|
||||
|
||||
/**
|
||||
* 大批量插入或修改
|
||||
* @param list 插入集合
|
||||
* @param mode 1:新增,2:修改
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
<T> void largeQuantitiesInsert(List<T> list, Integer mode, Boolean isFastInsert);
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import com.ruoyi.member.api.constant.MemberPageForm;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticQueryService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 10:39
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberStatisticQueryService extends BaseService {
|
||||
|
||||
/**
|
||||
* 分页数据
|
||||
*
|
||||
* @param pageForm
|
||||
* @param year
|
||||
* @param unionId
|
||||
* @param unitId
|
||||
* @param unionGroupId
|
||||
* @param threeUnitId
|
||||
* @param personTypes
|
||||
* @param userStates
|
||||
* @param memberStatus
|
||||
* @return
|
||||
*/
|
||||
Pagination pageData(PageForm pageForm,
|
||||
Integer year,
|
||||
String unionId,
|
||||
Long unitId,
|
||||
String unionGroupId,
|
||||
Long threeUnitId,
|
||||
List<String> personTypes,
|
||||
List<String> userStates,
|
||||
List<String> memberStatus,
|
||||
List<String> sexs,
|
||||
List<Integer> age,
|
||||
String field,
|
||||
String fieldInputValue,
|
||||
Object[] fieldSelectValues,
|
||||
String fieldDateValue,
|
||||
String retireTime);
|
||||
|
||||
/**
|
||||
* excel导出数据
|
||||
*
|
||||
* @param pageForm
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> exportList(MemberPageForm pageForm);
|
||||
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticSexAgeService
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/21 9:28
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberStatisticSexAgeService extends BaseService {
|
||||
|
||||
/**
|
||||
* 性别 年龄统计
|
||||
*
|
||||
* @param searchType 1分工会 2单位
|
||||
* @param year 年度
|
||||
* @param unionId 工会id
|
||||
* @param deptId 单位id
|
||||
* @param userTypes 人员类型
|
||||
* @return
|
||||
*/
|
||||
NutMap list(int searchType, int year, String unionId, Long deptId, List<String> userTypes);
|
||||
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticUserTypeService
|
||||
* @Description 人员类型
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 14:27
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface MemberStatisticUserTypeService extends BaseService {
|
||||
|
||||
NutMap listByUnion(String unionId, String unitId);
|
||||
|
||||
NutMap listByUnit(String unitId);
|
||||
|
||||
}
|
||||
+322
@@ -0,0 +1,322 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.member.api.constant.MemberApplyState;
|
||||
import com.ruoyi.member.api.constant.MemberChangeOrigin;
|
||||
import com.ruoyi.member.api.constant.MemberStatus;
|
||||
import com.ruoyi.member.api.constant.UserChangeType;
|
||||
import com.ruoyi.member.api.domain.MemberApplyRecord;
|
||||
import com.ruoyi.member.api.domain.UserHistory;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.member.handle.MemberApplyAuditHandle;
|
||||
import com.ruoyi.member.service.MemberApplyRecordService;
|
||||
import com.ruoyi.system.api.RemoteUnionService;
|
||||
import com.ruoyi.system.api.domain.SysConfig;
|
||||
import com.ruoyi.system.api.domain.SysDictData;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import com.ruoyi.system.api.domain.Sys_local_process_instance;
|
||||
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.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @ClassName MemberServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/13 17:36
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberApplyRecordServiceImpl extends BaseServiceImpl<MemberApplyRecord> implements MemberApplyRecordService {
|
||||
|
||||
public MemberApplyRecordServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private RemoteUnionService remoteUnionService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doApply(SysUser sysUser) {
|
||||
MemberApplyRecord memberApplyRecord = new MemberApplyRecord().setMemberStates(MemberStatus.NORMAL.getCode());
|
||||
MemberApplyRecord next = MemberApplyAuditHandle.CREATE.next(memberApplyRecord, null);
|
||||
|
||||
dao().updateIgnoreNull(sysUser);
|
||||
|
||||
SysUser sourceUser = dao().fetch(SysUser.class, Cnd.where("userName", "=", sysUser.getUserName()));
|
||||
UserHistory userHistory = BeanUtil.copyProperties(sourceUser, UserHistory.class);
|
||||
userHistory.setChangeType(UserChangeType.RESTORE.getCode());
|
||||
userHistory.setChangeTime(DateUtil.date());
|
||||
userHistory.setMemberApplyRecordId(next.getId());
|
||||
dao().insert(userHistory);
|
||||
|
||||
dao().updateIgnoreNull(sysUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap applyInfo() {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
SysUser sysUser = dao().fetch(SysUser.class, userId);
|
||||
Record user = dao().fetch("`user`", Cnd.where("userId", "=", userId));
|
||||
NutMap nutMap = Lang.obj2nutmap(sysUser);
|
||||
nutMap.setv("unionName",user.getString("unionname"));
|
||||
nutMap.setv("unitName",user.getString("deptname"));
|
||||
nutMap.setv("threeUnitName",user.getString("threedeptname"));
|
||||
nutMap.setv("unionGroupName",user.getString("uniongroupname"));
|
||||
MemberApplyRecord record = dao().fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId).desc("applyTime"));
|
||||
dao().fetchLinks(record, null);
|
||||
|
||||
NutMap recordMap = Lang.obj2nutmap(record);
|
||||
|
||||
if (Lang.isNotEmpty(record)) {
|
||||
if (Lang.isNotEmpty(record.getAuditState())) {
|
||||
recordMap.setv("stateName", record.getAuditState().getStateName());
|
||||
}
|
||||
if (MemberApplyState.AUDIT_PASS_STATES.contains(record.getStateId())) {
|
||||
recordMap.setv("status", "PASS");
|
||||
} else if (MemberApplyState.AUDIT_REJECTED_STATES.contains(record.getStateId())) {
|
||||
recordMap.setv("status", "REJECTED");
|
||||
} else {
|
||||
recordMap.setv("status", "AUDIT_ING");
|
||||
}
|
||||
} else {
|
||||
recordMap.setv("status", "NEVER_APPLY");
|
||||
}
|
||||
return NutMap.NEW().addv("user", nutMap).addv("record", recordMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> history(Long userId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mar.*,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
state.stateName\s
|
||||
FROM
|
||||
`member_apply_record` mar
|
||||
LEFT JOIN `user` u ON u.userId = mar.userId
|
||||
LEFT JOIN sys_union gh ON gh.id = mar.unionId
|
||||
LEFT JOIN audit_state state ON state.stateId = mar.stateId
|
||||
WHERE mar.userId = @userId
|
||||
ORDER BY mar.applyTime DESC
|
||||
""");
|
||||
sql.setParam("userId", userId);
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination branchUnionAuditPageData(MemberAuditPageForm pageFormDTO) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mar.*,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.threeDeptName,
|
||||
u.threeDeptCode,
|
||||
u.unionGroupName,
|
||||
u.unionGroupCode,
|
||||
u.personType,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
state.stateName,
|
||||
IF(mar.stateId = @auditState,TRUE,FALSE) canAudit
|
||||
FROM
|
||||
`member_apply_record` mar
|
||||
LEFT JOIN `user` u ON u.userId = mar.userId
|
||||
LEFT JOIN sys_union gh ON gh.id = mar.unionId
|
||||
LEFT JOIN audit_state state ON state.stateId = mar.stateId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.asc("mar.stateId");
|
||||
|
||||
String[] dateRange = pageFormDTO.getDateRange();
|
||||
if (Lang.isNotEmpty(dateRange)) {
|
||||
cnd.and("date(mar.applyTime)", ">=", dateRange[0]);
|
||||
cnd.and("date(mar.applyTime)", "<=", dateRange[1]);
|
||||
}
|
||||
|
||||
if (pageFormDTO.getYear() != null) {
|
||||
cnd.and("year(mar.applyTime)", "=", pageFormDTO.getYear());
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasRole("admin")) {
|
||||
cnd.and("mar.unionId", "=", SecurityUtils.getUnionId());
|
||||
}
|
||||
|
||||
switch (pageFormDTO.getAudit()) {
|
||||
case 1 -> cnd.and("mar.stateId", ">", MemberApplyState.UNION);
|
||||
case 2 -> cnd.and("mar.stateId", "=", MemberApplyState.UNION);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageFormDTO.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageFormDTO.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageFormDTO.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
sql.setParam("auditState", MemberApplyState.UNION);
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageFormDTO.getPageNumber(), pageFormDTO.getPageSize(), sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校工会 审核分页数据
|
||||
*
|
||||
* @param pageFormDTO
|
||||
*/
|
||||
@Override
|
||||
public Pagination masterUnionAuditPageData(MemberAuditPageForm pageFormDTO) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mar.*,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.threeDeptName,
|
||||
u.threeDeptCode,
|
||||
u.unionGroupName,
|
||||
u.unionGroupCode,
|
||||
u.personType,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
state.stateName,
|
||||
IF(mar.stateId = @auditState,TRUE,FALSE) canAudit
|
||||
FROM
|
||||
`member_apply_record` mar
|
||||
LEFT JOIN `user` u ON u.userId = mar.userId
|
||||
LEFT JOIN sys_union gh ON gh.id = mar.unionId
|
||||
LEFT JOIN audit_state state ON state.stateId = mar.stateId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.asc("mar.stateId");
|
||||
|
||||
String[] dateRange = pageFormDTO.getDateRange();
|
||||
if (Lang.isNotEmpty(dateRange)) {
|
||||
cnd.and("date(mar.applyTime)", ">=", dateRange[0]);
|
||||
cnd.and("date(mar.applyTime)", "<=", dateRange[1]);
|
||||
}
|
||||
|
||||
cnd.andEX("mar.unionId", "=", pageFormDTO.getUnionId());
|
||||
|
||||
switch (pageFormDTO.getAudit()) {
|
||||
case 0 -> cnd.and("mar.stateId", ">=", MemberApplyState.SCHOOL_UNION);
|
||||
case 1 -> cnd.and("mar.stateId", ">", MemberApplyState.SCHOOL_UNION);
|
||||
case 2 -> cnd.and("mar.stateId", "=", MemberApplyState.SCHOOL_UNION);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageFormDTO.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageFormDTO.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageFormDTO.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
sql.setParam("auditState", MemberApplyState.SCHOOL_UNION);
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageFormDTO.getPageNumber(), pageFormDTO.getPageSize(), sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核信息
|
||||
*
|
||||
* @param id 申请id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public MemberApplyRecord applyProcessInfo(String id) {
|
||||
MemberApplyRecord applyRecord = fetch(id);
|
||||
fetchLinks(applyRecord, "unionAudit|schoolAudit");
|
||||
return applyRecord;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap printFormData(Long userId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
userName,
|
||||
sex,
|
||||
nation,
|
||||
education,
|
||||
academicDegree,
|
||||
political,
|
||||
idcard,
|
||||
mobile,
|
||||
hometown,
|
||||
vita\s
|
||||
FROM
|
||||
`user`
|
||||
WHERE userId = @userId
|
||||
""");
|
||||
sql.setParam("userId", userId);
|
||||
NutMap userDataMap = fetch(sql);
|
||||
|
||||
List<SysDictData> sys_user_sex = DictUtils.getDictCache("sys_user_sex");
|
||||
List<SysDictData> sys_nation = DictUtils.getDictCache("sys_nation");
|
||||
List<SysDictData> sys_user_education = DictUtils.getDictCache("sys_user_education");
|
||||
List<SysDictData> sys_user_academicdegree = DictUtils.getDictCache("sys_user_academicdegree");
|
||||
|
||||
assert sys_user_sex != null;
|
||||
userDataMap.put("sex", sys_user_sex.stream().filter(v -> v.getDictValue().equals(userDataMap.getString("sex"))).findFirst().map(SysDictData::getDictLabel).orElse(null));
|
||||
assert sys_nation != null;
|
||||
userDataMap.put("nation", sys_nation.stream().filter(v -> v.getDictValue().equals(userDataMap.getString("nation"))).findFirst().map(SysDictData::getDictLabel).orElse(null));
|
||||
assert sys_user_education != null;
|
||||
userDataMap.put("education", sys_user_education.stream().filter(v -> v.getDictValue().equals(userDataMap.getString("education"))).findFirst().map(SysDictData::getDictLabel).orElse(null));
|
||||
assert sys_user_academicdegree != null;
|
||||
userDataMap.put("academicDegree", sys_user_academicdegree.stream().filter(v -> v.getDictValue().equals(userDataMap.getString("academicDegree"))).findFirst().map(SysDictData::getDictLabel).orElse(null));
|
||||
|
||||
String schoolName = Optional.ofNullable(dao().fetch(SysConfig.class, Cnd.where("configKey", "=", "sys.schoolName"))).map(v -> v.getConfigValue()).orElse(null);
|
||||
userDataMap.put("schoolName", schoolName);
|
||||
|
||||
MemberApplyRecord applyRecord = dao().fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId).desc("applyTime"));
|
||||
Date date = Optional.ofNullable(applyRecord).map(MemberApplyRecord::getApplyTime).orElse(null);
|
||||
|
||||
if (date != null) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
int year = calendar.get(Calendar.YEAR);
|
||||
int month = calendar.get(Calendar.MONTH) + 1;
|
||||
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
||||
userDataMap.put("year", year);
|
||||
userDataMap.put("month", month);
|
||||
userDataMap.put("day", day);
|
||||
}
|
||||
|
||||
return userDataMap;
|
||||
}
|
||||
}
|
||||
+341
@@ -0,0 +1,341 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
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.SecurityUtils;
|
||||
import com.ruoyi.member.api.constant.*;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.dto.MemberAuditPageForm;
|
||||
import com.ruoyi.member.handle.MemberChangeAuditHandle;
|
||||
import com.ruoyi.member.service.MemberChangeRecordService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
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.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @ClassName MemberChangeRecordServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/16 9:42
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberChangeRecordServiceImpl extends BaseServiceImpl<MemberChangeRecord> implements MemberChangeRecordService {
|
||||
public MemberChangeRecordServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doApply(MemberChangeRecord memberChangeRecord, SysUser sysUser) {
|
||||
if (!Objects.equals(memberChangeRecord.getType(), UserChangeType.UNIT_CHANGE.getCode())) {
|
||||
memberChangeRecord.setCurrentUnitId(null);
|
||||
memberChangeRecord.setCurrentUnionId(null);
|
||||
}
|
||||
|
||||
Sql sql = Sqls.create("select deptId,threeUnitId,unionId from `user` where userId = @userId");
|
||||
sql.setParam("userId", sysUser.getUserId());
|
||||
NutMap userMap = fetch(sql);
|
||||
|
||||
memberChangeRecord.setOriginThreeUnitId((Long) userMap.get("threeUnitId", null));
|
||||
memberChangeRecord.setOriginUnitId((Long) userMap.get("deptId", null));
|
||||
memberChangeRecord.setOriginUnionId(userMap.getString("unionId"));
|
||||
|
||||
memberChangeRecord.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
memberChangeRecord.setApplyOrigin(MemberChangeOrigin.PERSONAL.getCode());
|
||||
MemberChangeAuditHandle.CREATE.next(memberChangeRecord, null);
|
||||
|
||||
dao().updateIgnoreNull(sysUser);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap applyInfo() {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
SysUser sysUser = dao().fetch(SysUser.class, userId);
|
||||
Record user = dao().fetch("`user`", Cnd.where("userId", "=", userId));
|
||||
NutMap nutMap = Lang.obj2nutmap(sysUser);
|
||||
nutMap.setv("unionName",user.getString("unionname"));
|
||||
nutMap.setv("unitName",user.getString("deptname"));
|
||||
nutMap.setv("threeUnitName",user.getString("threedeptname"));
|
||||
nutMap.setv("unionGroupName",user.getString("uniongroupname"));
|
||||
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, Cnd.where("userId", "=", userId).desc("applyTime"));
|
||||
dao().fetchLinks(record, null);
|
||||
|
||||
NutMap recordMap = Lang.obj2nutmap(record);
|
||||
|
||||
if (Lang.isNotEmpty(record)) {
|
||||
if (Lang.isNotEmpty(record.getAuditState())) {
|
||||
recordMap.setv("stateName", record.getAuditState().getStateName());
|
||||
}
|
||||
if (MemberChangeApplyState.SUCCESS == record.getStateId()) {
|
||||
recordMap.setv("status", "PASS");
|
||||
} else if (List.of(MemberChangeApplyState.UNION_FAIL, MemberChangeApplyState.SCHOOL_UNION_FAIL).contains(record.getStateId())) {
|
||||
recordMap.setv("status", "REJECTED");
|
||||
} else {
|
||||
recordMap.setv("status", "AUDIT_ING");
|
||||
}
|
||||
} else {
|
||||
recordMap.setv("status", "NEVER_APPLY");
|
||||
}
|
||||
return NutMap.NEW().addv("user", nutMap).addv("record", recordMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> history(Long userId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mcr.*,
|
||||
LEFT ( mcr.applyTime, 10 ) applyDate,
|
||||
u.username as userName,
|
||||
u.loginname as loginName,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode,
|
||||
state.stateName,
|
||||
state.stateColor,
|
||||
originUnit.dept_code originUnitCode,
|
||||
originUnit.dept_name originUnitName,
|
||||
originUnion.unionCode originUnionCode,
|
||||
originUnion.unionName originUnionName,
|
||||
originThreeUnit.dept_code originThreeUnitCode,
|
||||
originThreeUnit.dept_name originThreeUnitName,
|
||||
currentUnit.dept_code currentUnitCode,
|
||||
currentUnit.dept_name currentUnitName,
|
||||
currentUnion.unionCode currentUnionCode,
|
||||
currentUnion.unionName currentUnionName,
|
||||
currentThreeUnit.dept_code currentThreeUnitCode,
|
||||
currentThreeUnit.dept_name currentThreeUnitName
|
||||
FROM
|
||||
member_change_record mcr
|
||||
LEFT JOIN `user` u ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
|
||||
LEFT JOIN sys_dept originUnit ON mcr.originUnitId = originUnit.dept_id
|
||||
LEFT JOIN sys_union originUnion ON mcr.originUnionId = originUnion.id
|
||||
LEFT JOIN sys_dept originThreeUnit ON mcr.originThreeUnitId = originThreeUnit.dept_id
|
||||
LEFT JOIN sys_dept currentUnit ON mcr.currentUnitId = currentUnit.dept_id
|
||||
LEFT JOIN sys_union currentUnion ON mcr.currentUnionId = currentUnion.id
|
||||
LEFT JOIN sys_dept currentThreeUnit ON mcr.currentThreeUnitId = currentThreeUnit.dept_id
|
||||
WHERE mcr.userId = @userId
|
||||
ORDER BY mcr.applyTime DESC
|
||||
""");
|
||||
sql.setParam("userId", userId);
|
||||
return listMap(sql);
|
||||
}
|
||||
|
||||
/***
|
||||
* 历史变更记录
|
||||
* @description
|
||||
* @author zhaoxinyu
|
||||
* @date 2022/12/19 10:05
|
||||
* @param pageForm
|
||||
* @param cnd
|
||||
* @return com.ruoyi.common.core.page.Pagination
|
||||
*/
|
||||
@Override
|
||||
public Pagination history(PageForm pageForm, Cnd cnd) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mcr.*,
|
||||
LEFT ( mcr.applyTime, 10 ) applyDate,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode,
|
||||
state.stateName,
|
||||
state.stateColor,
|
||||
originUnit.dept_code originUnitCode,
|
||||
originUnit.dept_name originUnitName,
|
||||
originUnion.unionCode originUnionCode,
|
||||
originUnion.unionName originUnionName,
|
||||
currentUnit.dept_code currentUnitCode,
|
||||
currentUnit.dept_name currentUnitName,
|
||||
currentUnion.unionCode currentUnionCode,
|
||||
currentUnion.unionName currentUnionName
|
||||
FROM
|
||||
member_change_record mcr
|
||||
LEFT JOIN `user` u ON mcr.userId = u.userId
|
||||
LEFT JOIN audit_state state ON mcr.stateId = state.stateId
|
||||
LEFT JOIN sys_dept originUnit ON mcr.originUnitId = originUnit.dept_id
|
||||
LEFT JOIN sys_union originUnion ON mcr.originUnionId = originUnion.id
|
||||
LEFT JOIN sys_dept currentUnit ON mcr.currentUnitId = currentUnit.dept_id
|
||||
LEFT JOIN sys_union currentUnion ON mcr.currentUnionId = currentUnion.id
|
||||
$condition
|
||||
""");
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 分工会 审核分页数据
|
||||
*
|
||||
* @param pageForm
|
||||
*/
|
||||
@Override
|
||||
public Pagination branchUnionAuditPageData(MemberAuditPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mcr.*,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode,
|
||||
state.stateName,
|
||||
IF(mcr.stateId = @auditState,TRUE,FALSE) canAudit
|
||||
FROM
|
||||
`member_change_record` mcr
|
||||
LEFT JOIN `user` u ON u.userId = mcr.userId
|
||||
LEFT JOIN audit_state state ON state.stateId = mcr.stateId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRole("admin")) {
|
||||
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
|
||||
}
|
||||
|
||||
cnd.asc("mcr.stateId");
|
||||
|
||||
String[] dateRange = pageForm.getDateRange();
|
||||
if (Lang.isNotEmpty(dateRange)) {
|
||||
cnd.and("date(mcr.applyTime)", ">=", dateRange[0]);
|
||||
cnd.and("date(mcr.applyTime)", "<=", dateRange[1]);
|
||||
}
|
||||
|
||||
switch (pageForm.getAudit()) {
|
||||
case 0 -> cnd.and("mcr.stateId", ">=", MemberChangeApplyState.UNION);
|
||||
case 1 -> cnd.and("mcr.stateId", ">", MemberChangeApplyState.UNION);
|
||||
case 2 -> cnd.and("mcr.stateId", "=", MemberChangeApplyState.UNION);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
sql.setParam("auditState", MemberChangeApplyState.UNION);
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.asc("u.loginName");
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校工会 审核分页数据
|
||||
*
|
||||
* @param pageForm
|
||||
*/
|
||||
@Override
|
||||
public Pagination masterUnionAuditPageData(MemberAuditPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mcr.*,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode,
|
||||
state.stateName,
|
||||
IF(mcr.stateId = @auditState,TRUE,FALSE) canAudit
|
||||
FROM
|
||||
`member_change_record` mcr
|
||||
LEFT JOIN `user` u ON u.userId = mcr.userId
|
||||
LEFT JOIN audit_state state ON state.stateId = mcr.stateId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.desc("mcr.applyTime");
|
||||
cnd.asc("mcr.stateId");
|
||||
|
||||
String[] dateRange = pageForm.getDateRange();
|
||||
if (Lang.isNotEmpty(dateRange)) {
|
||||
cnd.and("date(mcr.applyTime)", ">=", dateRange[0]);
|
||||
cnd.and("date(mcr.applyTime)", "<=", dateRange[1]);
|
||||
}
|
||||
// cnd.andEX("mcr.originUnionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
|
||||
switch (pageForm.getAudit()) {
|
||||
case 0 -> cnd.and("mcr.stateId", ">=", MemberChangeApplyState.SCHOOL_UNION);
|
||||
case 1 -> cnd.and("mcr.stateId", ">", MemberChangeApplyState.SCHOOL_UNION);
|
||||
case 2 -> cnd.and("mcr.stateId", "=", MemberChangeApplyState.SCHOOL_UNION);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
sql.setParam("auditState", MemberChangeApplyState.SCHOOL_UNION);
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.asc("u.loginName");
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void userUnitMove(List<MemberChangeRecord> changeRecords) {
|
||||
Date date = new Date();
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditPass(true);
|
||||
audit.setAuditOpinion(MemberOrigin.BATCH.getDescription());
|
||||
dao().insert(audit);
|
||||
|
||||
for (MemberChangeRecord record : changeRecords) {
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setType(UserChangeType.UNIT_CHANGE.getCode());
|
||||
record.setApplyTime(date);
|
||||
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
|
||||
record.setStateId(MemberChangeApplyState.SUCCESS);
|
||||
record.setSchoolAuditId(audit.getId());
|
||||
|
||||
Chain chain = Chain.make("deptId", record.getCurrentUnitId()).add("threeUnitId", record.getCurrentThreeUnitId());
|
||||
dao().update(SysUser.class, chain, Cnd.where("userId", "=", record.getUserId()));
|
||||
}
|
||||
dao().insert(changeRecords);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.api.domain.MemberHistory;
|
||||
import com.ruoyi.member.service.MemberHistoryService;
|
||||
import com.ruoyi.system.api.domain.SysDept;
|
||||
import com.ruoyi.system.api.domain.SysUnionGroup;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName MemberHistoryServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 11:18
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberHistoryServiceImpl extends BaseServiceImpl<MemberHistory> implements MemberHistoryService {
|
||||
|
||||
public MemberHistoryServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
||||
|
||||
@Resource
|
||||
private DataSourceTransactionManager dataSourceTransactionManager;
|
||||
|
||||
@Resource
|
||||
private TransactionDefinition transactionDefinition;
|
||||
|
||||
/**
|
||||
* 存档
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void archive(Integer year) {
|
||||
List<MemberHistory> members = listEntity(Sqls.create("SELECT * from sys_user where member = @memberType").setParam("memberType", MemberMode.NORMAL.getCode()));
|
||||
|
||||
//工会小组id
|
||||
List<SysUnionGroup> unionGroups = dao().query(SysUnionGroup.class, Cnd.NEW());
|
||||
Map<String, SysUnionGroup> unionGroupMap = unionGroups.stream().collect(Collectors.toMap(SysUnionGroup::getId, v -> v));
|
||||
|
||||
List<SysDept> depts = dao().query(SysDept.class, Cnd.where("unitLevel", "=", 2));
|
||||
Map<Long, SysDept> deptMap = depts.stream().collect(Collectors.toMap(v -> v.getDeptId(), v -> v));
|
||||
|
||||
int memberHistoryNum = count(Cnd.where("year", "=", year));
|
||||
if (memberHistoryNum > 0) {
|
||||
clear(Cnd.where("year", "=", year));
|
||||
}
|
||||
for (MemberHistory member : members) {
|
||||
member.setId(R.UU32());
|
||||
member.setYear(year);
|
||||
SysDept sysDept = deptMap.get(member.getDeptId());
|
||||
if (Lang.isNotEmpty(sysDept)) {
|
||||
SysUnionGroup sysUnionGroup = unionGroupMap.get(sysDept.getUnionGroupId());
|
||||
if (Lang.isNotEmpty(sysUnionGroup)) {
|
||||
member.setUnionGroupId(sysUnionGroup.getId());
|
||||
member.setUnionGroupName(sysUnionGroup.getGroupName());
|
||||
member.setUnionGroupCode(sysUnionGroup.getGroupCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<List<MemberHistory>> memberSplits = ListUtil.split(members, 1000);
|
||||
CountDownLatch countDownLatch = new CountDownLatch(memberSplits.size());
|
||||
|
||||
for (List<MemberHistory> splitUsers : memberSplits) {
|
||||
new Thread(() -> {
|
||||
dao().fastInsert(splitUsers);
|
||||
countDownLatch.countDown();
|
||||
}).start();
|
||||
}
|
||||
|
||||
try {
|
||||
countDownLatch.await();
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void doSave(List<MemberHistory> memberHistories, CountDownLatch memberCountDownLatch, AtomicBoolean hasError, CountDownLatch mainLatch) {
|
||||
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
|
||||
|
||||
try {
|
||||
dao().insert(memberHistories);
|
||||
} catch (Throwable throwable) {
|
||||
throwable.printStackTrace();
|
||||
hasError.set(true);
|
||||
} finally {
|
||||
memberCountDownLatch.countDown();
|
||||
}
|
||||
|
||||
try {
|
||||
mainLatch.await();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
hasError.set(true);
|
||||
}
|
||||
|
||||
//事务操作
|
||||
if (hasError.get()) {
|
||||
dataSourceTransactionManager.rollback(transactionStatus);
|
||||
} else {
|
||||
dataSourceTransactionManager.commit(transactionStatus);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.member.api.constant.*;
|
||||
import com.ruoyi.member.api.domain.Audit;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.service.MemberInfoBatchMakeService;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName MemberInfoBatchMakeServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/19 15:27
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberInfoBatchMakeServiceImpl extends BaseServiceImpl implements MemberInfoBatchMakeService {
|
||||
public MemberInfoBatchMakeServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void joinMemberFamily(Long[] userIds) {
|
||||
UserMode.addMemberRole(userIds);
|
||||
Audit audit = new Audit();
|
||||
audit.setAuditPass(true);
|
||||
audit.setAuditOpinion(MemberOrigin.BATCH.getDescription());
|
||||
dao().insert(audit);
|
||||
List<MemberChangeRecord> changeRecords = Arrays.stream(userIds).map(v -> {
|
||||
MemberChangeRecord record = new MemberChangeRecord();
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setType(UserChangeType.RESTORE.getCode());
|
||||
record.setUserId(v);
|
||||
record.setApplyTime(new Date());
|
||||
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
|
||||
record.setStateId(MemberChangeApplyState.SUCCESS);
|
||||
record.setSchoolAuditId(audit.getId());
|
||||
return record;
|
||||
}).collect(Collectors.toList());
|
||||
dao().insert(changeRecords);
|
||||
}
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.constant.UserConstants;
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.common.security.auth.AuthUtil;
|
||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.api.constant.*;
|
||||
import com.ruoyi.member.api.domain.MemberChangeRecord;
|
||||
import com.ruoyi.member.api.domain.UserHistory;
|
||||
import com.ruoyi.member.service.MemberService;
|
||||
import com.ruoyi.system.api.domain.SysUser;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.entity.Entity;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @ClassName MemberServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/21 17:16
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberServiceImpl extends BaseServiceImpl implements MemberService {
|
||||
private static final Logger log = LoggerFactory.getLogger(MemberServiceImpl.class);
|
||||
|
||||
public MemberServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
static final Long COMMON_USER_ROLE = 2L;
|
||||
|
||||
/**
|
||||
* 补充成员
|
||||
*
|
||||
* @param user 用户
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void
|
||||
supplementMember(SysUser user) {
|
||||
user.setCreateBy(SecurityUtils.getUsername());
|
||||
user.setPassword(SecurityUtils.encryptPassword(UserConstants.DEFAULT_PASSWORD));
|
||||
user.setMemberOrigin(MemberOrigin.MAKE.getCode());
|
||||
dao().insert(user);
|
||||
UserMode.addMemberRole(user.getUserId(), user.getMemberOrigin());
|
||||
|
||||
//添加到用户历史表
|
||||
SysUser new_user = dao().fetch(SysUser.class, user.getUserId());
|
||||
dao().fetchLinks(new_user, "dept");
|
||||
UserHistory userHistory = new UserHistory();
|
||||
BeanUtils.copyProperties(new_user, userHistory);
|
||||
userHistory.setChangeTime(new Date());
|
||||
userHistory.setChangeType(UserChangeType.NEW.getCode());
|
||||
|
||||
//添加到会员变更表
|
||||
MemberChangeRecord record = new MemberChangeRecord();
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setType(UserChangeType.NEW.getCode());
|
||||
record.setUserId(new_user.getUserId());
|
||||
record.setCurrentUnitId(new_user.getDeptId());
|
||||
record.setCurrentUnionId(new_user.getDept().getUnionId());
|
||||
record.setApplyTime(new Date());
|
||||
if (AuthUtil.hasAnyRoles("admin,A06")) {
|
||||
record.setApplyOrigin(MemberChangeOrigin.SCHOOL.getCode());
|
||||
} else {
|
||||
record.setApplyOrigin(MemberChangeOrigin.UNION.getCode());
|
||||
}
|
||||
record.setRecordMode(MemberChangeRecordMode.MEMBER.getCode());
|
||||
record.setStateId(MemberChangeApplyState.SUCCESS);
|
||||
dao().insert(record);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Long getDeptId(Map<String, Long> codeMap, Map<String, Long> nameMap, String code, String name) {
|
||||
if (StrUtil.isNotBlank(code) && StrUtil.isNotBlank(name) || (StrUtil.isNotBlank(code) && StrUtil.isBlank(name))) {
|
||||
return codeMap.get(code);
|
||||
} else if (StrUtil.isBlank(code) && StrUtil.isNotBlank(name)) {
|
||||
return nameMap.get(name);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public <T> void largeQuantitiesInsert(List<T> list, Integer mode, Boolean isFastInsert) {
|
||||
if (Lang.isEmpty(list)) return;
|
||||
try {
|
||||
// 创建一个固定大小的线程池
|
||||
int numberOfThreads = 10; // 可以根据服务器性能调整线程池大小
|
||||
ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
|
||||
|
||||
// 将sources分成若干批
|
||||
int batchSize = 200; // 每批处理的数据量,可以根据实际情况调整
|
||||
|
||||
for (int i = 0; i < list.size(); i += batchSize) {
|
||||
final int end = Math.min(i + batchSize, list.size());
|
||||
List<T> batch = list.subList(i, end);
|
||||
executorService.submit(() -> {
|
||||
if (mode == 1) {
|
||||
if (isFastInsert) {
|
||||
dao().fastInsert(batch);
|
||||
} else {
|
||||
dao().insert(batch);
|
||||
}
|
||||
} else {
|
||||
dao().updateIgnoreNull(batch);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
executorService.shutdown();
|
||||
|
||||
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
|
||||
executorService.shutdownNow();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+179
@@ -0,0 +1,179 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.page.Pagination;
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
import com.ruoyi.common.security.auth.AuthUtil;
|
||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.api.constant.MemberPageForm;
|
||||
import com.ruoyi.member.api.constant.MemberStatus;
|
||||
import com.ruoyi.member.service.MemberStatisticQueryService;
|
||||
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.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticQueryServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 10:40
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberStatisticQueryServiceImpl extends BaseServiceImpl implements MemberStatisticQueryService {
|
||||
|
||||
public MemberStatisticQueryServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Integer year, String unionId, Long unitId, String unionGroupId, Long threeUnitId, List<String> personTypes, List<String> userStates, List<String> memberStatus,
|
||||
List<String> sexs,
|
||||
List<Integer> age,
|
||||
String field,
|
||||
String fieldInputValue,
|
||||
Object[] fieldSelectValues,
|
||||
String fieldDateValue,
|
||||
String retireTime) {
|
||||
int yyyy = Calendar.getInstance().get(Calendar.YEAR);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("SELECT * from $table $condition");
|
||||
if (year == yyyy) {
|
||||
sql.setVar("table", "user");
|
||||
} else {
|
||||
sql.setVar("table", "member_his");
|
||||
cnd.andEX("year", "=", year);
|
||||
}
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
cnd.andEX("deptId", "=", unitId);
|
||||
cnd.andEX("unionGroupId", "=", unionGroupId);
|
||||
cnd.andEX("threeUnitId", "=", threeUnitId);
|
||||
|
||||
cnd.andEX("personType", "in", personTypes);
|
||||
cnd.andEX("userState", "in", userStates);
|
||||
|
||||
if (memberStatus != null && memberStatus.size() > 0) {
|
||||
cnd.andEX("memberStatus", "in", memberStatus);
|
||||
} else {
|
||||
cnd.and("member", "=", MemberMode.NORMAL.getCode());
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
List<Integer> status = new ArrayList<>();
|
||||
status.add(MemberStatus.NORMAL.getCode());
|
||||
status.add(MemberStatus.TURN_IN.getCode());
|
||||
status.add(MemberStatus.RESTORE.getCode());
|
||||
group.and("memberStatus", "in", status);
|
||||
group.or("memberStatus", "IS", null);
|
||||
cnd.and(group);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(retireTime)){
|
||||
cnd.and("DATE_FORMAT(retireTime, '%Y-%m')","=",retireTime);
|
||||
}
|
||||
|
||||
if (sexs != null && sexs.size() > 0) {
|
||||
cnd.andEX("sex", "in", sexs);
|
||||
}
|
||||
|
||||
if (age != null && age.size() > 0 && age.get(1) != 0) {
|
||||
cnd.andEX("age", "between", age);
|
||||
}
|
||||
|
||||
// if (StrUtil.isNotBlank(field) && Lang.isNotEmpty(fieldValue)) {
|
||||
// System.out.println(1);
|
||||
// }
|
||||
|
||||
|
||||
if (!AuthUtil.hasAnyRole("admin,A06")) {
|
||||
if (AuthUtil.hasRole("H04")) {
|
||||
cnd.and("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.and("unionGroupId", "=", SecurityUtils.getUnionGroupId());
|
||||
}
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.asc("unionId");
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
for (NutMap nutMap : list) {
|
||||
if(!SecurityUtils.isAdmin()) {
|
||||
nutMap.put("idcard", "******");
|
||||
}
|
||||
}
|
||||
pagination.setList(list);
|
||||
return pagination;
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导出数据
|
||||
*
|
||||
* @param pageForm
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> exportList(MemberPageForm pageForm) {
|
||||
int yyyy = Calendar.getInstance().get(Calendar.YEAR);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("SELECT * from $table $condition");
|
||||
if (pageForm.getYear() != null) {
|
||||
if (pageForm.getYear() == yyyy) {
|
||||
sql.setVar("table", "user");
|
||||
} else {
|
||||
sql.setVar("table", "member_his");
|
||||
cnd.andEX("year", "=", pageForm.getYear());
|
||||
}
|
||||
} else {
|
||||
sql.setVar("table", "user");
|
||||
}
|
||||
|
||||
if(pageForm.getIsMember()!=null){
|
||||
cnd.and("member", "=", pageForm.getIsMember());
|
||||
}else{
|
||||
cnd.and("member", "=", MemberMode.NORMAL.getCode());
|
||||
}
|
||||
|
||||
if (AuthUtil.hasAnyRole("admin,A06")) {
|
||||
cnd.andEX("unionId", "=", pageForm.getUnionId());
|
||||
} else if (AuthUtil.hasRole("H04")) {
|
||||
cnd.andEX("unionId", "=", SecurityUtils.getUnionId());
|
||||
} else if (AuthUtil.hasRole("unionGroupLeader")) {
|
||||
cnd.andEX("unionId", "=", SecurityUtils.getUnionId());
|
||||
cnd.andEX("unionGroupId", "=", SecurityUtils.getUnionGroupId());
|
||||
}
|
||||
cnd.andEX("deptId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("unionGroupId", "=", pageForm.getUnionGroupId());
|
||||
cnd.andEX("threeUnitId", "=", pageForm.getThreeUnitId());
|
||||
cnd.andEX("personType", "in", pageForm.getPersonTypes());
|
||||
cnd.andEX("userState", "in", pageForm.getUserStates());
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getRetireTime())){
|
||||
cnd.and("DATE_FORMAT(retireTime, '%Y-%m')","=",pageForm.getRetireTime());
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return listMap(sql);
|
||||
}
|
||||
}
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.common.security.auth.AuthUtil;
|
||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.service.MemberStatisticSexAgeService;
|
||||
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.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticSexAgeServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/21 9:28
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberStatisticSexAgeServiceImpl extends BaseServiceImpl implements MemberStatisticSexAgeService {
|
||||
public MemberStatisticSexAgeServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
public static final List<NutMap> commonLabelList = new ArrayList<>() {{
|
||||
add(NutMap.NEW().addv("prop", "总人数").addv("label", "总人数"));
|
||||
add(NutMap.NEW().addv("prop", "男会员").addv("label", "男会员"));
|
||||
add(NutMap.NEW().addv("prop", "女会员").addv("label", "女会员"));
|
||||
add(NutMap.NEW().addv("prop", "小于等于40岁会员").addv("label", "小于等于40岁会员"));
|
||||
add(NutMap.NEW().addv("prop", "40~50").addv("label", "40~50"));
|
||||
add(NutMap.NEW().addv("prop", "50~55").addv("label", "50~55"));
|
||||
add(NutMap.NEW().addv("prop", "大于55").addv("label", "大于55"));
|
||||
}};
|
||||
|
||||
/**
|
||||
* 性别 年龄统计
|
||||
*
|
||||
* @param searchType 1分工会 2单位
|
||||
* @param year 年度
|
||||
* @param unionId 工会id
|
||||
* @param deptId 单位id
|
||||
* @param userTypes 人员类型
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public NutMap list(int searchType, int year, String unionId, Long deptId, List<String> userTypes) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (searchType == 1) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
gh.id,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
$totalSql,
|
||||
count( CASE WHEN m.sex = '0' $yearCnd THEN 1 ELSE NULL END ) AS '男会员',
|
||||
count( CASE WHEN m.sex = '1' $yearCnd THEN 1 ELSE NULL END ) AS '女会员',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())<= 40 $yearCnd THEN 1 ELSE NULL END) AS '小于等于40岁会员',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())> 40
|
||||
AND TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())<= 50
|
||||
$yearCnd
|
||||
THEN 1 ELSE NULL END) AS '40~50',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())> 50
|
||||
AND TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())<= 55
|
||||
$yearCnd
|
||||
THEN 1 ELSE NULL END) AS '50~55',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())> 55
|
||||
$yearCnd
|
||||
THEN 1 ELSE NULL END) AS '大于55'\s
|
||||
FROM
|
||||
sys_union gh
|
||||
LEFT JOIN $memberTable m ON m.unionId = gh.id\s
|
||||
$condition
|
||||
""");
|
||||
if (year == Calendar.getInstance().get(Calendar.YEAR)) {
|
||||
sql.setVar("memberTable", "member");
|
||||
sql.setVar("totalSql", "count( m.userId ) AS '总人数'");
|
||||
} else {
|
||||
sql.setVar("memberTable", "member_his");
|
||||
sql.setVar("yearCnd", "AND m.`year` = %d".formatted(year));
|
||||
sql.setVar("totalSql", "count( CASE WHEN m.`year` = %d THEN 1 ELSE NULL END ) AS '总人数'".formatted(year));
|
||||
}
|
||||
|
||||
cnd.groupBy("gh.id");
|
||||
cnd.asc("gh.unionCode");
|
||||
cnd.andEX("gh.id", "=", unionId);
|
||||
|
||||
if (!AuthUtil.hasAnyRole("admin,A06")) {
|
||||
cnd.andEX("gh.id", "=", SecurityUtils.getUnionId());
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
List dataList = listMap(sql);
|
||||
List<NutMap> labelList = new ArrayList<>(commonLabelList);
|
||||
labelList.add(0, NutMap.NEW().addv("prop", "unionName").addv("label", "分工会"));
|
||||
labelList.add(1, NutMap.NEW().addv("prop", "unionCode").addv("label", "分工会编码"));
|
||||
return NutMap.NEW().addv("labelList", labelList).addv("dataList", dataList);
|
||||
} else {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
dw.dept_id as deptId,
|
||||
dw.dept_name as deptName,
|
||||
dw.dept_code as deptCode,
|
||||
$totalSql,
|
||||
count( CASE WHEN m.sex = '0' $yearCnd THEN 1 ELSE NULL END ) AS '男会员',
|
||||
count( CASE WHEN m.sex = '1' $yearCnd THEN 1 ELSE NULL END ) AS '女会员',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())<= 40 $yearCnd THEN 1 ELSE NULL END) AS '小于等于40岁会员',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())> 40
|
||||
AND TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())<= 50
|
||||
$yearCnd
|
||||
THEN 1 ELSE NULL END) AS '40~50',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())> 50
|
||||
AND TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())<= 55
|
||||
$yearCnd
|
||||
THEN 1 ELSE NULL END) AS '50~55',
|
||||
count( CASE WHEN TIMESTAMPDIFF ( YEAR, m.birthday, CURDATE())> 55
|
||||
$yearCnd
|
||||
THEN 1 ELSE NULL END) AS '大于55'\s
|
||||
FROM
|
||||
sys_dept dw
|
||||
LEFT JOIN $memberTable m ON m.deptId = dw.dept_id\s
|
||||
$condition
|
||||
""");
|
||||
if (year == Calendar.getInstance().get(Calendar.YEAR)) {
|
||||
sql.setVar("memberTable", "member");
|
||||
sql.setVar("totalSql", "count( m.userId ) AS '总人数'");
|
||||
} else {
|
||||
sql.setVar("memberTable", "member_his");
|
||||
sql.setVar("yearCnd", "AND m.`year` = %d".formatted(year));
|
||||
sql.setVar("totalSql", "count( CASE WHEN m.`year` = %d THEN 1 ELSE NULL END ) AS '总人数'".formatted(year));
|
||||
}
|
||||
|
||||
cnd.groupBy("dw.dept_id");
|
||||
cnd.asc("dw.dept_code");
|
||||
cnd.and("dw.parent_id", "=", 1);
|
||||
cnd.andEX("dw.dept_id", "=", deptId);
|
||||
|
||||
if (!AuthUtil.hasAnyRole("admin,A06")) {
|
||||
cnd.andEX("dw.union_id", "=", SecurityUtils.getUnionId());
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
List dataList = listMap(sql);
|
||||
List<NutMap> labelList = new ArrayList<>(commonLabelList);
|
||||
labelList.add(0, NutMap.NEW().addv("prop", "deptName").addv("label", "单位"));
|
||||
labelList.add(1, NutMap.NEW().addv("prop", "deptCode").addv("label", "单位编码"));
|
||||
return NutMap.NEW().addv("labelList", labelList).addv("dataList", dataList);
|
||||
}
|
||||
}
|
||||
}
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.common.security.auth.AuthUtil;
|
||||
import com.ruoyi.common.security.utils.SecurityUtils;
|
||||
import com.ruoyi.member.service.MemberStatisticUserTypeService;
|
||||
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.lang.util.NutMap;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName MemberStatisticUserTypeServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhaoxinyu
|
||||
* @Date 2022/12/20 14:27
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MemberStatisticUserTypeServiceImpl extends BaseServiceImpl implements MemberStatisticUserTypeService {
|
||||
public MemberStatisticUserTypeServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public NutMap listByUnion(String unionId, String unitId) {
|
||||
List<SysDictData> userTypeDictDataList = dao().query(SysDictData.class, Cnd.where("dictType", "=", "user_type"));
|
||||
List<NutMap> labelList = new ArrayList<>();
|
||||
StringBuilder userTypeSqlStr = new StringBuilder();
|
||||
labelList.add(NutMap.NEW().addv("label", "分工会").addv("prop", "unionName"));
|
||||
labelList.add(NutMap.NEW().addv("label", "分工会编码").addv("prop", "unionCode"));
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
gh.id AS unionId,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
count( CASE WHEN u.member = 1 THEN 1 ELSE NULL END ) AS '小计',
|
||||
$userTypeSql
|
||||
FROM
|
||||
sys_union gh
|
||||
LEFT JOIN `user` u ON u.unionid = gh.id\s
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.groupBy("gh.id");
|
||||
cnd.asc("gh.unionCode");
|
||||
cnd.andEX("gh.id", "=", unionId);
|
||||
if (!AuthUtil.hasAnyRole(List.of("admin", "A06"))) {
|
||||
cnd.and("gh.id", "=", SecurityUtils.getUnionId());
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
|
||||
for (int i = 0; i < userTypeDictDataList.size(); i++) {
|
||||
SysDictData dictData = userTypeDictDataList.get(i);
|
||||
userTypeSqlStr.append("count( CASE WHEN u.personType = '%s' and u.member = 1 THEN 1 ELSE NULL END ) AS '%s'".formatted(dictData.getDictValue(), dictData.getDictLabel()));
|
||||
if (i != userTypeDictDataList.size() - 1) {
|
||||
userTypeSqlStr.append(",");
|
||||
}
|
||||
labelList.add(NutMap.NEW().addv("label", dictData.getDictLabel()).addv("prop", dictData.getDictLabel()));
|
||||
}
|
||||
labelList.add(NutMap.NEW().addv("label", "小计").addv("prop", "小计"));
|
||||
|
||||
sql.setVar("userTypeSql", userTypeSqlStr.toString());
|
||||
List<NutMap> dataList = listMap(sql);
|
||||
return NutMap.NEW().addv("labelList", labelList).addv("dataList", dataList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap listByUnit(String unitId) {
|
||||
List<SysDictData> userTypeDictDataList = dao().query(SysDictData.class, Cnd.where("dictType", "=", "user_type"));
|
||||
List<NutMap> labelList = new ArrayList<>();
|
||||
StringBuilder userTypeSqlStr = new StringBuilder();
|
||||
labelList.add(NutMap.NEW().addv("label", "单位").addv("prop", "deptName"));
|
||||
labelList.add(NutMap.NEW().addv("label", "单位编码").addv("prop", "deptCode"));
|
||||
labelList.add(NutMap.NEW().addv("label", "分工会").addv("prop", "unionName"));
|
||||
labelList.add(NutMap.NEW().addv("label", "分工会编码").addv("prop", "unionCode"));
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
dw.dept_id AS deptId,
|
||||
dw.dept_name AS deptName,
|
||||
dw.dept_code AS deptCode,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
count( CASE WHEN u.member = 1 THEN 1 ELSE NULL END ) AS '小计',
|
||||
$userTypeSql
|
||||
FROM
|
||||
sys_dept dw
|
||||
LEFT JOIN `user` u ON u.deptId = dw.dept_id
|
||||
LEFT JOIN sys_union gh ON gh.id = dw.union_id
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
// cnd.and("dw.parent_id", "=", 100);
|
||||
cnd.andEX("dw.unit_level", "=", 2);
|
||||
cnd.andEX("dw.dept_id", "=", unitId);
|
||||
cnd.groupBy("dw.dept_id");
|
||||
cnd.asc("dw.dept_code");
|
||||
if (!AuthUtil.hasAnyRole(List.of("admin", "A06"))) {
|
||||
cnd.and("dw.union_id", "=", SecurityUtils.getUnionId());
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
|
||||
for (int i = 0; i < userTypeDictDataList.size(); i++) {
|
||||
SysDictData dictData = userTypeDictDataList.get(i);
|
||||
userTypeSqlStr.append("count( CASE WHEN u.personType = '%s' and u.member = 1 THEN 1 ELSE NULL END ) AS '%s'".formatted(dictData.getDictValue(), dictData.getDictLabel()));
|
||||
if (i != userTypeDictDataList.size() - 1) {
|
||||
userTypeSqlStr.append(",");
|
||||
}
|
||||
labelList.add(NutMap.NEW().addv("label", dictData.getDictLabel()).addv("prop", dictData.getDictLabel()));
|
||||
}
|
||||
|
||||
labelList.add(NutMap.NEW().addv("label", "小计").addv("prop", "小计"));
|
||||
|
||||
sql.setVar("userTypeSql", userTypeSqlStr.toString());
|
||||
List<NutMap> dataList = listMap(sql);
|
||||
return NutMap.NEW().addv("labelList", labelList).addv("dataList", dataList);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.ruoyi.member.util;
|
||||
|
||||
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
||||
import com.ruoyi.member.constant.Ds;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 数据源执行
|
||||
*
|
||||
* @author jug
|
||||
* @date 2022/12/30
|
||||
*/
|
||||
@Getter
|
||||
public class ProModuleDS {
|
||||
|
||||
/**
|
||||
* 执行某个数据源下的业务代码 有返回值 不需要就返回null
|
||||
*
|
||||
* @param ds
|
||||
* @param supplier
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> T exec(Ds ds, Supplier<T> supplier) {
|
||||
DynamicDataSourceContextHolder.clear();
|
||||
switch (ds) {
|
||||
case STAFFSERVICE -> DynamicDataSourceContextHolder.push("master");
|
||||
case SYSTEM -> DynamicDataSourceContextHolder.push("system");
|
||||
}
|
||||
T t;
|
||||
try {
|
||||
t = supplier.get();
|
||||
DynamicDataSourceContextHolder.clear();
|
||||
return t;
|
||||
} catch (Exception e) {
|
||||
DynamicDataSourceContextHolder.clear();
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static void execVoid(Ds ds, Runnable runnable) {
|
||||
DynamicDataSourceContextHolder.clear();
|
||||
switch (ds) {
|
||||
case STAFFSERVICE -> DynamicDataSourceContextHolder.push("master");
|
||||
case SYSTEM -> DynamicDataSourceContextHolder.push("system");
|
||||
}
|
||||
try {
|
||||
runnable.run();
|
||||
DynamicDataSourceContextHolder.clear();
|
||||
} catch (Exception e) {
|
||||
DynamicDataSourceContextHolder.clear();
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
package com.ruoyi.memberPayment.controller;
|
||||
|
||||
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.hutool.core.date.DateUtil;
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.member.api.domain.MemberPayMent;
|
||||
import com.ruoyi.memberPayment.service.MemberPayMentService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员会费记录导入
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/memberPaymentImport")
|
||||
@Slf4j
|
||||
public class MemberPayMentImportController {
|
||||
|
||||
@Autowired
|
||||
private MemberPayMentService memberPayMentService;
|
||||
|
||||
/**
|
||||
* 模板下载
|
||||
*
|
||||
* @param response
|
||||
*/
|
||||
@GetMapping(value = "/downLoadExcelTemplate")
|
||||
public void downLoadExcelTemplate(HttpServletResponse response) {
|
||||
try {
|
||||
List<MemberPayMent> dataList = new ArrayList<>() {{
|
||||
add(new MemberPayMent()
|
||||
.setLoginName("100001")
|
||||
.setUserName("张三")
|
||||
.setIsPay(true)
|
||||
.setStartDate(new Date())
|
||||
.setEndDate(DateUtil.offsetMonth(new Date(), 3))
|
||||
.setMoney(new BigDecimal("100")));
|
||||
}};
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, MemberPayMent.class, dataList);
|
||||
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) {
|
||||
log.error("导出会员信息失败{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取excel
|
||||
*
|
||||
* @param multipartFile 多部分文件
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@PostMapping("/readExcel")
|
||||
public AjaxResult readExcel(@RequestParam(name = "file") MultipartFile multipartFile) {
|
||||
try {
|
||||
ImportParams importParams = new ImportParams();
|
||||
List<MemberPayMent> list = ExcelImportUtil.importExcel(multipartFile.getInputStream(), MemberPayMent.class, importParams);
|
||||
return AjaxResult.success(memberPayMentService.checkData(list));
|
||||
} catch (Exception e) {
|
||||
return AjaxResult.warn(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@RequestBody List<MemberPayMent> memberPayMents) {
|
||||
memberPayMentService.insert(memberPayMents);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
package com.ruoyi.memberPayment.controller;
|
||||
|
||||
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.ArrayUtil;
|
||||
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.memberPayment.service.MemberPayMentService;
|
||||
import com.ruoyi.system.api.domain.SysDictData;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/memberPaymentRecords")
|
||||
@Slf4j
|
||||
public class MemberPayMentRecordsController {
|
||||
|
||||
@Autowired
|
||||
private MemberPayMentService memberPayMentService;
|
||||
|
||||
@PostMapping("/pageData")
|
||||
public AjaxResult pageData(@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
|
||||
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate
|
||||
) {
|
||||
Sql sql = memberPayMentService.recordSql(pageForm, unionId, unitId, startDate, endDate);
|
||||
Pagination pagination = memberPayMentService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return AjaxResult.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付时间
|
||||
*
|
||||
* @return {@link AjaxResult}
|
||||
*/
|
||||
@GetMapping("/payTimes")
|
||||
public AjaxResult payTimes() {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT id,startDate,endDate FROM `member_payment`
|
||||
GROUP BY startDate,endDate
|
||||
ORDER BY startDate ASC
|
||||
""");
|
||||
List<NutMap> list = memberPayMentService.listMap(sql);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
|
||||
@DeleteMapping("/doDelete")
|
||||
public AjaxResult doDelete(@RequestParam(required = false) String id) {
|
||||
memberPayMentService.delete(id);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@RequestMapping("/exportExcel")
|
||||
public void exportExcel(HttpServletResponse response,
|
||||
@RequestBody PageForm pageForm,
|
||||
@RequestParam(required = false) String unionId,
|
||||
@RequestParam(required = false) String unitId,
|
||||
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
|
||||
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
|
||||
@RequestParam String props) {
|
||||
|
||||
|
||||
try {
|
||||
Sql sql = memberPayMentService.recordSql(pageForm, unionId, unitId, startDate, endDate);
|
||||
List<NutMap> dataList = memberPayMentService.listMap(sql);
|
||||
|
||||
List<SysDictData> dictDataList = memberPayMentService.dao().query(SysDictData.class, Cnd.where("dictType", "in", new String[]{"sys_user_sex", "user_type", "user_state"}));
|
||||
String[] sys_user_sexes = dictDataList.stream().filter(v -> v.getDictType().equals("sys_user_sex")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
String[] user_types = dictDataList.stream().filter(v -> v.getDictType().equals("user_type")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
String[] user_states = dictDataList.stream().filter(v -> v.getDictType().equals("user_state")).map(v -> v.getDictLabel() + "_" + v.getDictValue()).toArray(String[]::new);
|
||||
|
||||
Map<String, String> propMap = Json.fromJson(Map.class, props);
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<ExcelExportEntity>();
|
||||
propMap.forEach((k, v) -> {
|
||||
ExcelExportEntity excelExportEntity = new ExcelExportEntity(v, k, 20);
|
||||
switch (k) {
|
||||
case "sex" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(sys_user_sexes, "_null"));
|
||||
}
|
||||
case "personType" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(user_types, "_null"));
|
||||
}
|
||||
case "userState" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(ArrayUtil.append(user_states, "_null"));
|
||||
}
|
||||
case "isPay" -> {
|
||||
excelExportEntity.setAddressList(true);
|
||||
excelExportEntity.setReplace(new String[]{"是_true", "否_false"});
|
||||
}
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
entityList.add(excelExportEntity);
|
||||
});
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, dataList);
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("会员缴费记录.xlsx").getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
} catch (IOException e) {
|
||||
log.error("导出会员缴费记录失败{}", e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package com.ruoyi.memberPayment.controller;
|
||||
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.memberPayment.service.MemberPayMentService;
|
||||
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.format.annotation.DateTimeFormat;
|
||||
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.Date;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/memberPaymentStatistics")
|
||||
public class MemberPayMentStatisticsController {
|
||||
|
||||
@Autowired
|
||||
private MemberPayMentService memberPayMentService;
|
||||
|
||||
@PostMapping("/unionStatistics")
|
||||
public AjaxResult unionStatistics(@RequestParam(required = false) String unionId,
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
gh.id,
|
||||
gh.unionName,
|
||||
gh.unionCode,
|
||||
count( DISTINCT mp.userId ) AS userTotal,
|
||||
sum( CASE WHEN mp.isPay =1 THEN 1 ELSE 0 END ) payed,
|
||||
sum( CASE WHEN mp.isPay =0 THEN 1 ELSE 0 END ) notPayed
|
||||
FROM
|
||||
sys_union gh
|
||||
LEFT JOIN member_payment mp ON gh.id = mp.unionId AND mp.startDate = @startDate AND mp.endDate = @endDate
|
||||
$condition
|
||||
""");
|
||||
sql.setParam("startDate", startDate);
|
||||
sql.setParam("endDate", endDate);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("gh.id", "=", unionId);
|
||||
cnd.groupBy("gh.id");
|
||||
cnd.asc("gh.unionCode");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = memberPayMentService.listMap(sql);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package com.ruoyi.memberPayment.service;
|
||||
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.service.BaseService;
|
||||
import com.ruoyi.member.api.domain.MemberPayMent;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public interface MemberPayMentService extends BaseService<MemberPayMent> {
|
||||
|
||||
/**
|
||||
* 检验数据合法性
|
||||
*
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
List<MemberPayMent> checkData(List<MemberPayMent> list);
|
||||
|
||||
/**
|
||||
* 导入数据
|
||||
*
|
||||
* @param list
|
||||
*/
|
||||
void importData(List<MemberPayMent> list);
|
||||
|
||||
|
||||
/**
|
||||
* 记录sql
|
||||
*
|
||||
* @param pageForm 页面形式
|
||||
* @param unionId 工会id
|
||||
* @param unitId 单位标识
|
||||
* @param startDate 开始日期
|
||||
* @param endDate 结束日期
|
||||
* @return {@link Sql}
|
||||
*/
|
||||
Sql recordSql(PageForm pageForm,
|
||||
String unionId,
|
||||
String unitId,
|
||||
Date startDate,
|
||||
Date endDate);
|
||||
}
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
package com.ruoyi.memberPayment.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.ruoyi.common.core.domain.PageForm;
|
||||
import com.ruoyi.common.core.service.BaseServiceImpl;
|
||||
import com.ruoyi.common.core.utils.sql.SqlUtil;
|
||||
import com.ruoyi.member.api.constant.MemberMode;
|
||||
import com.ruoyi.member.api.domain.MemberPayMent;
|
||||
import com.ruoyi.memberPayment.service.MemberPayMentService;
|
||||
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.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class MemberPayMentServiceImpl extends BaseServiceImpl<MemberPayMent> implements MemberPayMentService {
|
||||
|
||||
public MemberPayMentServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MemberPayMent> checkData(List<MemberPayMent> list) {
|
||||
for (MemberPayMent memberPayMent : list) {
|
||||
Sql sql = Sqls.create("select userId,deptId,unionId,member from `user` where loginName = @loginName and userName = @userName");
|
||||
sql.setParam("userName", memberPayMent.getUserName());
|
||||
sql.setParam("loginName", memberPayMent.getLoginName());
|
||||
// SysUser user = dao().fetch(SysUser.class, Cnd.where("userName", "=", memberPayMent.getLoginName()).and("nickName", "=", memberPayMent.getUserName()));
|
||||
NutMap userMap = fetch(sql);
|
||||
|
||||
|
||||
if (userMap == null) {
|
||||
memberPayMent.setErrMsg("用户信息不存在,请检查工号和姓名是否匹配!");
|
||||
break;
|
||||
}
|
||||
if (userMap.getInt("member", 0) != MemberMode.NORMAL.getCode()) {
|
||||
memberPayMent.setErrMsg("该用户不是会员");
|
||||
break;
|
||||
}
|
||||
if (userMap.get("deptId") == null) {
|
||||
memberPayMent.setErrMsg("该用户没有单位信息");
|
||||
break;
|
||||
}
|
||||
if (userMap.get("unionId") == null) {
|
||||
memberPayMent.setErrMsg("该用户没有分工会信息");
|
||||
break;
|
||||
}
|
||||
memberPayMent.setUserId((Long) userMap.get("userId"));
|
||||
memberPayMent.setDeptId((Long) userMap.get("userId"));
|
||||
memberPayMent.setUnionId(userMap.getString("unionId"));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void importData(List<MemberPayMent> list) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql recordSql(PageForm pageForm, String unionId, String unitId, Date startDate, Date endDate) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mp.id,
|
||||
mp.money,
|
||||
mp.isPay,
|
||||
DATE_FORMAT(mp.startDate,'%Y-%m-%d') as startDate,
|
||||
DATE_FORMAT(mp.endDate,'%Y-%m-%d') as endDate,
|
||||
u.userId,
|
||||
u.userName,
|
||||
u.loginName,
|
||||
u.sex,
|
||||
u.deptName,
|
||||
u.deptCode,
|
||||
u.unionName,
|
||||
u.unionCode,
|
||||
u.personType,
|
||||
u.userState
|
||||
FROM
|
||||
`member_payment` mp
|
||||
LEFT JOIN `user` u ON u.userId = mp.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("mp.startDate", "=", startDate);
|
||||
cnd.andEX("mp.endDate", "=", endDate);
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("u.deptId", "=", unitId);
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("u.userName", pageForm.getSearchKeyword());
|
||||
seg.orLike("u.loginName", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
# Tomcat
|
||||
server:
|
||||
port: 9210
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
application:
|
||||
# 应用名称
|
||||
name: ruoyi-member
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: prod
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
|
||||
nutz:
|
||||
dao:
|
||||
runtime:
|
||||
#是否自动建表 默认true
|
||||
create: true
|
||||
#是否自动变更 建议不要打开 会出问题
|
||||
migration: true
|
||||
# 是否添加列 默认true
|
||||
add-column: true
|
||||
# 是否删除列 默认true
|
||||
delete-column: false
|
||||
# 是否删表重建,注意此功能会删除全部表及数据,一般应用于demo或测试 默认false
|
||||
foce-create: false
|
||||
# 是否检查索引 默认true
|
||||
check-index: true
|
||||
# 相关实体所在包
|
||||
basepackage:
|
||||
- com.ruoyi.member.api.domain
|
||||
sql-manager:
|
||||
#自定义sql管理模式 file和xml
|
||||
mode: file
|
||||
# 自定义sql文件路径
|
||||
paths:
|
||||
- sqls
|
||||
json:
|
||||
auto-unicode: true
|
||||
quote-name: true
|
||||
ignore-null: false
|
||||
null-as-emtry: true
|
||||
enabled: true
|
||||
mode: compact
|
||||
|
||||
logging:
|
||||
file:
|
||||
name: logs/${spring.application.name}/info.log
|
||||
Binary file not shown.
@@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/ruoyi-member" />
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.ruoyi" level="info" />
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn" />
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info" />
|
||||
<appender-ref ref="file_error" />
|
||||
</root>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user