first commit

This commit is contained in:
2026-09-08 20:09:15 +08:00
commit c7e76e98ab
1647 changed files with 210480 additions and 0 deletions
+138
View File
@@ -0,0 +1,138 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-modules</artifactId>
<version>3.6.1</version>
</parent>
<artifactId>ruoyi-modules-additional</artifactId>
<properties>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.fox.version}</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- RuoYi Common DataSource -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId>
</dependency>
<!-- RuoYi Common DataScope -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-swagger</artifactId>
</dependency>
<!-- nutz -->
<dependency>
<groupId>org.nutz</groupId>
<artifactId>nutz-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api-additional</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api-system</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-api-activity</artifactId>
<version>3.6.1</version>
<scope>compile</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,35 @@
package com.ruoyi.additional;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author JyuHsin
* @Date ${DATE}
* @Description
*/
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
public class RuoYiAdditionalApplication {
public static void main(String[] args) {
SpringApplication.run(RuoYiAdditionalApplication.class, args);
try {
Dao dao = SpringUtils.getBean(Dao.class);
dao.execute(Sqls.create("ALTER TABLE `ry-additional`.`honor` \n" +
"MODIFY COLUMN `unitName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单位' AFTER `unionName`;"));
dao.execute(Sqls.create("ALTER TABLE `ry-additional`.`honor` \n" +
"MODIFY COLUMN `unionName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分工会' AFTER `jobStatus`;"));
}catch (Exception ignored) {
}
}
}
@@ -0,0 +1,28 @@
package com.ruoyi.additional.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,31 @@
package com.ruoyi.additional.constant;
import lombok.Getter;
/**
* 数据源
*
* @author jug
* @date 2022/12/30
*/
@Getter
public enum Ds {
/**
* 主库
*/
ADDITIONAL,
/**
* 活动
*/
ACTIVITY,
/**
* 系统
*/
SYSTEM,
PROPOSAL,
JDH;
}
@@ -0,0 +1,19 @@
package com.ruoyi.additional.constant.aidFundMember;
import com.ruoyi.common.core.domain.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class AidFundMemberPageForm extends PageForm {
String unitId;
String unionId;
String personType;
String userState;
String sex;
Integer year;
Boolean isAudit;
Boolean isPayed;
}
@@ -0,0 +1,46 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberApplyService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
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;
/**
* 基金会员申请
*
* @author jug
* @date 2023/03/06
*/
@RestController
@RequestMapping("/aidFundMember/apply")
public class AidFundMemberApplyController {
@Autowired
private AidFundMemberApplyService aidFundMemberApplyService;
@RequestMapping("/applyInfo")
@RequiresPermissions("aidFundMember:apply")
public AjaxResult applyInfo() {
NutMap userMap = aidFundMemberApplyService.applyInfo();
return AjaxResult.success(userMap);
}
@RequestMapping("/signOut")
@RequiresPermissions("aidFundMember:apply")
public AjaxResult signOut() {
aidFundMemberApplyService.doApply();
return AjaxResult.success();
}
@RequestMapping("/doApply")
@RequiresPermissions("aidFundMember:apply")
public AjaxResult doApply() {
aidFundMemberApplyService.doApply();
return AjaxResult.success();
}
}
@@ -0,0 +1,41 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberBatchJoinService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 基金成员批量加入
*
* @author jug
* @date 2023/02/15
*/
@RestController
@RequestMapping("/aidFundMember/batchJoin")
public class AidFundMemberBatchJoinController {
@Autowired
private AidFundMemberBatchJoinService aidFundMemberBatchJoinService;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:batchJoin")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = aidFundMemberBatchJoinService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("/batchSettings")
@RequiresPermissions("aidFundMember:batchJoin")
public AjaxResult batchSettings(@RequestBody String userIds[]) {
aidFundMemberBatchJoinService.batchSettings(userIds);
return AjaxResult.success();
}
}
@@ -0,0 +1,47 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberBranchUnionAuditService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 分工会审核
*
* @author jug
* @date 2023/02/15
*/
@RestController
@RequestMapping("/aidFundMember/branchUnionAudit")
public class AidFundMemberBranchUnionAuditController {
@Autowired
private AidFundMemberBranchUnionAuditService branchUnionAuditService;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:branchUnionAudit")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = branchUnionAuditService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("/doSubmit")
@RequiresPermissions("aidFundMember:branchUnionAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam String id) {
branchUnionAuditService.doSubmit(audit, id);
return AjaxResult.success();
}
@PostMapping("/doRevoke")
@RequiresPermissions("aidFundMember:branchUnionAudit")
public AjaxResult doRevoke(@RequestParam String id) {
branchUnionAuditService.doRevoke(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,73 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberChangeRecordService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
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.Collections;
import java.util.List;
@RestController
@RequestMapping("/aidFundMember/changeRecord")
@Slf4j
public class AidFundMemberChangeRecordController {
@Autowired
private AidFundMemberChangeRecordService aidFundMemberChangeRecordService;
@Autowired
private Dao dao;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:changeRecord")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = aidFundMemberChangeRecordService.pageData(pageForm);
return AjaxResult.success(pagination);
}
/**
* 审计信息
*
* @param id id
* @return {@link AjaxResult}
*/
@GetMapping("/auditInfo/{id}")
public AjaxResult auditInfo(@PathVariable String id) {
AidFundMemberAuditRecord record = aidFundMemberChangeRecordService.fetch(id);
List<String> unionAuditIds = record.getUnionAuditIds();
List<String> retirementAuditIds = record.getRetirementAuditIds();
List<String> fundAuditIds = record.getFundAuditIds();
NutMap result = NutMap.NEW();
result.setv("unionAudits", Lang.isEmpty(unionAuditIds) ? Collections.emptyList() : dao.query(Audit.class, Cnd.where("id", "in", unionAuditIds)));
result.setv("retirementAudits", Lang.isEmpty(retirementAuditIds) ? Collections.emptyList() : dao.query(Audit.class, Cnd.where("id", "in", retirementAuditIds)));
result.setv("fundAudits", Lang.isEmpty(fundAuditIds) ? Collections.emptyList() : dao.query(Audit.class, Cnd.where("id", "in", fundAuditIds)));
return AjaxResult.success(result);
}
/**
* 删除
*
* @param id
* @return
*/
@RequestMapping("/doDelete")
@RequiresPermissions("aidFundMember:changeRecord")
public AjaxResult doDelete(@RequestParam String id) {
aidFundMemberChangeRecordService.doDelete(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,91 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberPay;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberPayService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/aidFundMember/common")
public class AidFundMemberController {
@Autowired
private Dao dao;
@Autowired
private AidFundMemberPayService payService;
/**
* 用户信息
*
* @param id id
* @return {@link AjaxResult}
*/
@GetMapping("/userInfo/{id}")
public AjaxResult userInfo(@PathVariable String id) {
Sql sql = Sqls.create("""
SELECT
loginName,
userName,
sex,
birthday,
nation,
position,
jobTitle,
political,
mobile,
deptName,
unionName,
userState,
personType
FROM
`user`
WHERE userId = @userId
""");
sql.setParam("userId", id);
return AjaxResult.success(Daos.query(dao, sql.toString(), Sqls.callback.map()));
}
@GetMapping("/applyRecords/{userId}")
public AjaxResult applyRecords(@PathVariable String userId) {
Sql sql = Sqls.create("""
SELECT
afmar.*,
u.loginName,
u.userName,
state.stateName
FROM
aid_fund_member_audit_record afmar
LEFT JOIN audit_state state ON state.stateId = afmar.stateId
LEFT JOIN `user` u ON u.userId = afmar.userId
WHERE afmar.userId = @userId
ORDER BY afmar.applyTime DESC
""");
sql.setParam("userId", userId);
return AjaxResult.success(Daos.query(dao, sql.toString(), Sqls.callback.maps()));
}
/**
* 用户支付记录
*
* @param userId 用户id
* @return {@link AjaxResult}
*/
@GetMapping("/userPayRecords/{userId}")
public AjaxResult userPayRecords(@PathVariable String userId) {
List<AidFundMemberPay> payRecords = payService.query(Cnd.where("userId", "=", userId).desc("year"));
return AjaxResult.success(payRecords);
}
}
@@ -0,0 +1,88 @@
package com.ruoyi.additional.controller.aidFundMember;
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.additional.api.domain.Audit;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberFoundationAuditService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* 基金会审核
*
* @author jug
* @date 2023/02/15
*/
@RestController
@RequestMapping("/aidFundMember/foundationAudit")
@Slf4j
public class AidFundMemberFoundationAuditController {
@Autowired
private AidFundMemberFoundationAuditService foundationAuditService;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:foundationAudit")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = foundationAuditService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("/doSubmit")
@RequiresPermissions("aidFundMember:foundationAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam(name = "ids[]") List<String> ids) {
foundationAuditService.doSubmit(audit, ids);
return AjaxResult.success();
}
@PostMapping("/doRevoke")
@RequiresPermissions("aidFundMember:foundationAudit")
public AjaxResult doRevoke(@RequestParam String id) {
foundationAuditService.doRevoke(id);
return AjaxResult.success();
}
@PostMapping("/exportAuditUser")
@RequiresPermissions("aidFundMember:foundationAudit")
public void exportAuditUser(@RequestBody AidFundMemberPageForm pageForm, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> list = foundationAuditService.exportAuditUser(pageForm);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("分工会名称", "unionName", 20));
entities.add(new ExcelExportEntity("单位名称", "deptName", 20));
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("身份证号", "idcard", 20));
entities.add(new ExcelExportEntity("备注", "", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list);
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());
}
}
}
@@ -0,0 +1,42 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberHistoryService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/aidFundMember/historyRecord")
@Slf4j
public class AidFundMemberHistoryController {
@Autowired
private AidFundMemberHistoryService aidFundMemberHistoryService;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:historyRecord")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
assert pageForm.getYear() != null;
Pagination pagination = aidFundMemberHistoryService.pageData(pageForm);
return AjaxResult.success(pagination);
}
/**
* 删除
*
* @param id
* @return
*/
@RequestMapping("/doDelete")
@RequiresPermissions("aidFundMember:historyRecord")
public AjaxResult doDelete(@RequestParam String id) {
aidFundMemberHistoryService.doDelete(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,161 @@
package com.ruoyi.additional.controller.aidFundMember;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberPayXlsMode;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberPayService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import 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.Calendar;
import java.util.List;
@RestController
@RequestMapping("/aidFundMember/pay")
@Slf4j
public class AidFundMemberPayController {
@Autowired
private AidFundMemberPayService aidFundMemberPayService;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:paymentRecord")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = aidFundMemberPayService.pageData(pageForm);
return AjaxResult.success(pagination);
}
/**
* 导出名单
*
* @param year 一年
* @param userStates 用户状态
* @param response 响应
*/
@PostMapping("/exportPaysByYear")
@RequiresPermissions("aidFundMember:paymentRecord")
public void exportPaysByYear(@RequestParam int year, @RequestParam(name = "userState[]", required = false) List<String> userStates, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> list = aidFundMemberPayService.exportPaysByYear(year, userStates);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("年份", "year", 20));
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("分工会名称", "unionName", 20));
entities.add(new ExcelExportEntity("单位名称", "deptName", 20));
entities.add(new ExcelExportEntity("扣款金额", "money", 20));
entities.add(new ExcelExportEntity("是否新会员", "memberStatus", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(year + "基金会员缴费名单.xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 清空缴费记录
*
* @param year 一年
* @return {@link AjaxResult}
*/
@PostMapping("/clearPays")
@RequiresPermissions("aidFundMember:paymentRecord")
public AjaxResult clearPays(@RequestParam int year) {
aidFundMemberPayService.clearPays(year);
return AjaxResult.success();
}
/**
* 下载缴费记录导入xlsx模板
*
* @param response 响应
*/
@PostMapping("/downloadImportXlsxTemplate")
@RequiresPermissions("aidFundMember:paymentRecord")
public void downloadImportXlsxTemplate(HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
int year = Calendar.getInstance().get(Calendar.YEAR);
AidFundMemberPayXlsMode payXlsMode = new AidFundMemberPayXlsMode();
payXlsMode.setLoginName("admin");
payXlsMode.setUserName("管理员");
payXlsMode.setYear(year);
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, AidFundMemberPayXlsMode.class, Lang.list(payXlsMode));
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(year + "扣费记录模板.xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 导入缴费记录
*
* @param file 文件
* @return {@link AjaxResult}
*/
@PostMapping("/importPayRecords")
@RequiresPermissions("aidFundMember:paymentRecord")
public AjaxResult importPayRecords(@RequestParam MultipartFile file) {
try {
List<AidFundMemberPayXlsMode> list = ExcelImportUtil.importExcel(file.getInputStream(), AidFundMemberPayXlsMode.class, new ImportParams());
String errMsg = aidFundMemberPayService.importPayRecords(list);
if (StrUtil.isNotBlank(errMsg)) {
return AjaxResult.warn(errMsg);
}
return AjaxResult.success();
} catch (Exception e) {
log.error(e.getMessage());
return AjaxResult.error(e.getMessage());
}
}
/**
* 改变支付状态
*
* @param id id
* @return {@link AjaxResult}
*/
@PostMapping("/changePayStatus")
@RequiresPermissions("aidFundMember:paymentRecord")
public AjaxResult changePayStatus(@RequestParam String id) {
Sql sql = Sqls.create("UPDATE aid_fund_member_pay SET payed = !payed WHERE id=@id");
sql.setParam("id", id);
aidFundMemberPayService.execute(sql);
return AjaxResult.success();
}
}
@@ -0,0 +1,41 @@
package com.ruoyi.additional.controller.aidFundMember;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberRetireAuditService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/aidFundMember/retireAudit")
public class AidFundMemberRetireAuditController {
@Autowired
private AidFundMemberRetireAuditService retireAuditService;
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:retireAudit")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = retireAuditService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("/doSubmit")
@RequiresPermissions("aidFundMember:retireAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam String id) {
retireAuditService.doSubmit(audit, id);
return AjaxResult.success();
}
@PostMapping("/doRevoke")
@RequiresPermissions("aidFundMember:retireAudit")
public AjaxResult doRevoke(@RequestParam String id) {
retireAuditService.doRevoke(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,149 @@
package com.ruoyi.additional.controller.aidFundMember;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberHistoryService;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberPayService;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberStandingBookManageService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* 基金成员台账
*
* @author jug
* @date 2023/02/17
*/
@RestController
@RequestMapping("/aidFundMember/standingBookManage")
@Slf4j
public class AidFundMemberStandingBookManageController {
@Autowired
private AidFundMemberStandingBookManageService aidFundMemberStandingBookManageService;
@Autowired
private AidFundMemberHistoryService memberHistoryService;
@Autowired
private AidFundMemberPayService aidFundMemberPayService;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@PostMapping("/pageData")
@RequiresPermissions("aidFundMember:standingBookManage")
public AjaxResult pageData(@RequestBody AidFundMemberPageForm pageForm) {
Pagination pagination = aidFundMemberStandingBookManageService.pageData(pageForm);
return AjaxResult.success(pagination);
}
/**
* 备份成员
*
* @param year 一年
* @return {@link AjaxResult}
*/
@PostMapping("/backupMember")
@RequiresPermissions("aidFundMember:standingBookManage")
public AjaxResult backupMember(@RequestParam int year) {
memberHistoryService.backupMember(year);
return AjaxResult.success();
}
/**
* 导出新基金会员
*
* @param response 响应
*/
@PostMapping("/exportNewMember")
@RequiresPermissions("aidFundMember:standingBookManage")
public void exportNewMember(HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
List<NutMap> list = aidFundMemberStandingBookManageService.exportNewMember();
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("分工会名称", "unionName", 20));
entities.add(new ExcelExportEntity("单位名称", "deptName", 20));
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
entities.add(new ExcelExportEntity("身份证号", "idcard", 20));
entities.add(new ExcelExportEntity("备注", "", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(DateUtil.thisYear() + "新基金会员名单.xlsx", StandardCharsets.UTF_8)));
workbook.write(outputStream);
workbook.close();
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 创建缴费记录
*
* @return {@link AjaxResult}
*/
@RequestMapping("/createPayList")
@RequiresPermissions("aidFundMember:standingBookManage")
public AjaxResult createPayList() {
aidFundMemberPayService.createMemberPayList();
return AjaxResult.success();
}
/**
* 变更
*
* @param userId 用户id
* @param changeType 变化类型
* @param currentUnitId 当前单位id
* @param currentThreeUnitId 当前三个单位id
* @return {@link AjaxResult}
*/
@RequestMapping("/doChange")
@RequiresPermissions("aidFundMember:standingBookManage")
public AjaxResult doChange(@RequestParam String userId,
@RequestParam String changeType,
@RequestParam(required = false) String currentUnitId,
@RequestParam(required = false) String currentThreeUnitId) {
aidFundMemberStandingBookManageService.doChange(userId, changeType, currentUnitId, currentThreeUnitId);
return AjaxResult.success();
}
/**
* 删除
*
* @param userId 用户id
* @return
*/
@RequestMapping("/doDelete")
@RequiresPermissions("aidFundMember:standingBookManage")
public AjaxResult doDelete(@RequestParam String userId) {
aidFundMemberStandingBookManageService.doDelete(userId);
return AjaxResult.success();
}
}
@@ -0,0 +1,39 @@
package com.ruoyi.additional.controller.common;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/16
* @Description
*/
@RestController
@RequestMapping("/common")
public class AdditionalCommonController {
@RequestMapping("getEnumSelect")
public AjaxResult getEnumSelect(String enumName) {
try {
String enumPackage = "com.ruoyi.additional.api.customEnum";
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();
}
}
}
@@ -0,0 +1,342 @@
package com.ruoyi.additional.controller.evaluate;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.activity.api.domain.basic.ActivityUserScope;
import com.ruoyi.additional.api.constant.honor.HonorAuditState;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.evaluate.Evaluate;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.evaluate.EvaluateApplyService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.utils.DateUtils;
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.jdh.api.domain.secondLevelJdh.UnionCadre;
import com.ruoyi.system.api.RemoteDictService;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.*;
import org.nutz.aop.interceptor.ioc.TransAop;
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.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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@RestController
@RequestMapping("/evaluate/applyEvaluate")
public class EvaluateApplyController {
@Autowired
private Dao dao;
@Autowired
private EvaluateApplyService evaluateApplyService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:evaluate:applyEvaluate")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "evaluateId", required = false) String evaluateId,
@RequestParam(value = "honorType", required = false) String honorType) {
Cnd cnd = Cnd.NEW();
cnd.andEX("app.evaluateId", "=", evaluateId);
cnd.andEX("year(applyTime)", "=", year);
cnd.andEX("e.honorTypeId", "=", honorType);
if (!AuthUtil.hasAnyRoles("admin") || (!AuthUtil.hasAnyRoles("admin") && AuthUtil.hasAnyRoles("H10"))) {
cnd.and("app.userid", "=", SecurityUtils.getUserId());
}
Pagination pagination = evaluateApplyService.pageData(pageForm, cnd);
return AjaxResult.success(pagination);
}
@PostMapping("saveForm")
@RequiresPermissions("additional:evaluate:applyEvaluate")
public AjaxResult saveForm(@RequestBody EvaluateApply evaluateApply) {
if (!"8a8b455b964a41f2bbf18a4896cbd83e".equals(evaluateApply.getHonorTypeId())) {
DynamicDataSourceContextHolder.push("system");
List<SysUnion> unionList = dao.query(SysUnion.class, Cnd.NEW());
DynamicDataSourceContextHolder.clear();
Map<String, String> collect = unionList.stream().collect(Collectors.toMap(SysUnion::getId, SysUnion::getUnionName));
String s = collect.get(evaluateApply.getUnionId());
evaluateApply.setApplyUnionName(StrUtil.isNotBlank(s) ? s : "");
}
if (Strings.isNotBlank(evaluateApply.getId())) {
evaluateApplyService.updateIgnoreNull(evaluateApply);
} else {
//判断有没有申请过
SqlExpressionGroup group = Cnd.exps("userId", "=", SecurityUtils.getUserId());
int count = evaluateApplyService.count(Cnd.NEW().and("evaluateId", "=", evaluateApply.getEvaluateId()).and(group));
if (count > 0) {
return AjaxResult.error("抱歉,您已申请过此评优评先,无法提交");
}
evaluateApply.setApplyTime(DateUtil.today());
evaluateApply.setStateId(1400);
evaluateApplyService.insert(evaluateApply);
}
String processUniqueId = "EVALUATE_APPLY@" + evaluateApply.getId();
// 创建实例
localProcessService.initCreateInstance(
processUniqueId,
evaluateApply.getId(),
"[评优评先申请]" + SecurityUtils.getNickName(),
"/evaluate/applyEvaluate",
null,
SecurityConstants.INNER
);
return AjaxResult.success();
}
@PostMapping("doSubmit")
@DSTransactional
@RequiresPermissions("additional:evaluate:applyEvaluate")
public AjaxResult doSubmit(@RequestBody EvaluateApply evaluateApply) {
if (evaluateApply.getStateId() != null) {
// 先完成当前节点的任务
localProcessService.completeReturnTask("EVALUATE_APPLY@" + evaluateApply.getId(), SecurityConstants.INNER);
}
String taskNodeName;
String formUrl;
Integer taskNodeKey;
Long roleId;
if ("8a8b455b964a41f2bbf18a4896cbd83e".equals(evaluateApply.getHonorTypeId())) {
taskNodeName = "待单位审核";
taskNodeKey = HonorAuditState.UNIT_READY;
formUrl = "/evaluate/evaluateUnitAudit";
roleId = Roles.UNIT_SJ;
} else {
taskNodeName = "待工会审核";
taskNodeKey = HonorAuditState.UNION_READY;
formUrl = "/evaluate/evaluateUnionAudit";
roleId = Roles.FGH_ADMIN;
}
evaluateApply.setUserId(SecurityUtils.getUserId());
if (!"8a8b455b964a41f2bbf18a4896cbd83e".equals(evaluateApply.getHonorTypeId())) {
DynamicDataSourceContextHolder.push("system");
List<SysUnion> unionList = dao.query(SysUnion.class, Cnd.NEW());
DynamicDataSourceContextHolder.clear();
Map<String, String> collect = unionList.stream().collect(Collectors.toMap(SysUnion::getId, SysUnion::getUnionName));
String s = collect.get(evaluateApply.getUnionId());
evaluateApply.setApplyUnionName(StrUtil.isNotBlank(s) ? s : "");
}
if (Strings.isNotBlank(evaluateApply.getId())) {
evaluateApply.setStateId("8a8b455b964a41f2bbf18a4896cbd83e".equals(evaluateApply.getHonorTypeId()) ? HonorAuditState.UNIT_READY : HonorAuditState.UNION_READY);
evaluateApply.setUnitAuditId(null);
evaluateApply.setUnionAuditId(null);
evaluateApply.setPartyAuditId(null);
evaluateApply.setSchoolAuditId(null);
evaluateApplyService.update(evaluateApply);
} else {
//判断时间有没有过
Evaluate eva = evaluateApplyService.dao().fetch(Evaluate.class, evaluateApply.getEvaluateId());
DateTime currentTime = cn.hutool.core.date.DateUtil.date();
DateTime targetTimeStr = cn.hutool.core.date.DateUtil.parse(eva.getEndTime());
if (cn.hutool.core.date.DateUtil.compare(currentTime, targetTimeStr) > 0) {
return AjaxResult.error("抱歉,申请时间已过,无法提交");
}
//判断有没有申请过
SqlExpressionGroup group = Cnd.exps("userId", "=", SecurityUtils.getUserId());
int count = evaluateApplyService.count(Cnd.NEW().and("evaluateId", "=", evaluateApply.getEvaluateId()).and(group));
if (count > 0) {
return AjaxResult.error("抱歉,您已申请过此评优评先,无法提交");
}
evaluateApply.setApplyTime(DateUtils.getDate());
evaluateApply.setStateId("8a8b455b964a41f2bbf18a4896cbd83e".equals(evaluateApply.getHonorTypeId()) ? HonorAuditState.UNIT_READY : HonorAuditState.UNION_READY);
evaluateApplyService.insert(evaluateApply);
//TODO:发短信后续加上
}
String processUniqueId = "EVALUATE_APPLY@" + evaluateApply.getId();
// 创建实例
localProcessService.initCreateInstance(
processUniqueId,
evaluateApply.getId(),
"[评优评先申请]" + SecurityUtils.getNickName(),
"/evaluate/applyEvaluate",
null,
SecurityConstants.INNER
);
// 获取负责人
R<List<String>> assignments = localProcessService.getAssignments(SecurityUtils.getUnionId(),
null,
roleId,
SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(taskNodeKey),
taskNodeName,
loginNameList,
formUrl,
null,
SecurityConstants.INNER
);
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
public AjaxResult findOne(@PathVariable String id) {
if (StrUtil.isBlank(id)) {
return AjaxResult.warn("参数错误");
}
return AjaxResult.success(evaluateApplyService.findOne(id));
}
@PostMapping("doDelete/{id}")
@DSTransactional
@RequiresPermissions("additional:evaluate:applyEvaluate")
public AjaxResult doDelete(@PathVariable String id) {
if (StrUtil.isBlank(id)) {
return AjaxResult.warn("参数错误");
}
localProcessService.deleteProcessInstance("EVALUATE_APPLY@" + id, SecurityConstants.INNER);
return AjaxResult.success(evaluateApplyService.doDelete(id));
}
@GetMapping("getHonor")
public AjaxResult getHonor(String type, String userId) {
Sql sql = Sqls.create("""
SELECT
h.*,
hbs.NAME as prizeName,
bs.name as levelName
FROM
honor h
LEFT JOIN honor_basic_settings hbs ON h.prize = hbs.id
LEFT JOIN honor_basic_settings bs ON bs.id = hbs.`level`
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(type) && "single".equals(type)) {
cnd.and("h.honorType", "=", "8a8b455b964a41f2bbf18a4896cbd83e");
cnd.and("h.userId", "=", StrUtil.isNotBlank(userId) ? userId : SecurityUtils.getUserId());
}
if (StrUtil.isNotBlank(type) && "list".equals(type)) {
cnd.and("h.honorType", "=", "6b9e26a9467f49ae88fbd3951377e0f8");
}
cnd.desc("h.grantDate");
sql.setCondition(cnd);
return AjaxResult.success(evaluateApplyService.listMap(sql));
}
@RequestMapping("verifyApply/{id}")
public AjaxResult verifyApply(@PathVariable String id) {
if (StrUtil.isBlank(id)) {
return AjaxResult.warn("参数错误");
}
return evaluateApplyService.verifyApply(id);
}
@RequestMapping("getActivityScope")
public AjaxResult getActivityScope(String groupId) {
if (StrUtil.isBlank(groupId)) {
return AjaxResult.warn("参数错误");
}
int count = ProModuleDS.exec(Ds.ACTIVITY, () -> {
return dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", groupId).and("userId", "=", SecurityUtils.getUserId()));
});
return AjaxResult.success(count);
}
@PostMapping("getUnionInfo/{id}")
@RequiresPermissions("additional:evaluate:applyEvaluate")
public AjaxResult getUnionInfo(@PathVariable String id) {
if (StrUtil.isBlank(id)) {
return AjaxResult.warn("参数错误");
}
DynamicDataSourceContextHolder.push("system");
List<Record> userList = dao.query("user", Cnd.where("unionId", "=", id));
//工会人数
int unionPeoNum = userList.size();
//会员人数
long memberCount = userList.stream().filter(o -> o.getInt("member") == 1).count();
//委员人数
int leaderNumber = 0;
Record unionCadre = dao.fetch("sys_union_cadre", Cnd.where("unionId", "=", id).and("joining", "=", 1)
.limit(1).desc("session"));
if (unionCadre != null) {
leaderNumber = dao.count("sys_union_cadre", Cnd.where("unionId", "=", id).and("joining", "=", 1).and("session", "=", unionCadre.getString("session")));
}
//工会主席
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("roleId", "=", Roles.SLAVE_UNION_ZX));
List<Long> list = userRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
String leaderUserName = userList.stream().filter(o -> list.contains(o.getLong("userid"))).map(o -> o.getString("username")).collect(Collectors.joining(","));
DynamicDataSourceContextHolder.clear();
return AjaxResult.success(Map.of("unionPeoNum", unionPeoNum, "memberNumber", memberCount, "leaderNumber", leaderNumber, "username", leaderUserName));
}
@PostMapping("unionGroupsByUnionId/{id}")
@RequiresPermissions("additional:evaluate:applyEvaluate")
public AjaxResult unionGroupsByUnionId(@PathVariable String id) {
if (StrUtil.isBlank(id)) {
return AjaxResult.warn("参数错误");
}
DynamicDataSourceContextHolder.push("system");
if (!AuthUtil.hasAnyRoles("admin,A06,flwyh01,H04")) {
List<SysUserRole> userRole = dao.query(SysUserRole.class, Cnd.where("roleId", "=", Roles.UNION_GROUP_LEADER)
.and("userId", "=", SecurityUtils.getUserId()));
List<String> ids = userRole.stream().map(SysUserRole::getUnionGroupId).collect(Collectors.toList());
if (Lang.isEmpty(ids)) {
DynamicDataSourceContextHolder.clear();
return null;
}
List<SysUnionGroup> list = dao.query(SysUnionGroup.class, Cnd.where("id", "in", ids).asc("groupCode"));
DynamicDataSourceContextHolder.clear();
return AjaxResult.success(list);
}
if (Strings.isNotBlank(id)) {
List<SysUnionGroup> list = dao.query(SysUnionGroup.class, Cnd.where("unionId", "=", id).asc("groupCode"));
DynamicDataSourceContextHolder.clear();
return AjaxResult.success(list);
}
List<SysUnionGroup> list = dao.query(SysUnionGroup.class, Cnd.NEW().asc("groupCode"));
DynamicDataSourceContextHolder.clear();
return AjaxResult.success(list);
}
}
@@ -0,0 +1,171 @@
package com.ruoyi.additional.controller.evaluate;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.domain.evaluate.Evaluate;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@RestController
@RequestMapping("/evaluate/evaluateManage")
public class EvaluateManageController {
@Autowired
private Dao dao;
@Autowired
private EvaluateManageService evaluateManageService;
@PostMapping("pageData")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "evaluateId", required = false) String evaluateId) {
Cnd cnd = Cnd.NEW();
cnd.andEX("year(startTime)", "=", year);
cnd.andEX("e.id", "=", evaluateId);
if (!AuthUtil.hasAnyRoles("admin") || AuthUtil.hasAnyRoles("H10")) {
cnd.and("e.userid", "=", SecurityUtils.getUserId());
}
cnd.groupBy("e.id");
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
}
Pagination pagination = evaluateManageService.pageData(pageForm, cnd);
return AjaxResult.success(pagination);
}
@RequestMapping("getEvaluateList")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"
, "additional:evaluate:applyEvaluate"}, logical = Logical.OR)
public AjaxResult getEvaluateList(String userId) {
return AjaxResult.success(evaluateManageService.getEvaluateList(userId));
}
@PostMapping("doHandle")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"}, logical = Logical.OR)
public AjaxResult doHandle(@RequestBody Evaluate evaluate) {
evaluate.setUserid(SecurityUtils.getUserId());
if (StrUtil.isBlank(evaluate.getId())) {
evaluateManageService.add(evaluate);
} else {
evaluateManageService.edit(evaluate);
}
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"}, logical = Logical.OR)
public AjaxResult findOne(@PathVariable String id) {
if (StrUtil.isBlank(id)) {
return AjaxResult.warn("参数错误");
}
return AjaxResult.success(evaluateManageService.findOne(id));
}
@PostMapping("doDelete/{id}")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"}, logical = Logical.OR)
public AjaxResult doDelete(@PathVariable String id) {
evaluateManageService.clear(Cnd.where("id", "=", id));
return AjaxResult.success();
}
@GetMapping("getHonor")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"}, logical = Logical.OR)
public AjaxResult getHonor() {
Sql sql = Sqls.create("""
SELECT
h2.NAME AS parentName,
h3.id as `value`,
h3.parentId,
h3.name as label
FROM
honor_basic_settings h1
LEFT JOIN honor_basic_settings h2 ON h1.id = h2.parentId
LEFT JOIN honor_basic_settings h3 ON h2.id = h3.parentId
WHERE
h1.CODE = 'H1000'
$condition
""");
List<NutMap> list = evaluateManageService.listMap(sql.setCondition(Cnd.NEW().asc("h3.code")));
List<NutMap> parentList = evaluateManageService.listMap(sql.setCondition(Cnd.NEW().groupBy("parentId").asc("h2.code")));
List<NutMap> result = new ArrayList<>();
parentList.forEach(item -> {
NutMap m = new NutMap();
m.put("value", item.getString("parentId"));
m.put("label", item.getString("parentName"));
List<NutMap> collect = list.stream().filter(o -> o.getString("parentId").equals(item.getString("parentId"))).collect(Collectors.toList());
m.put("children", collect);
result.add(m);
});
return AjaxResult.success(result);
}
@GetMapping("getApplyData")
@RequiresPermissions(value = {"additional:evaluate:addEvaluate"
, "additional:evaluate:evaluateManage"}, logical = Logical.OR)
public AjaxResult getApplyData(String id) {
List<EvaluateApply> list = evaluateManageService.dao().query(EvaluateApply.class, Cnd.where("evaluateId", "=", id));
return AjaxResult.success(list);
}
//根据年份查询荣誉列表
@GetMapping("getEvaluateByYear")
public AjaxResult getEvaluateByYear(Integer year, String type) {
Sql sql = Sqls.create("""
SELECT
e.*,
e.id AS evaluateId,
e.NAME AS evaluateName,
us.groupName,
hb.NAME AS honorTypeName,
bs.NAME AS honorName
FROM
evaluate e
LEFT JOIN activity_user_scope us ON us.groupId = e.groupId
LEFT JOIN honor_basic_settings hb ON hb.id = e.honorTypeId
LEFT JOIN honor_basic_settings bs ON bs.id = e.honorId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("year(startTime)", "=", year);
if (StrUtil.isNotBlank(type)) {
cnd.and("honorTypeId", "=", type);
}
cnd.groupBy("e.id");
cnd.desc("startTime");
sql.setCondition(cnd);
return AjaxResult.success(evaluateManageService.listMap(sql));
}
}
@@ -0,0 +1,222 @@
package com.ruoyi.additional.controller.evaluate;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.honor.HonorAuditState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
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.Date;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@RestController
@RequestMapping("/evaluate/evaluatePartyAudit")
public class EvaluatePartyAuditController {
@Autowired
private Dao dao;
@Autowired
private EvaluateManageService evaluateManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions(value = {"additional:evaluate:evaluatePartyAudit"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "honorType", required = false) String honorType,
@RequestParam(value = "evaluateId", required = false) String evaluateId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
us.userName,
ha.*,
state.stateName,
state.stateColor,
us.deptName as unitName,
e.name as evaluateName
FROM
`evaluate_apply` ha
LEFT JOIN evaluate e on e.id = ha.evaluateId
LEFT JOIN `user` us ON us.userId = ha.userId
LEFT JOIN audit_state state ON state.stateId=ha.stateId
$condition
""");
if (!AuthUtil.hasRole("admin")) {
cnd.and("ha.unitId", "=", SecurityUtils.getDeptId());
}
cnd.andEX("ha.evaluateId", "=", evaluateId);
cnd.andEX("ha.unitId", "=", unitId);
cnd.andEX("ha.unionId", "=", unionId);
cnd.andEX("YEAR(ha.applyTime)", "=", year);
cnd.andEX("ha.honorTypeId", "=", honorType);
/*if (isAudit == null) {
cnd.and(Cnd.exps(Cnd.exps("partyAuditId", "is not", null).and("ha.stateId", ">", 1600)).or("ha.stateId", "=", 1700));
} else if (isAudit) {
cnd.and("partyAuditId", "is not", null).and("partyAuditId", "!=", "").and("ha.stateId", ">", 1400);
} else {
cnd.and("ha.stateId", "=", 1700);
}*/
if (isAudit == null) {
cnd.and("ha.stateId", ">=", 1470);
} else if (isAudit) {
cnd.and("ha.stateId", ">", 1470);
} else {
cnd.and("ha.stateId", "=", 1470);
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.desc("ha.applyTime");
sql.setCondition(cnd);
Pagination pagination = evaluateManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluatePartyAudit"}, logical = Logical.OR)
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
if (pass == 1) {
taskNodeName="基层党组织审核拒绝";
evaluateApply.setStateId(HonorAuditState.PARTY_REJECTED);
} else if (pass == 2) {
taskNodeName="基层党组织审核退回修改";
evaluateApply.setStateId(HonorAuditState.PARTY_BACK_MODIFY);
} else {
taskNodeName="待校工会审核";
evaluateApply.setStateId(HonorAuditState.SCHOOL_READY);
}
evaluateApply.setPartyAuditId(audit.getId());
dao.updateIgnoreNull(evaluateApply);
String processUniqueId = "EVALUATE_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(HonorAuditState.PARTY_READY), taskNodeName, SecurityConstants.INNER);
if (pass == 1) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
} else if (pass==2){
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", evaluateApply.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.PARTY_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/evaluate/applyEvaluate",
null,
SecurityConstants.INNER
);
}else if (pass == 3) {
// 审核通过,往下走流程
// 获取负责人
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.SCHOOL_ADMIN, SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.SCHOOL_READY),
"待校工会审核",
loginNameList,
"/evaluate/evaluateSchoolAudit",
null,
SecurityConstants.INNER
);
}
//TODO:后面审核发短信
/*EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
Sys_user applyUser = dao.fetch(Sys_user.class, evaluateApply.getUserId());
Evaluate evaluate = dao.fetch(Evaluate.class, evaluateApply.getEvaluateId());
if (pass) {
CndPlus cndPlus = CndPlus.create();
Sql sql = Sqls.create("""
SELECT
u.*
FROM
sys_user_role ur
LEFT JOIN sys_user u ON ur.userid = u.id
$condition
""");
cndPlus.andExcludeEmpty("ur.roleId", "=", Roles.XGHGLY);
sql.setCondition(cndPlus);
List<NutMap> userList = evaluateApplyViService.listMap(sql);
for (NutMap map : userList) {
String msg = "%s老师您好,%s老师于%s申请的【%s】评优评先需要您的审核!"
.formatted(map.getString("username"), applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(map.getString("loginname"), msg);
}
} else {
String msg = "%s老师您好,您于%s申请的【%s】评优评先,在院级党组织审核时被驳回!"
.formatted(applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(applyUser.getLoginname(), msg);
}*/
return AjaxResult.success();
}
@PostMapping("rollBack")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluatePartyAudit"}, logical = Logical.OR)
public AjaxResult rollBack(String id, Boolean type) {
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
dao.clear("audit", Cnd.NEW().and("id", "=", evaluateApply.getPartyAuditId()));
dao.update(EvaluateApply.class, Chain.make("stateId", HonorAuditState.PARTY_READY).add("partyAuditId", null), Cnd.where("id", "=", id));
localProcessService.revokeTask("EVALUATE_APPLY@" + id, String.valueOf(HonorAuditState.PARTY_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
}
@@ -0,0 +1,354 @@
package com.ruoyi.additional.controller.evaluate;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import cn.hutool.http.HttpUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.constant.honor.HonorAuditState;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.SysFile;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.jdh.api.domain.secondLevelJdh.MeetingState;
import com.ruoyi.system.api.RemoteDictService;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.SysDictData;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.lang.Files;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@RestController
@RequestMapping("/evaluate/evaluateSchoolAudit")
public class EvaluateSchoolAuditController {
@Autowired
private Dao dao;
@Autowired
private EvaluateManageService evaluateManageService;
@Autowired
private RemoteDictService remoteDictService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions(value = {"additional:evaluate:evaluateSchoolAudit"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "honorType", required = false) String honorType,
@RequestParam(value = "evaluateId", required = false) String evaluateId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
us.userName,
ha.*,
state.stateName,
state.stateColor,
us.deptName as unitName,
e.name as evaluateName
FROM
`evaluate_apply` ha
LEFT JOIN evaluate e on e.id = ha.evaluateId
LEFT JOIN `user` us ON us.userId = ha.userId
LEFT JOIN audit_state state ON state.stateId=ha.stateId
$condition
""");
/*if (!AuthUtil.hasRole("admin")) {
cnd.and("ha.unitId", "=", SecurityUtils.getDeptId());
}*/
cnd.andEX("ha.evaluateId", "=", evaluateId);
cnd.andEX("ha.unitId", "=", unitId);
cnd.andEX("ha.unionId", "=", unionId);
cnd.andEX("YEAR(ha.applyTime)", "=", year);
cnd.andEX("ha.honorTypeId", "=", honorType);
/*if (isAudit == null) {
cnd.and(Cnd.exps(Cnd.exps("schoolAuditId", "is not", null).and("ha.stateId", ">", 1700)).or("ha.stateId", "=", 1800));
} else if (isAudit) {
cnd.and("schoolAuditId", "is not", null).and("schoolAuditId", "!=", "").and("ha.stateId", ">", 1400);
} else {
cnd.and("ha.stateId", "=", 1800);
}*/
if (isAudit == null) {
cnd.and("ha.stateId", ">=", 1500);
} else if (isAudit) {
cnd.and("ha.stateId", ">", 1500);
} else {
cnd.and("ha.stateId", "=", 1500);
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.desc("ha.applyTime");
sql.setCondition(cnd);
Pagination pagination = evaluateManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluateSchoolAudit"}, logical = Logical.OR)
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
if (pass == 1) {
taskNodeName = "校工会审核拒绝";
evaluateApply.setStateId(HonorAuditState.SCHOOL_REJECTED);
} else if (pass == 2) {
taskNodeName = "校工会审核退回修改";
evaluateApply.setStateId(HonorAuditState.SCHOOL_BACK_MODIFY);
} else {
taskNodeName = "校工会审核通过";
evaluateApply.setStateId(HonorAuditState.SCHOOL_PASS);
}
evaluateApply.setSchoolAuditId(audit.getId());
dao.updateIgnoreNull(evaluateApply);
String processUniqueId = "EVALUATE_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(HonorAuditState.SCHOOL_READY), taskNodeName, SecurityConstants.INNER);
if (pass != 2) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
} else if (pass == 2) {
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", evaluateApply.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.SCHOOL_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/evaluate/applyEvaluate",
null,
SecurityConstants.INNER
);
}
//TODO:后面审核发短信
/*EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
Sys_user applyUser = dao.fetch(Sys_user.class, evaluateApply.getUserId());
Evaluate evaluate = dao.fetch(Evaluate.class, evaluateApply.getEvaluateId());
String msg = "";
if (pass) {
msg = "%s老师您好,您于%s申请的【%s】评优评先已经审核通过!";
} else {
msg = "%s老师您好,您于%s申请的【%s】评优评先,在校工会审核时被驳回!";
}
msg.formatted(applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(applyUser.getLoginname(), msg);*/
return AjaxResult.success();
}
@PostMapping("rollBack")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluateSchoolAudit"}, logical = Logical.OR)
public AjaxResult rollBack(String id, Boolean type) {
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
dao.clear("audit", Cnd.NEW().and("id", "=", evaluateApply.getSchoolAuditId()));
dao.update(EvaluateApply.class, Chain.make("stateId", HonorAuditState.SCHOOL_READY).add("schoolAuditId", null), Cnd.where("id", "=", id));
localProcessService.revokeTask("EVALUATE_APPLY@" + id, String.valueOf(HonorAuditState.SCHOOL_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
@RequestMapping("exportTableData")
public void exportTableData(Boolean isAudit, String year, String unionId, String unitId, String honorType, Boolean honorTypeBoolean,
HttpServletResponse response) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
us.userName,
ha.*,
state.stateName,
state.stateColor,
us.deptName as unitName,
us.unionName
FROM
`evaluate_apply` ha
LEFT JOIN `user` us ON us.userId = ha.userId
LEFT JOIN audit_state state ON state.stateId=ha.stateId
$condition
""");
cnd.andEX("us.unionId", "=", unionId);
cnd.andEX("us.deptId", "=", unitId);
cnd.andEX("YEAR(ha.applyTime)", "=", year);
cnd.and("ha.honorTypeId", "=", honorType);
if (isAudit == null) {
cnd.and(Cnd.exps("schoolAuditId", "is not", null).or("ha.stateId", "=", 1500));
} else if (isAudit) {
cnd.and("schoolAuditId", "is not", null);
} else {
cnd.and("ha.stateId", "=", 1500);
}
cnd.desc("ha.applyTime");
sql.setCondition(cnd);
List<NutMap> dataList = evaluateManageService.listMap(sql);
List<SysDictData> userSex = remoteDictService.dictType("sys_user_sex").getData();
Map<String, String> sexMap = userSex.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
DynamicDataSourceContextHolder.push("system");
List<SysDictData> dictDataList = dao.query(SysDictData.class, Cnd.where("dict_type", "=", "political_status"));
DynamicDataSourceContextHolder.clear();
Map<String, String> dictMap = dictDataList.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
dataList.forEach(item -> {
item.put("userSex", sexMap.get(item.getString("userSex")));
item.put("political", dictMap.get(item.getString("political")) != null ? dictMap.get(item.getString("political")) : "");
});
List<ExcelExportEntity> entityList = new ArrayList<>();
if (honorTypeBoolean) {
entityList.add(new ExcelExportEntity("申请人姓名", "userName", 20));
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("性别", "userSex", 20));
entityList.add(new ExcelExportEntity("政治面貌", "political", 20));
entityList.add(new ExcelExportEntity("职称", "jobTitle", 20));
entityList.add(new ExcelExportEntity("所属单位", "unitName", 20));
entityList.add(new ExcelExportEntity("所属工会", "unionName", 20));
} else {
entityList.add(new ExcelExportEntity("申请单位", "unitName", 20));
entityList.add(new ExcelExportEntity("负责人", "unitLeader", 20));
entityList.add(new ExcelExportEntity("单位人数", "unitPeopleNum", 20));
entityList.add(new ExcelExportEntity("单位女职工人数", "unitFemalePeopleNum", 20));
entityList.add(new ExcelExportEntity("单位会员人数", "memberNum", 20));
}
entityList.add(new ExcelExportEntity("申请时间", "applyTime", 20));
entityList.add(new ExcelExportEntity("曾受何种奖励", "award", 40));
entityList.add(new ExcelExportEntity("主要事迹", "deeds", 40));
try {
String disposition = "attachment;filename=" + URLEncoder.encode("评优评先汇总表.xlsx", "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, dataList);
workbook.write(response.getOutputStream());
} catch (Exception e) {
}
}
@RequestMapping("downloadAnnex")
public void downloadAnnex(@RequestBody String[] ids, HttpServletResponse response) throws IOException {
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("评优评先附件汇总.zip", StandardCharsets.UTF_8)));
/**
* 创建临时文件夹
*/
Path evaluateBatchExportTempDir = java.nio.file.Files.createTempDirectory("evaluateBatchExportTempDir");
for (String id : ids) {
String fileName = "";
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
Record user = dao.fetch("user", Cnd.where("userId", "=", evaluateApply.getUserId()));
if (Strings.isNotBlank(user.getString("unionid"))) {
fileName += user.getString("unionname") + "-";
}
fileName += user.getString("username");
File f = Files.createDirIfNoExists(evaluateBatchExportTempDir + "/" + fileName);
List<SysFile> files = evaluateApply.getFiles();
if (files != null) {
for (SysFile file : files) {
InputStream inputStream = HttpUtil.createGet(file.getLink()).execute().bodyStream();
File file1 = new File(f.getPath() + "/" + file.getName());
FileOutputStream fileOutputStream = new FileOutputStream(file1);
byte[] bytes = new byte[1024];
int fileLength = 0;
while ((fileLength = inputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, fileLength);
}
inputStream.close();
fileOutputStream.close();
}
}
}
File zipFile = ZipUtil.zip(evaluateBatchExportTempDir.toString());
FileInputStream zipFileInputStream = new FileInputStream(zipFile);
IoUtil.copy(zipFileInputStream, outputStream);
zipFileInputStream.close();
outputStream.close();
FileUtil.del(evaluateBatchExportTempDir);
}
}
@@ -0,0 +1,193 @@
package com.ruoyi.additional.controller.evaluate;
import cn.hutool.core.util.StrUtil;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/7
* @Description
*/
@RestController
@RequestMapping("/evaluate/evaluateSummary")
public class EvaluateSummaryController {
@Autowired
private Dao dao;
@Autowired
private EvaluateManageService evaluateManageService;
@PostMapping("pageData")
@RequiresPermissions(value = {"additional:evaluate:evaluateSummary"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "honorType", required = false) String honorType,
@RequestParam(value = "evaluateId", required = false) String evaluateId,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
ea.*,
e.NAME AS evaluateName,
us.deptName AS unitName,
us.userName
FROM
evaluate_apply ea
LEFT JOIN evaluate e ON e.id = ea.evaluateId
LEFT JOIN `user` us ON us.userId = ea.userId
$condition
""");
cnd.andEX("ea.evaluateId", "=", evaluateId);
cnd.andEX("YEAR(ea.applyTime)", "=", year);
cnd.andEX("ea.unionid", "=", unionId);
cnd.andEX("us.deptId", "=", unitId);
cnd.andEX("ea.honorTypeId", "=", honorType);
if (!AuthUtil.hasAnyRoles("admin") || AuthUtil.hasAnyRoles("H10")) {
cnd.and("e.userid", "=", SecurityUtils.getUserId());
}
cnd.and("ea.stateId", "=", 1530);
cnd.desc("ea.applyTime");
sql.setCondition(cnd);
Pagination pagination = evaluateManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@RequestMapping("exportResult")
public void exportResult(String year, HttpServletResponse response) throws IOException {
NutMap map = new NutMap();
map.put("year", year);
Sql countSql = Sqls.create("""
SELECT
e.NAME AS evaluateName,
count(*) AS num
FROM
evaluate_apply ea
LEFT JOIN evaluate e ON e.id = ea.evaluateId
WHERE
stateId = '1530'
AND YEAR ( applyTime ) = @year
GROUP BY
ea.evaluateId
""").setParam("year", year);
List<NutMap> list = evaluateManageService.listMap(countSql);
String evaluateStr = "";
if (Lang.isNotEmpty(list)) {
for (NutMap item : list) {
evaluateStr += item.getString("num") + (item.getString("evaluateName").contains("") ? "" : "")
+ item.getString("evaluateName") + "";
}
}
map.put("evaluateStr", Lang.isNotEmpty(list) ? evaluateStr.substring(0, evaluateStr.length() - 1) : evaluateStr);
Sql sql = Sqls.create("""
SELECT
e.NAME AS evaluateName,
GROUP_CONCAT( us.unionName, '、' ) AS evaluateUnit
FROM
evaluate_apply ea
LEFT JOIN evaluate e ON e.id = ea.evaluateId
LEFT JOIN `user` us ON us.userId = ea.userId
WHERE
stateId = '1530'
AND YEAR ( applyTime ) = @year
AND ea.honorTypeId = '6b9e26a9467f49ae88fbd3951377e0f8'
GROUP BY
ea.evaluateId
""").setParam("year", year);
List<NutMap> list1 = evaluateManageService.listMap(sql);
list1.forEach(item -> item.put("evaluateUnit", item.getString("evaluateUnit").substring(0, item.getString("evaluateUnit").length() - 1)));
map.put("evaluateList", list1);
Sql singleSql = Sqls.create("""
SELECT
e.NAME AS evaluateName,
GROUP_CONCAT( us.deptName, '', us.userName ) AS evaluateUserList
FROM
evaluate_apply ea
LEFT JOIN evaluate e ON e.id = ea.evaluateId
LEFT JOIN `user` us ON us.userId = ea.userId
WHERE
stateId = '1530'
AND YEAR ( applyTime ) = @year
AND ea.honorTypeId = '8a8b455b964a41f2bbf18a4896cbd83e'
GROUP BY
ea.evaluateId
""").setParam("year", year);
List<NutMap> singleList = evaluateManageService.listMap(singleSql);
List<NutMap> evaluateSingleList = new ArrayList<>();
for (NutMap item : singleList) {
NutMap m = NutMap.NEW();
String evaluateName = item.getString("evaluateName");
String evaluateUserList = item.getString("evaluateUserList");
if (StrUtil.isNotBlank(evaluateUserList)) {
String[] split = evaluateUserList.split(",");
List<NutMap> l = new ArrayList<>();
for (String s : split) {
l.add(NutMap.NEW().addv("user", s));
m.put("evaluateUserList", l);
}
} else {
m.put("evaluateUserList", new ArrayList<>());
}
m.put("evaluateName", evaluateName);
evaluateSingleList.add(m);
}
map.put("evaluateSingleList", evaluateSingleList);
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
Configure config = Configure.builder().bind("evaluateSingleList", policy).bind("evaluateList", policy)
.bind("evaluateUserList", policy).build();
String fileName = "评优评先公示结果";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName + ".docx", StandardCharsets.UTF_8);
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/evaluate/evaluate.docx");
assert inputStream != null;
XWPFTemplate.compile(inputStream, config).render(map, response.getOutputStream());
inputStream.close();
}
}
@@ -0,0 +1,226 @@
package com.ruoyi.additional.controller.evaluate;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.honor.HonorAuditState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
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.Date;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@RestController
@RequestMapping("/evaluate/evaluateUnionAudit")
public class EvaluateUnionAuditController {
@Autowired
private Dao dao;
@Autowired
private EvaluateManageService evaluateManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions(value = {"additional:evaluate:evaluateUnionAudit"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "honorType", required = false) String honorType,
@RequestParam(value = "evaluateId", required = false) String evaluateId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
us.userName,
ha.*,
state.stateName,
state.stateColor,
us.deptName as unitName,
e.name as evaluateName
FROM
`evaluate_apply` ha
LEFT JOIN evaluate e on e.id = ha.evaluateId
LEFT JOIN `user` us ON us.userId = ha.userId
LEFT JOIN audit_state state ON state.stateId=ha.stateId
$condition
""");
if (!AuthUtil.hasRole("admin")) {
cnd.and("ha.unionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("ha.evaluateId", "=", evaluateId);
cnd.andEX("ha.unitId", "=", unitId);
cnd.andEX("ha.unionId", "=", unionId);
cnd.andEX("YEAR(ha.applyTime)", "=", year);
cnd.andEX("ha.honorTypeId", "=", honorType);
/*if (isAudit == null) {
cnd.and(Cnd.exps(Cnd.exps("unionAuditId", "is not", null).and("ha.stateId", ">", 1500)).or("ha.stateId", "=", 1600));
} else if (isAudit) {
cnd.and("unionAuditId", "is not", null).and("unionAuditId", "!=", "").and("ha.stateId", ">", 1400);
} else {
cnd.and("ha.stateId", "=", 1600);
}*/
if (isAudit == null) {
cnd.and("ha.stateId", ">=", 1440);
} else if (isAudit) {
cnd.and("ha.stateId", ">", 1440);
} else {
cnd.and("ha.stateId", "=", 1440);
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.desc("ha.applyTime");
sql.setCondition(cnd);
Pagination pagination = evaluateManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluateUnionAudit"}, logical = Logical.OR)
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
if (pass == 1) {
taskNodeName="分工会审核拒绝";
evaluateApply.setStateId(HonorAuditState.UNION_REJECTED);
} else if (pass == 2) {
taskNodeName="分工会审核退回修改";
evaluateApply.setStateId(HonorAuditState.UNION_BACK_MODIFY);
} else {
taskNodeName="基层党组织待审核";
evaluateApply.setStateId(HonorAuditState.PARTY_READY);
}
evaluateApply.setUnionAuditId(audit.getId());
dao.updateIgnoreNull(evaluateApply);
String processUniqueId = "EVALUATE_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(HonorAuditState.UNION_READY), taskNodeName, SecurityConstants.INNER);
if (pass == 1) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
}else if (pass==2){
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", evaluateApply.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.UNION_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/evaluate/applyEvaluate",
null,
SecurityConstants.INNER
);
} else if (pass == 3) {
// 审核通过,往下走流程
// 获取负责人
R<List<String>> assignments = localProcessService.getAssignments(SecurityUtils.getUnionId(),
null,
Roles.UNIT_SJ,
SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.PARTY_READY),
"待基层党组织审核",
loginNameList,
"/evaluate/evaluatePartyAudit",
null,
SecurityConstants.INNER
);
}
//TODO:后面审核发短信
/*EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
Sys_user applyUser = dao.fetch(Sys_user.class, evaluateApply.getUserId());
Evaluate evaluate = dao.fetch(Evaluate.class, evaluateApply.getEvaluateId());
if (pass) {
CndPlus cndPlus = CndPlus.create();
Sql sql = Sqls.create("""
SELECT
u.*
FROM
sys_user_role ur
LEFT JOIN sys_user u ON ur.userid = u.id
$condition
""");
cndPlus.andExcludeEmpty("ur.roleId", "=", Roles.GH03);
cndPlus.andExcludeEmpty("ur.unionId", "=", ((Sys_union) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("union")).getId());
sql.setCondition(cndPlus);
List<NutMap> userList = evaluateApplyViService.listMap(sql);
for (NutMap map : userList) {
String msg = "%s老师您好,%s老师于%s申请的【%s】评优评先需要您的审核!"
.formatted(map.getString("username"), applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(map.getString("loginname"), msg);
}
} else {
String msg = "%s老师您好,您于%s申请的【%s】评优评先,在院级工会审核时被驳回!"
.formatted(applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(applyUser.getLoginname(), msg);
}*/
return AjaxResult.success();
}
@PostMapping("rollBack")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluateUnionAudit"}, logical = Logical.OR)
public AjaxResult rollBack(String id, Boolean type) {
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
dao.clear("audit", Cnd.NEW().and("id", "=", evaluateApply.getUnionAuditId()));
dao.update(EvaluateApply.class, Chain.make("stateId", HonorAuditState.UNION_READY).add("unionAuditId", null), Cnd.where("id", "=", id));
localProcessService.revokeTask("EVALUATE_APPLY@" + id, String.valueOf(HonorAuditState.UNION_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
}
@@ -0,0 +1,217 @@
package com.ruoyi.additional.controller.evaluate;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.honor.HonorAuditState;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
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.Date;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@RestController
@RequestMapping("/evaluate/evaluateUnitAudit")
public class EvaluateUnitAuditController {
@Autowired
private Dao dao;
@Autowired
private EvaluateManageService evaluateManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions(value = {"additional:evaluate:evaluateUnitAudit"}, logical = Logical.OR)
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) String year,
@RequestParam(value = "evaluateId", required = false) String evaluateId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "unitId", required = false) String unitId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
us.userName,
ha.*,
state.stateName,
state.stateColor,
us.deptName as unitName,
e.name as evaluateName
FROM
`evaluate_apply` ha
LEFT JOIN evaluate e on e.id = ha.evaluateId
LEFT JOIN `user` us ON us.userId = ha.userId
LEFT JOIN audit_state state ON state.stateId=ha.stateId
$condition
""");
if (!AuthUtil.hasRole("admin")) {
cnd.and("ha.unitId", "=", SecurityUtils.getDeptId());
}
cnd.andEX("ha.evaluateId", "=", evaluateId);
cnd.andEX("ha.unitId", "=", unitId);
cnd.andEX("ha.unionId", "=", unionId);
cnd.andEX("YEAR(ha.applyTime)", "=", year);
if (isAudit == null) {
cnd.and("ha.stateId", ">=", 1410).and("ha.honorTypeId", "=", "8a8b455b964a41f2bbf18a4896cbd83e");
} else if (isAudit) {
cnd.and("ha.stateId", ">", 1410).and("ha.honorTypeId", "=", "8a8b455b964a41f2bbf18a4896cbd83e");
} else {
cnd.and("ha.stateId", "=", 1410).and("ha.honorTypeId", "=", "8a8b455b964a41f2bbf18a4896cbd83e");
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.desc("ha.applyTime");
sql.setCondition(cnd);
Pagination pagination = evaluateManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluateUnitAudit"}, logical = Logical.OR)
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
if (pass == 1) {
taskNodeName="单位审核拒绝";
evaluateApply.setStateId(HonorAuditState.UNIT_REJECTED);
} else if (pass == 2) {
taskNodeName="单位审核退回修改";
evaluateApply.setStateId(HonorAuditState.UNIT_BACK_MODIFY);
} else {
taskNodeName="待分工会审核";
evaluateApply.setStateId(HonorAuditState.UNION_READY);
}
evaluateApply.setUnitAuditId(audit.getId());
dao.updateIgnoreNull(evaluateApply);
String processUniqueId = "EVALUATE_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(HonorAuditState.UNIT_READY), taskNodeName, SecurityConstants.INNER);
if (pass == 1) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
}else if (pass==2){
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", evaluateApply.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.UNIT_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/evaluate/applyEvaluate",
null,
SecurityConstants.INNER
);
} else if (pass == 3) {
// 审核通过,往下走流程
// 获取负责人
R<List<String>> assignments = localProcessService.getAssignments(SecurityUtils.getUnionId(),
null,
Roles.FGH_ADMIN,
SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(HonorAuditState.UNION_READY),
"待分工会审核",
loginNameList,
"/evaluate/evaluateUnionAudit",
null,
SecurityConstants.INNER
);
}
//TODO:后面审核发短信
/*EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
Sys_user applyUser = dao.fetch(Sys_user.class, evaluateApply.getUserId());
Evaluate evaluate = dao.fetch(Evaluate.class, evaluateApply.getEvaluateId());
if (pass) {
CndPlus cndPlus = CndPlus.create();
Sql sql = Sqls.create("""
SELECT
u.*
FROM
sys_user_role ur
LEFT JOIN sys_user u ON ur.userid = u.id
$condition
""");
cndPlus.andExcludeEmpty("ur.roleId", "=", Roles.UNION_MANGER);
cndPlus.andExcludeEmpty("ur.unionId", "=", ((Sys_union) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("union")).getId());
sql.setCondition(cndPlus);
List<NutMap> userList = evaluateApplyViService.listMap(sql);
for (NutMap map : userList) {
String msg = "%s老师您好,%s老师于%s申请的【%s】评优评先需要您的审核!"
.formatted(map.getString("username"), applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(map.getString("loginname"), msg);
}
} else {
String msg = "%s老师您好,您于%s申请的【%s】评优评先,在单位审核时被驳回!"
.formatted(applyUser.getUsername(), evaluateApply.getApplyTime(), evaluate.getName());
msgService.sendMessage(applyUser.getLoginname(), msg);
}*/
return AjaxResult.success();
}
@PostMapping("rollBack")
@DSTransactional
@RequiresPermissions(value = {"additional:evaluate:evaluateUnitAudit"}, logical = Logical.OR)
public AjaxResult rollBack(String id, Boolean type) {
EvaluateApply evaluateApply = dao.fetch(EvaluateApply.class, id);
dao.clear("audit", Cnd.NEW().and("id", "=", evaluateApply.getUnitAuditId()));
dao.update(EvaluateApply.class, Chain.make("stateId", type ? HonorAuditState.UNIT_READY : HonorAuditState.UNION_READY).add("unitAuditId", null), Cnd.where("id", "=", id));
localProcessService.revokeTask("EVALUATE_APPLY@" + id, String.valueOf(HonorAuditState.UNIT_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
}
@@ -0,0 +1,265 @@
package com.ruoyi.additional.controller.fund;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.domain.fund.CostSet;
import com.ruoyi.additional.api.domain.fund.FundClub;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.fund.ClubBudgetManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.club.Sys_club;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
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.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 org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/10
* @Description
*/
@RestController
@RequestMapping("/clubBudget/clubBudgetAllot")
public class ClubBudgetAllotController {
@Autowired
private Dao dao;
@Autowired
private ClubBudgetManageService clubBudgetManageService;
@PostMapping("pageData")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetAllot")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "clubId", required = false) String clubId) {
Sql sql = Sqls.create("""
select
jf.*,
club.name,
club.code,
club.id as cid,
club.cynum
from
`club` club
LEFT JOIN jf_club jf ON jf.club_id = club.id AND jf.`year` = @year
$condition
""").setParam("year", year);
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.asc("club.`code`");
}
if (Strings.isNotBlank(clubId)) {
cnd.and("jf.club_id", "=", clubId);
}
cnd.and("jf.state", "=", 1);
sql.setCondition(cnd);
Pagination pagination = clubBudgetManageService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("isSetClubAvg")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetAllot")
public AjaxResult isSetClubAvg() {
int count = clubBudgetManageService.count(Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)));
return AjaxResult.success(count);
}
@PostMapping("reset")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetAllot")
public AjaxResult reset() {
clubBudgetManageService.update(Chain.make("state", 0),
Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
return AjaxResult.success();
}
@GetMapping("isSet")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetAllot")
public AjaxResult isSet() {
int count = clubBudgetManageService.count(Cnd.where("state", "=", 1).and("year", "=", Calendar.getInstance().get(Calendar.YEAR)));
return AjaxResult.success(count);
}
@PostMapping("issue")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetAllot")
public AjaxResult issue() {
return clubBudgetManageService.issue();
}
@PostMapping("doAdd")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetAllot")
public AjaxResult doAdd(@RequestBody FundClub club) {
return clubBudgetManageService.doAdd(club);
}
@PostMapping("changeYs")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult changeYs(String clubId, Integer year, Float totalQuota) {
totalQuota = totalQuota == null ? 0 : totalQuota;
FundClub fundClub = dao.fetch(FundClub.class, Cnd.where("club_id", "=", clubId).and("year", "=", year));
if (fundClub != null) {
fundClub.setTotal_quota(totalQuota);
dao.updateIgnoreNull(fundClub);
} else {
fundClub = new FundClub();
fundClub.setClub_id(clubId);
fundClub.setYear(year);
fundClub.setTotal_quota(totalQuota);
dao.insert(fundClub);
}
return AjaxResult.success();
}
@RequestMapping("downloadTemplate")
public void downloadTemplate(HttpServletResponse response) throws IOException {
String fileName = "批量导入协会预算分配" + ".xlsx";
try {
//获取所有协会
List<Sys_club> clubList = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.query(Sys_club.class, Cnd.where("state", "=", 5050).asc("code"));
});
List<String> clubNames = clubList.stream().map(Sys_club::getName).collect(Collectors.toList());
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("序号", "index", 20));
exportEntities.add(new ExcelExportEntity("年度", "year", 20));
exportEntities.add(new ExcelExportEntity("协会名称", "clubName", 20));
exportEntities.add(new ExcelExportEntity("协会人数", "clubPersonCount", 20));
exportEntities.add(new ExcelExportEntity("标准", "avg", 20));
exportEntities.add(new ExcelExportEntity("总额度", "totalMoney", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, new ArrayList<>());
String[] array = clubNames.size() > 0 ? Lang.collection2array(clubNames) : new String[]{};
selectLargeList(workbook, 2, 2, 1, array);
response.setCharacterEncoding("UTF-8");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void selectLargeList(Workbook workbook, int firstCol, int lastCol, int sheetIndex, String[] selectList) {
Sheet sheet = workbook.getSheetAt(0);
//将下拉框数据放到新的sheet里,然后excle通过新的sheet数据加载下拉框数据
String sheetName = "sheetName" + String.valueOf(sheetIndex);
Sheet hidden = workbook.createSheet(sheetName);
//创建单元格对象
Cell cell = null;
//遍历我们上面的数组,将数据取出来放到新sheet的单元格中
for (int i = 0, length = selectList.length; i < length; i++) {
//取出数组中的每个元素
String name = selectList[i];
//根据i创建相应的行对象(说明我们将会把每个元素单独放一行)
Row row = hidden.createRow(i);
//创建每一行中的第一个单元格
cell = row.createCell(0);
//然后将数组中的元素赋值给这个单元格
cell.setCellValue(name);
}
// 创建名称,可被其他单元格引用
String refers = sheetName + "!$A$1:$A$" + selectList.length;
//这个3代表我的下拉数据从第三行开始生效,前面1,2行不显示下拉,你们根据自己情况修改。
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 1000, firstCol, lastCol);
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createFormulaListConstraint(refers);
DataValidation dataValidation = helper.createValidation(constraint, cellRangeAddressList);
//将第sheetIndex个sheet设置为隐藏
workbook.setSheetHidden(sheetIndex, true);
sheet.addValidationData(dataValidation);
}
@RequestMapping("readExcel")
public AjaxResult readExcel(@RequestParam(name = "file") MultipartFile multipartFile) {
int count = 0;
int success_count = 0;
try {
// 查出现在已交社团表中的已交社团
List<FundClub> jf_clubs = clubBudgetManageService.query();
// 查出所有系统社团
List<Sys_club> sysClubs = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.query(Sys_club.class, Cnd.where("state", "=", "5050").asc("code"));
});
Map<String, String> collect = sysClubs.stream().collect(Collectors.toMap(Sys_club::getName, Sys_club::getId));
//获得excel表格中的数据并封装成一个个对象
List<FundClub> list = ExcelImportUtil.importExcel(multipartFile.getInputStream(), FundClub.class, new ImportParams());
count = list.size();
//遍历excel表格中的一个个对象
for (FundClub obj : list) {
try {
//状态设为1,默认为下发状态
obj.setState(1);
obj.setClub_id(collect.get(obj.getHistory_clubname()));
FundClub yj_club = jf_clubs.stream().filter(v -> v.getYear().equals(obj.getYear()) && v.getClub_id().equals(obj.getClub_id())).findFirst().orElse(null);
// 遍历所有的已交社团
boolean has = jf_clubs.stream().anyMatch(v -> v.getYear().equals(obj.getYear()) && v.getClub_id().equals(obj.getClub_id()));
if (has) {
assert yj_club != null;
yj_club.setClub_id(obj.getClub_id()); //社团id
yj_club.setState(1); //状态1
yj_club.setHistory_member(obj.getHistory_member()); //历史会员人数
yj_club.setHistory_club_avg(obj.getHistory_club_avg()); //历史品均值
yj_club.setTotal_quota(obj.getTotal_quota()); // 总金额
dao.update(yj_club); // 直接跟新这个对象,自动根据id修改
// 返回给前台的显示向数据库成功添加了几条数据的数量
} else {
// 向已交工会表中添加一条记录
dao.insert(obj);
// 返回给前台的显示向数据库成功添加了几条数据的数量
}
success_count++;
} catch (Exception e) {
e.printStackTrace();
}
}
NutMap result = NutMap.NEW().setv("count", count).setv("success_count", success_count);
return AjaxResult.success(result);
} catch (Exception ignored) {
}
return AjaxResult.success();
}
}
@@ -0,0 +1,151 @@
package com.ruoyi.additional.controller.fund;
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.additional.constant.Ds;
import com.ruoyi.additional.service.fund.ClubBudgetManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysUserRole;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/10
* @Description
*/
@RestController
@RequestMapping("/clubBudget/clubBudgetUsage")
public class ClubBudgetUsageController {
@Autowired
private Dao dao;
@Autowired
private ClubBudgetManageService clubBudgetManageService;
@PostMapping("pageData")
@RequiresPermissions("additional:fund:clubBudget:clubBudgetUsage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year) {
Sql sql = Sqls.create("""
SELECT
jf.*,
club.`name`,
club.`code`,
club.id as cid
FROM
`club` club
LEFT JOIN jf_club jf ON jf.club_id = club.id AND jf.`year` = @year
$condition
""");
Cnd cnd = Cnd.NEW();
if (AuthUtil.hasRole("admin") || AuthUtil.hasRole("A06")) {
} else if (AuthUtil.hasRole("H02")) {
//协会管理员
List<String> clubIds = ProModuleDS.exec(Ds.SYSTEM, () -> {
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("userId", "=", SecurityUtils.getUserId())
.and("roleId", "=", Roles.CLUB_FZR));
return userRoles.stream().map(SysUserRole::getStid).collect(Collectors.toList());
});
cnd.and("club.id", "in", clubIds);
}
cnd.and("jf.total_quota", "IS NOT", null);
if (Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.asc("club.`code`");
}
sql.setParam("year", year);
sql.setCondition(cnd);
Pagination pagination = clubBudgetManageService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@RequestMapping("exportExcel")
public void exportExcel(Integer year, HttpServletResponse response) {
Sql sql = Sqls.create("""
SELECT
jf.*,
club.`name`,
club.id cid
FROM
`club` club
LEFT JOIN jf_club jf ON jf.club_id = club.id AND jf.`year` = @year
$condition
""");
Cnd cnd = Cnd.NEW();
if (AuthUtil.hasRole("admin") || AuthUtil.hasRole("A06")) {
} else if (AuthUtil.hasRole("H02")) {
//协会管理员
List<String> clubIds = ProModuleDS.exec(Ds.SYSTEM, () -> {
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("userId", "=", SecurityUtils.getUserId())
.and("roleId", "=", Roles.CLUB_FZR));
return userRoles.stream().map(SysUserRole::getStid).collect(Collectors.toList());
});
cnd.and("club.id", "in", clubIds);
}
cnd.asc("club.code");
sql.setParam("year", year);
sql.setCondition(cnd);
List<Record> list = clubBudgetManageService.list(sql);
list.forEach(item -> {
Float zed = Strings.isBlank(item.getString("total_quota")) ? 0 : Float.parseFloat(item.getString("total_quota"));
Float ysyed = Strings.isBlank(item.getString("used_quota")) ? 0 : Float.parseFloat(item.getString("used_quota"));
item.put("no_used_quota", String.valueOf(zed - ysyed));
});
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("年度", "year", 40));
entityList.add(new ExcelExportEntity("协会名称", "name", 40));
entityList.add(new ExcelExportEntity("分配总额度(元)", "total_quota", 40));
entityList.add(new ExcelExportEntity("已使用额度(元)", "used_quota", 40));
entityList.add(new ExcelExportEntity("剩余额度(元)", "no_used_quota", 40));
//excel文件名
String fileName = year + "年协会经费使用情况表.xlsx";
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
workbook.write(response.getOutputStream());
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,119 @@
package com.ruoyi.additional.controller.fund;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.domain.fund.FundClub;
import com.ruoyi.additional.api.domain.fund.FundUnion;
import com.ruoyi.additional.api.domain.fund.FundUse;
import com.ruoyi.additional.service.fund.UnionBudgetManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
@RestController
@RequestMapping("/fund/fundAdjust")
public class FundAdjustController {
@Autowired
private Dao dao;
@Autowired
private UnionBudgetManageService unionBudgetManageService;
@PostMapping("pageData")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "adjustId", required = false) String adjustId) {
Sql sql = Sqls.create("""
SELECT
ju.*,
re.userId,
re.activity_number,
su.userName as username,
YEAR(re.applyTime) `year`,
us.unionName as unionname
FROM
`jf_use` ju
LEFT JOIN jf_yjgh jf ON ju.adjust_id = jf.id
LEFT JOIN `user` su ON su.userId = ju.adjust_person
LEFT JOIN reimbursement_new re ON re.id = ju.apply_id
LEFT JOIN `user` us ON us.userId = re.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.desc("ju.adjust_time");
}
cnd.and("adjust_id", "=", adjustId);
cnd.and("adjust_time", "like", year + "%");
sql.setCondition(cnd);
Pagination pagination = unionBudgetManageService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("addUse")
public AjaxResult addUse(@RequestBody FundUse fundUse,
@RequestParam(name = "isClub", required = false) Boolean isClub) {
fundUse.setAdjust_time(DateUtils.getDate());
fundUse.setAdjust_person(SecurityUtils.getUserId());
dao.insert(fundUse); // 向经费使用表中添加一条记录
if (isClub) {
FundClub fundClub = dao.fetch(FundClub.class, fundUse.getAdjust_id()); //根据调整经费id查询
fundClub.setUsed_quota(fundClub.getUsed_quota() + fundUse.getAdjust_money());
dao.update(fundClub);
} else {
FundUnion fundUnion = dao.fetch(FundUnion.class, fundUse.getAdjust_id());
fundUnion.setUsedQuota(fundUnion.getUsedQuota() + fundUse.getAdjust_money());
dao.update(fundUnion);
}
return AjaxResult.success();
}
@PostMapping("doEdit")
public AjaxResult doEdit(@RequestBody FundUse fundUse,
@RequestParam(name = "isClub", required = false) Boolean isClub) {
dao.update(fundUse);
flushMoney(fundUse.getAdjust_id(), isClub);
return AjaxResult.success();
}
@PostMapping("delUse")
public AjaxResult delUse(@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "isClub", required = false) Boolean isClub) {
FundUse use = dao.fetch(FundUse.class, id);
dao.delete(FundUse.class, id);
flushMoney(use.getAdjust_id(), isClub);
return AjaxResult.success();
}
private void flushMoney(String id, boolean isClub) {
Sql sql = Sqls.create("SELECT IFNULL(SUM(u.adjust_money),0) money from jf_use u WHERE u.adjust_id = @id").setParam("id", id);
int money = unionBudgetManageService.list(sql).get(0).getInt("money");
if (!isClub) {
FundUnion yjgh = dao.fetch(FundUnion.class, id);
yjgh.setUsedQuota(money);
dao.update(yjgh);
} else {
FundClub club = dao.fetch(FundClub.class, id);
club.setUsed_quota(money);
dao.update(club);
}
}
}
@@ -0,0 +1,58 @@
package com.ruoyi.additional.controller.fund;
import com.ruoyi.additional.api.domain.fund.CostSet;
import com.ruoyi.additional.api.domain.fund.FundSchool;
import com.ruoyi.additional.service.fund.SchoolBudgetListService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Calendar;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description 校工会预算
*/
@RestController
@RequestMapping("/schoolBudget/schoolBudgetList")
public class SchoolBudgetListController {
@Autowired
private Dao dao;
@Autowired
private SchoolBudgetListService schoolBudgetListService;
@PostMapping("pageData")
@RequiresPermissions("additional:fund:schoolBudget:schoolBudgetList")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT * FROM `jf_school` $condition
""");
cnd.andEX("year", "=", year);
sql.setCondition(cnd);
Pagination pagination = schoolBudgetListService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@PostMapping("doChangeYs")
@RequiresPermissions("additional:fund:schoolBudget:schoolBudgetList")
public AjaxResult doChangeYs(Float totalQuota, String id) {
FundSchool fundSchool = dao.fetch(FundSchool.class, id);
fundSchool.setTotalQuota(totalQuota);
dao.updateIgnoreNull(fundSchool);
dao.update(CostSet.class, Chain.make("schoolMoney", totalQuota), Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)));
return AjaxResult.success();
}
}
@@ -0,0 +1,55 @@
package com.ruoyi.additional.controller.fund;
import com.ruoyi.additional.service.fund.SchoolBudgetListService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
@RestController
@RequestMapping("/schoolBudget/schoolBudgetUsage")
public class SchoolBudgetUsageController {
@Autowired
private Dao dao;
@Autowired
private SchoolBudgetListService schoolBudgetListService;
@PostMapping("pageData")
@RequiresPermissions("additional:fund:schoolBudget:schoolBudgetUsage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "activity_name", required = false) String activity_name) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
YEAR(rei.applyTime) year,
rei.*
FROM
`school_use` suse
LEFT JOIN reimbursement_new rei ON rei.id = suse.reimbursementId
$condition
""");
cnd.andEX("YEAR ( rei.applyTime )", "=", year);
if (Strings.isNotBlank(activity_name)) {
cnd.where().andLike("rei.activity_name", activity_name);
}
cnd.desc("rei.applyTime");
sql.setCondition(cnd);
Pagination pagination = schoolBudgetListService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
}
@@ -0,0 +1,253 @@
package com.ruoyi.additional.controller.fund;
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 com.ruoyi.additional.api.domain.fund.CostSet;
import com.ruoyi.additional.api.domain.fund.FundUnion;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.fund.UnionBudgetManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysUnion;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
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.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 org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
@RestController
@RequestMapping("/unionBudget/unionBudgetAllot")
public class UnionBudgetAllotController {
@Autowired
private Dao dao;
@Autowired
private UnionBudgetManageService unionBudgetManageService;
@PostMapping("pageData")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unionId", required = false) String unionId) {
Sql sql = Sqls.create("""
SELECT
jf.*,
un.id unid,
un.unionName as unionname,
un.unionCode as unioncode
FROM
`union` un
LEFT JOIN jf_yjgh jf ON jf.unionId = un.id
$condition
"""
);
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(unionId)) {
cnd.and("jf.unionId", "=", unionId);
}
cnd.and("jf.year", "=", year);
cnd.and("jf.state", "=", 1);
cnd.asc("un.unionCode");
sql.setCondition(cnd);
Pagination pagination = unionBudgetManageService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("isSetUnionAvg")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult isSetUnionAvg() {
int count = unionBudgetManageService.count(Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)));
return AjaxResult.success(count);
}
@PostMapping("reset")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult reset() {
unionBudgetManageService.update(Chain.make("state", 0),
Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
return AjaxResult.success();
}
@GetMapping("isSet")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult isSet() {
int count = unionBudgetManageService.count(Cnd.where("state", "=", 1).and("year", "=", Calendar.getInstance().get(Calendar.YEAR)));
return AjaxResult.success(count);
}
@PostMapping("issue")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult issue() {
return unionBudgetManageService.issue();
}
@PostMapping("changeYs")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetAllot")
public AjaxResult changeYs(String unionId, Integer year, Float totalQuota) {
totalQuota = totalQuota == null ? 0 : totalQuota;
FundUnion ghys = dao.fetch(FundUnion.class, Cnd.where("unionId", "=", unionId).and("year", "=", year));
if (ghys != null) {
ghys.setTotalQuota(totalQuota);
dao.updateIgnoreNull(ghys);
} else {
ghys = new FundUnion();
ghys.setUnionId(unionId);
ghys.setYear(year);
ghys.setTotalQuota(totalQuota);
dao.insert(ghys);
}
return AjaxResult.success();
}
@RequestMapping("downloadTemplate")
public void downloadTemplate(HttpServletResponse response) throws IOException {
String fileName = "批量导入工会预算分配" + ".xlsx";
try {
//获取所有工会
List<SysUnion> unionList = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.query(SysUnion.class, Cnd.NEW().asc("unionCode"));
});
List<String> unionNames = unionList.stream().map(SysUnion::getUnionName).collect(Collectors.toList());
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("序号", "index", 20));
exportEntities.add(new ExcelExportEntity("年度", "year", 20));
exportEntities.add(new ExcelExportEntity("院级工会名称", "unionName", 20));
exportEntities.add(new ExcelExportEntity("会员人数", "memberCount", 20));
exportEntities.add(new ExcelExportEntity("标准", "avg", 20));
exportEntities.add(new ExcelExportEntity("总额度", "totalMoney", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, new ArrayList<>());
selectLargeList(workbook, 2, 2, 1, Lang.collection2array(unionNames));
response.setCharacterEncoding("UTF-8");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void selectLargeList(Workbook workbook, int firstCol, int lastCol, int sheetIndex, String[] selectList) {
Sheet sheet = workbook.getSheetAt(0);
//将下拉框数据放到新的sheet里,然后excle通过新的sheet数据加载下拉框数据
String sheetName = "sheetName" + String.valueOf(sheetIndex);
Sheet hidden = workbook.createSheet(sheetName);
//创建单元格对象
Cell cell = null;
//遍历我们上面的数组,将数据取出来放到新sheet的单元格中
for (int i = 0, length = selectList.length; i < length; i++) {
//取出数组中的每个元素
String name = selectList[i];
//根据i创建相应的行对象(说明我们将会把每个元素单独放一行)
Row row = hidden.createRow(i);
//创建每一行中的第一个单元格
cell = row.createCell(0);
//然后将数组中的元素赋值给这个单元格
cell.setCellValue(name);
}
// 创建名称,可被其他单元格引用
String refers = sheetName + "!$A$1:$A$" + selectList.length;
//这个3代表我的下拉数据从第三行开始生效,前面1,2行不显示下拉,你们根据自己情况修改。
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 1000, firstCol, lastCol);
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createFormulaListConstraint(refers);
DataValidation dataValidation = helper.createValidation(constraint, cellRangeAddressList);
//将第sheetIndex个sheet设置为隐藏
workbook.setSheetHidden(sheetIndex, true);
sheet.addValidationData(dataValidation);
}
@RequestMapping("readExcel")
public AjaxResult readExcel(@RequestParam(name = "file") MultipartFile multipartFile) {
int count = 0;
int success_count = 0;
try {
// 查出现在已交工会表中的已交工会
List<FundUnion> jf_yjghs = unionBudgetManageService.query();
// 查出所有的系统工会
List<SysUnion> sysUnions = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.query(SysUnion.class, Cnd.orderBy().asc("unionCode"));
});
Map<String, String> collect = sysUnions.stream().collect(Collectors.toMap(SysUnion::getUnionName, SysUnion::getId));
//获得excel表格中的数据并封装成一个个对象
List<FundUnion> list = ExcelImportUtil.importExcel(multipartFile.getInputStream(), FundUnion.class, new ImportParams());
count = list.size();
//遍历excel表格中的一个个对象
for (FundUnion obj : list) {
try {
//状态设为1,默认为下发状态
obj.setState(1);
obj.setUnionId(collect.get(obj.getHistory_unionname()));
FundUnion yjgh = jf_yjghs.stream().filter(v -> v.getYear().equals(obj.getYear()) && v.getUnionId().equals(obj.getUnionId())).findFirst().orElse(null);
// 遍历所有的已交工会
boolean has = jf_yjghs.stream().anyMatch(v -> v.getYear().equals(obj.getYear()) && v.getUnionId().equals(obj.getUnionId()));
if (has) {
assert yjgh != null;
yjgh.setUnionId(obj.getUnionId()); //工会id
yjgh.setState(1); //状态1
yjgh.setHistory_member(obj.getHistory_member()); //历史会员人数
yjgh.setHistory_union_avg(obj.getHistory_union_avg()); //历史品均值
yjgh.setTotalQuota(obj.getTotalQuota()); // 总金额
dao.update(yjgh); // 直接跟新这个对象,自动根据id修改
// 返回给前台的显示向数据库成功添加了几条数据的数量
} else {
// 向已交工会表中添加一条记录
dao.insert(obj);
// 返回给前台的显示向数据库成功添加了几条数据的数量
}
success_count++;
} catch (Exception e) {
e.printStackTrace();
}
}
NutMap result = NutMap.NEW().setv("count", count).setv("success_count", success_count);
return AjaxResult.success(result);
} catch (Exception ignored) {
}
return AjaxResult.success();
}
}
@@ -0,0 +1,150 @@
package com.ruoyi.additional.controller.fund;
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.additional.constant.Ds;
import com.ruoyi.additional.service.fund.UnionBudgetManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysUserRole;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
@RestController
@RequestMapping("/unionBudget/unionBudgetUsage")
public class UnionBudgetUsageController {
@Autowired
private Dao dao;
@Autowired
private UnionBudgetManageService unionBudgetManageService;
@PostMapping("pageData")
@RequiresPermissions("additional:fund:unionBudget:unionBudgetUsage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unionId", required = false) String unionId) {
Sql sql = Sqls.create("""
SELECT
jf.*,
un.id unid,
un.unionName as unionname,
un.unionCode as unioncode
FROM
`union` un
LEFT JOIN jf_yjgh jf ON jf.unionId = un.id
AND jf.`year` = @year
$condition
""");
Cnd cnd = Cnd.NEW();
if (AuthUtil.hasRole("admin") || AuthUtil.hasRole("A06")) {
cnd.andEX("un.id", "=", unionId);
} else if (AuthUtil.hasRole("H04")) {
List<String> unionIds = ProModuleDS.exec(Ds.SYSTEM, () -> {
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("userId", "=", SecurityUtils.getUserId())
.and("roleId", "=", Roles.FGH_ADMIN));
return userRoles.stream().map(SysUserRole::getUnionId).collect(Collectors.toList());
});
//基层工会管理员
cnd.and("un.id", "in", unionIds);
}
cnd.and("jf.totalQuota", "IS NOT", null);
if (Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
} else {
cnd.asc("un.unionCode");
}
sql.setParam("year", year);
sql.setCondition(cnd);
Pagination pagination = unionBudgetManageService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@RequestMapping("exportExcel")
public void exportExcel(Integer year, HttpServletResponse response) {
Sql sql = Sqls.create("""
SELECT
jf.*,
un.id unid,
un.unionName as unionname
FROM `union` un
LEFT JOIN jf_yjgh jf ON jf.unionId = un.id AND jf.`year` = @year
$condition
""");
Cnd cnd = Cnd.NEW();
if (AuthUtil.hasRole("admin") || AuthUtil.hasRole("A06")) {
} else if (AuthUtil.hasRole("H04")) {
List<SysUserRole> userRoles = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.query(SysUserRole.class, Cnd.where("userId", "=", SecurityUtils.getUserId()).and("roleId", "=", Roles.FGH_ADMIN));
});
List<String> unionIds = userRoles.stream().map(SysUserRole::getUnionId).collect(Collectors.toList());
//基层工会管理员
cnd.and("un.id", "in", unionIds);
}
cnd.asc("un.unionCode");
sql.setParam("year", year);
sql.setCondition(cnd);
List<Record> list = unionBudgetManageService.list(sql);
list.forEach(item -> {
Float zed = Strings.isBlank(item.getString("totalquota")) ? 0 : Float.parseFloat(item.getString("totalquota"));
Float ysyed = Strings.isBlank(item.getString("usedquota")) ? 0 : Float.parseFloat(item.getString("usedquota"));
item.put("nousedquota", String.valueOf(zed - ysyed));
});
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("年度", "year", 40));
entityList.add(new ExcelExportEntity("院级工会名称", "unionname", 40));
entityList.add(new ExcelExportEntity("分配总额度(元)", "totalquota", 40));
entityList.add(new ExcelExportEntity("已使用额度(元)", "usedquota", 40));
entityList.add(new ExcelExportEntity("剩余额度(元)", "nousedquota", 40));
//excel文件名
String fileName = year + "年院级工会经费使用情况表.xlsx";
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
workbook.write(response.getOutputStream());
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,41 @@
package com.ruoyi.additional.controller.fund;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.additional.api.domain.fund.CostSet;
import com.ruoyi.additional.service.fund.YearCostSetService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
@RestController
@RequestMapping("/costSet/yearCostSet")
public class YearCostSetController {
@Autowired
private Dao dao;
@Autowired
private YearCostSetService yearCostSetService;
@PostMapping("set")
@RequiresPermissions("additional:fund:costSet:yearCostSet")
public AjaxResult set(@RequestBody CostSet costsSet) {
yearCostSetService.set(costsSet);
return AjaxResult.success();
}
@GetMapping("echo")
@RequiresPermissions("additional:fund:costSet:yearCostSet")
public AjaxResult echo() {
CostSet costSet = yearCostSetService.fetch(Cnd.where("year", "=", DateUtil.thisYear()));
return AjaxResult.success(costSet);
}
}
@@ -0,0 +1,128 @@
package com.ruoyi.additional.controller.honor;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.api.domain.honor.HonorApply;
import com.ruoyi.additional.api.domain.honor.HonorBasicSettings;
import com.ruoyi.additional.service.honor.HonorBasicSettingsService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
@RestController
@RequestMapping("/honor/basicSetting")
public class HonorBasicSettingsController {
@Autowired
private Dao dao;
@Autowired
private HonorBasicSettingsService honorBasicSettingsService;
@GetMapping("getTree")
@RequiresPermissions("additional:honor:basicDataManage")
public AjaxResult getTree() {
ArrayList<HonorBasicSettings> list = new ArrayList<>();
HonorBasicSettings parent = honorBasicSettingsService.fetch(Cnd.where("parentId", "is", null));
if (parent != null) {
parent.setChildren(child(parent.getId()));
list.add(parent);
return AjaxResult.success(list);
}
return null;
}
@PostMapping("doSubmit")
@RequiresPermissions("additional:honor:basicDataManage")
public AjaxResult doSubmit(@RequestBody HonorBasicSettings honorBasicSettings) {
if (StrUtil.isBlank(honorBasicSettings.getId())) {
int count = honorBasicSettingsService.count(Cnd.where("name", "=", honorBasicSettings.getName()));
if (count > 0) {
return AjaxResult.warn("名称已存在,请勿重复添加!");
} else {
honorBasicSettingsService.insert(honorBasicSettings);
return AjaxResult.success();
}
} else {
honorBasicSettingsService.updateIgnoreNull(honorBasicSettings);
}
honorBasicSettingsService.update(Chain.make("hasChildren", true), Cnd.where("id", "=", honorBasicSettings.getParentId()));
return AjaxResult.success();
}
@GetMapping("getData")
public AjaxResult getData(String parentId) {
List<HonorBasicSettings> list = honorBasicSettingsService.query(Cnd.where("parentId", "=", parentId).asc("code"));
return AjaxResult.success(list);
}
@GetMapping("getHonorNum")
public AjaxResult getHonorNum(String stateId) {
int gr = dao.count(HonorApply.class, Cnd.where("stateId", "=", stateId).and("honorType", "=", "8a8b455b964a41f2bbf18a4896cbd83e"));
int jt = dao.count(HonorApply.class, Cnd.where("stateId", "=", stateId).and("honorType", "=", "6b9e26a9467f49ae88fbd3951377e0f8"));
Map<String, Integer> map = Map.of("gr", gr, "jt", jt);
return AjaxResult.success(map);
}
@GetMapping("getEvaluateNum")
public AjaxResult getEvaluateNum(String stateId) {
Cnd cndGr = Cnd.NEW();
cndGr.and("stateId", "=", stateId).and("honorTypeId", "=", "8a8b455b964a41f2bbf18a4896cbd83e");
Cnd cndJt = Cnd.NEW();
cndJt.and("stateId", "=", stateId).and("honorTypeId", "=", "6b9e26a9467f49ae88fbd3951377e0f8");
if ("1440".equals(stateId) && !AuthUtil.hasAnyRoles("admin")) {
cndGr.and("unionId", "=", SecurityUtils.getUnionId());
cndJt.and("unionId", "=", SecurityUtils.getUnionId());
}
if ("1470".equals(stateId) && !AuthUtil.hasAnyRoles("admin")) {
cndGr.and("unitId", "=", SecurityUtils.getDeptId());
cndJt.and("unitId", "=", SecurityUtils.getDeptId());
}
int gr = dao.count(EvaluateApply.class, cndGr);
int jt = dao.count(EvaluateApply.class, cndJt);
Map<String, Integer> map = Map.of("gr", gr, "jt", jt);
return AjaxResult.success(map);
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("additional:honor:basicDataManage")
public AjaxResult doDelete(@PathVariable String id) {
List<String> allChildIds = getAllChildIds(id, new ArrayList<>());
allChildIds.add(id);
honorBasicSettingsService.clear(Cnd.where("id", "in", allChildIds));
return AjaxResult.success();
}
private List<HonorBasicSettings> child(String parentId) {
List<HonorBasicSettings> basicSettings = honorBasicSettingsService.query(Cnd.where("parentId", "=", parentId).asc("code"));
basicSettings.forEach(setting -> {
setting.setChildren(child(setting.getId()));
});
return basicSettings;
}
private List<String> getAllChildIds(String parentId, List<String> ids) {
List<String> idList = ids;
List<HonorBasicSettings> basicSettings = honorBasicSettingsService.query(Cnd.where("parentId", "=", parentId));
basicSettings.forEach(v -> {
idList.add(v.getId());
getAllChildIds(v.getId(), ids);
});
return idList;
}
}
@@ -0,0 +1,175 @@
package com.ruoyi.additional.controller.honor;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.domain.honor.Honor;
import com.ruoyi.additional.api.domain.honor.HonorBasicSettings;
import com.ruoyi.additional.service.honor.HonorBasicSettingsService;
import com.ruoyi.additional.service.honor.HonorBatchRegisterService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.api.domain.SysDictData;
import org.apache.commons.io.IOUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
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.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
@RestController
@RequestMapping("/honor/batchRegister")
public class HonorBatchRegisterController {
@Autowired
private Dao dao;
@Autowired
private HonorBatchRegisterService honorBatchRegisterService;
@Autowired
private HonorBasicSettingsService honorBasicSettingsViService;
private static final String HonorLevelId = "3c1058afc91b4e69be46c585b1a48191";
private static final String HONORSINGLEID = "8a8b455b964a41f2bbf18a4896cbd83e";
private static final String HONORLISTID = "6b9e26a9467f49ae88fbd3951377e0f8";
private static final String HONORWORKROOMID = "103a47ed06e54dab8195f52741d1df07";
private static final String HONORAWARDID = "afd9dc97cd7e46c3b9cee5893386d202";
@RequestMapping(value = "/downLoadExcelTemplate")
public void downLoadExcelTemplate(String lx, HttpServletResponse response) {
String fileName = "";
String filePath = "";
if ("1".equals(lx)) {
fileName = "个人荣誉模板.xlsx";
filePath = "honor/personal_honor.xlsx";
} else if("2".equals(lx)) {
fileName = "集体荣誉模板.xlsx";
filePath = "honor/collective_honor.xlsx";
} else {
fileName = "创新工作室模板.xlsx";
filePath = "honor/workRoom_honor.xlsx";
}
try {
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
InputStream fin = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/" + filePath);
assert fin != null;
IOUtils.copy(fin, response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
@PostMapping("/readExcel")
public AjaxResult readExcel(@RequestParam(name = "file") MultipartFile multipartFile,
@RequestParam(name = "lx") String lx) {
try {
ImportParams importParams = new ImportParams();
List<Honor> list = ExcelImportUtil.importExcel(multipartFile.getInputStream(), Honor.class, importParams);
return AjaxResult.success(honorBatchRegisterService.checkData(list, lx));
} catch (Exception e) {
return AjaxResult.warn(e.getMessage());
}
}
@PostMapping("/importData")
public AjaxResult importData(@RequestBody List<Honor> honorList,
@RequestParam(value = "lx", required = false) String lx) {
DynamicDataSourceContextHolder.push("system");
List<SysDictData> dictDataList = dao.query(SysDictData.class, Cnd.where("dict_type", "=", "user_state"));
DynamicDataSourceContextHolder.clear();
Map<String, String> dictMap = dictDataList.stream().collect(Collectors.toMap(SysDictData::getDictLabel, SysDictData::getDictValue));
honorList.forEach(v -> {
if(StrUtil.isNotBlank(v.getJobStatus())) {
v.setJobStatus(dictMap.get(v.getJobStatus()) != null ? dictMap.get(v.getJobStatus()) : "");
}
if ("1".equals(lx)) {
v.setHonorType(getBasicIdByName("个人荣誉"));
} else if("2".equals(lx)) {
v.setHonorType(getBasicIdByName("集体荣誉"));
} else {
v.setHonorType(getBasicIdByName("创新工作室"));
}
v.setUserSex("".equals(v.getUserSex()) ? "0" : "1");
//荣誉等级
String levelId = getBasicIdByName(v.getHonorLevel());
if (StrUtil.isNotBlank(v.getHonorLevel())) {
if (StrUtil.isBlank(levelId)) {
HonorBasicSettings hbs = new HonorBasicSettings();
hbs.setName(v.getHonorLevel());
hbs.setParentId(HonorLevelId);
v.setHonorLevel(insertBasic(hbs));
} else {
v.setHonorLevel(levelId);
}
}
//奖项
String prizeId = getBasicIdByName(v.getPrize());
if (StrUtil.isNotBlank(v.getPrize())) {
if (StrUtil.isBlank(prizeId)) {
HonorBasicSettings hbs = new HonorBasicSettings();
hbs.setName(v.getPrize());
if("1".equals(lx)) {
hbs.setParentId(HONORSINGLEID);
} else if("2".equals(lx)) {
hbs.setParentId(HONORLISTID);
} else {
hbs.setParentId(HONORWORKROOMID);
}
v.setPrize(insertBasic(hbs));
} else {
v.setPrize(prizeId);
}
}
//获奖材料
List<String> awardMaterialsInsert = new ArrayList<>();
String awardMaterialsExcel = v.getAwardMaterialsExcel();
if (StrUtil.isNotBlank(awardMaterialsExcel)) {
String[] awardMaterialsExcelArray = awardMaterialsExcel.split("");
for (String s : awardMaterialsExcelArray) {
awardMaterialsInsert.add(getBasicIdByName(s));
}
v.setAwardMaterials(awardMaterialsInsert);
}
dao.insert(v);
});
return AjaxResult.success();
}
private String insertBasic(HonorBasicSettings honorBasicSettings) {
return honorBasicSettingsViService.insert(honorBasicSettings).getId();
}
private String getBasicIdByName(String name) {
List<HonorBasicSettings> query = honorBasicSettingsViService.query();
Optional<HonorBasicSettings> hbs = query.stream().filter(x -> x.getName().equals(name)).findFirst();
return hbs.map(HonorBasicSettings::getId).orElse(null);
}
}
@@ -0,0 +1,94 @@
package com.ruoyi.additional.controller.honor;
import com.ruoyi.additional.service.honor.HonorManageService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Calendar;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
@RestController
@RequestMapping("/honor/dataBoard")
public class HonorDataBoardController {
@Autowired
private Dao dao;
@Autowired
private HonorManageService honorManageService;
@GetMapping("getHonorTypeByYear")
@RequiresPermissions("additional:honor:dataBoard")
public AjaxResult getHonorTypeByYear() {
Sql sql = Sqls.create("""
SELECT YEAR
( h.grantDate ) as year,
hbs.`name`,
count( 1 ) as num
FROM
honor h
left join honor_basic_settings hbs on hbs.id = h.honorType
WHERE YEAR (h.grantDate) <= @currentYear
GROUP BY
YEAR (h.grantDate)
ORDER BY
h.grantDate
""");
sql.setParam("currentYear", Calendar.getInstance().get(Calendar.YEAR));
return AjaxResult.success(honorManageService.list(sql));
}
@GetMapping("getSingleHonorByYear")
@RequiresPermissions("additional:honor:dataBoard")
public AjaxResult getSingleHonorByYear() {
Sql sql = Sqls.create("""
SELECT
hbs.`name`,
count( 1 ) AS num,
YEAR ( h.grantDate ) as year
FROM
honor h
LEFT JOIN honor_basic_settings hbs ON hbs.id = h.prize
WHERE
h.honorType = '8a8b455b964a41f2bbf18a4896cbd83e'
AND YEAR (h.grantDate) <= @currentYear
GROUP BY
h.prize
""");
sql.setParam("currentYear", Calendar.getInstance().get(Calendar.YEAR));
return AjaxResult.success(honorManageService.list(sql));
}
@GetMapping("getSingleLevelByYear")
@RequiresPermissions("additional:honor:dataBoard")
public AjaxResult getSingleLevelByYear() {
Sql sql = Sqls.create("""
SELECT
hbs.`name`,
count( 1 ) AS num,
YEAR ( h.grantDate ) AS YEAR
FROM
honor h
LEFT JOIN honor_basic_settings hbs ON hbs.id = h.honorLevel
WHERE
h.honorLevel IS NOT NULL
AND h.honorType = '8a8b455b964a41f2bbf18a4896cbd83e'
AND YEAR ( h.grantDate ) <= @currentYear
GROUP BY
h.honorLevel
""");
sql.setParam("currentYear", Calendar.getInstance().get(Calendar.YEAR));
return AjaxResult.success(honorManageService.list(sql));
}
}
@@ -0,0 +1,227 @@
package com.ruoyi.additional.controller.honor;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.domain.honor.Honor;
import com.ruoyi.additional.api.domain.honor.HonorBasicSettings;
import com.ruoyi.additional.service.honor.HonorBasicSettingsService;
import com.ruoyi.additional.service.honor.HonorManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysDictData;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.json.Json;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
@RestController
@RequestMapping("/honor/honorLedger")
public class HonorLedgerController {
@Autowired
private Dao dao;
@Autowired
private HonorManageService honorManageService;
@Autowired
private HonorBasicSettingsService honorBasicSettingsService;
@PostMapping("pageData")
@RequiresPermissions("additional:honor:honorLedger")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "honorType", required = false) String honorType,
@RequestParam(value = "prize", required = false) String prize,
@RequestParam(value = "honorLevel", required = false) String honorLevel,
@RequestParam(value = "userName", required = false) String userName,
@RequestParam(value = "unitName", required = false) String unitName) {
Sql sql = Sqls.create("""
SELECT
h.*,
prize.`name` AS prizeName,
type.`name` AS typeName,
`level`.`name` AS levelName,
award.`name` AS awardName
FROM
`honor` h
LEFT JOIN honor_basic_settings prize ON prize.id = h.prize
LEFT JOIN honor_basic_settings type ON type.id = h.honorType
LEFT JOIN honor_basic_settings `level` ON `level`.id = h.honorLevel
LEFT JOIN honor_basic_settings `award` ON `award`.id = h.awardType
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(h.grantDate)", "=", year);
cnd.andEX("h.honorType", "=", honorType);
cnd.andEX("h.prize", "=", prize);
cnd.andEX("h.honorLevel", "=", honorLevel);
if (Strings.isNotBlank(userName)) {
cnd.andEX("h.userName", "like", "%" + userName + "%");
}
if (Strings.isNotBlank(unitName)) {
cnd.andEX("h.unitName", "like", "%" + unitName + "%");
}
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
}
sql.setCondition(cnd);
Pagination pagination = honorManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
list.forEach(v -> {
if (StrUtil.isNotBlank(v.getString("awardMaterials"))) {
v.setv("awardMaterialsExcel", getBasicNameById(v.getString("awardMaterials")).toString());
}
});
return AjaxResult.success(pagination);
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("additional:honor:honorLedger")
public AjaxResult doDelete(@PathVariable String id) {
honorManageService.delete(id);
return AjaxResult.success();
}
@RequestMapping("doExport")
public void doExport(@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "honorType", required = false) String honorType,
@RequestParam(value = "prize", required = false) String prize,
@RequestParam(value = "honorLevel", required = false) String honorLevel,
@RequestParam(value = "userName", required = false) String userName,
@RequestParam(value = "unitName", required = false) String unitName,
HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
Sql sql = Sqls.create("""
SELECT
h.*,
prize.`name` AS prizeName,
type.`name` AS typeName,
`level`.`name` AS levelName,
award.`name` AS awardName
FROM
`honor` h
LEFT JOIN honor_basic_settings prize ON prize.id = h.prize
LEFT JOIN honor_basic_settings type ON type.id = h.honorType
LEFT JOIN honor_basic_settings `level` ON `level`.id = h.honorLevel
LEFT JOIN honor_basic_settings `award` ON `award`.id = h.awardType
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(h.grantDate)", "=", year);
cnd.andEX("h.honorType", "=", honorType);
cnd.andEX("h.prize", "=", prize);
cnd.andEX("h.honorLevel", "=", honorLevel);
if (Strings.isNotBlank(userName)) {
cnd.andEX("h.userName", "like", "%" + userName + "%");
}
if (Strings.isNotBlank(unitName)) {
cnd.andEX("h.unitName", "like", "%" + unitName + "%");
}
sql.setCondition(cnd);
List<Honor> honors = honorManageService.listEntity(sql);
DynamicDataSourceContextHolder.push("system");
List<SysDictData> dictDataList = dao.query(SysDictData.class, Cnd.where("dict_type", "=", "user_state"));
List<SysDictData> sexDicts = dao.query(SysDictData.class, Cnd.where("dict_type", "=", "sys_user_sex"));
DynamicDataSourceContextHolder.clear();
Map<String, String> dictMap = dictDataList.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
Map<String, String> sexMap = sexDicts.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
honors.forEach(v -> {
if (v.getAwardMaterials() != null && v.getAwardMaterials().size() > 0) {
List<String> basicNameById = getBasicNameById(Json.toJson(v.getAwardMaterials()));
v.setAwardMaterialsExcel(basicNameById.toString());
}
if(StrUtil.isNotBlank(v.getJobStatus())) {
v.setJobStatus(dictMap.get(v.getJobStatus()) != null ? dictMap.get(v.getJobStatus()) : "");
}
if(StrUtil.isNotBlank(v.getWorkRoomDesc())) {
v.setWorkRoomDesc(HtmlUtil.cleanHtmlTag(v.getWorkRoomDesc()));
}
if(StrUtil.isNotBlank(v.getUserSex())){
v.setUserSex(sexMap.get(v.getUserSex()) != null ? sexMap.get(v.getUserSex()) : "");
}
});
List<HonorBasicSettings> query = honorBasicSettingsService.query();
Optional<HonorBasicSettings> singleHonor = query.stream().filter(x -> x.getId().equals(honorType)).findFirst();
String filename = "";
TemplateExportParams params;
if ("个人荣誉".equals(singleHonor.get().getName())) {
filename = "个人荣誉";
params = new TemplateExportParams(
"templates/honor/personal_export.xlsx");
} else if("集体荣誉".equals(singleHonor.get().getName())) {
filename = "集体荣誉";
params = new TemplateExportParams(
"templates/honor/collective_export.xlsx");
} else {
filename = "创新工作室";
params = new TemplateExportParams(
"templates/honor/workRoom_export.xlsx");
}
honors.forEach(v -> {
if (v.getHonorLevel() != null) {
Optional<HonorBasicSettings> Level = query.stream().filter(x -> x.getId().equals(v.getHonorLevel())).findFirst();
v.setHonorLevel(Level.get().getName());
}
if (v.getAwardType() != null) {
Optional<HonorBasicSettings> Type = query.stream().filter(x -> x.getId().equals(v.getAwardType())).findFirst();
v.setAwardType(Type.get().getName());
}
if (v.getPrize() != null) {
Optional<HonorBasicSettings> prize1 = query.stream().filter(x -> x.getId().equals(v.getPrize())).findFirst();
v.setPrize(prize1.get().getName());
}
v.setHonorType(singleHonor.get().getName());
});
map.put("maplist", honors);
String disposition = "attachment;filename=" + URLEncoder.encode(filename + "名单.xlsx", "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
workbook.write(response.getOutputStream());
workbook.close();
}
private List<String> getBasicNameById(String awardMaterials) {
List<String> awardMaterialList = Json.fromJsonAsList(String.class, awardMaterials);
List<HonorBasicSettings> list = dao.query(HonorBasicSettings.class, Cnd.where("id", "in", awardMaterialList));
return list.stream().map(HonorBasicSettings::getName).collect(Collectors.toList());
}
}
@@ -0,0 +1,75 @@
package com.ruoyi.additional.controller.honor;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.domain.honor.Honor;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysUnion;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.domain.SysUserRole;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.entity.Record;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
@RestController
@RequestMapping("/honor/register")
public class HonorRegisterController {
@Autowired
private Dao dao;
@PostMapping("doSubmit")
@RequiresPermissions("additional:honor:register")
public AjaxResult doSubmit(@RequestBody Honor honor) {
if (!StrUtil.isBlank(honor.getUserName())) {
Record record = dao.fetch("user", Cnd.NEW().and("userId", "=", honor.getUserId()));
honor.setUserName(record.getString("username"));
}
if (StrUtil.isNotBlank(honor.getUnionId())) {
SysUnion union = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.fetch(SysUnion.class, honor.getUnionId());
});
honor.setUnionName(union.getUnionName());
}
dao.insertOrUpdate(honor);
return AjaxResult.success();
}
@PostMapping("findData/{id}")
@RequiresPermissions("additional:honor:register")
public AjaxResult findData(@PathVariable String id) {
Honor honor = dao.fetch(Honor.class, id);
return AjaxResult.success(honor);
}
@PostMapping("getUnitPersonCount")
@RequiresPermissions("additional:honor:register")
public AjaxResult getUnitPersonCount(@RequestParam(name = "id", required = false) String id) {
DynamicDataSourceContextHolder.push("system");
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("roleId", "=", Roles.UNIT_PRINCIPAL));
List<Long> idList = userRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
List<SysUser> users = dao.query(SysUser.class, Cnd.where("deptId", "=", id));
String unitLeader = users.stream().filter(o -> idList.contains(o.getUserId())).map(SysUser::getNickName).collect(Collectors.joining(","));
long count = users.stream().filter(o -> "1".equals(o.getSex())).count();
DynamicDataSourceContextHolder.clear();
return AjaxResult.success(Map.of("unitLeader", unitLeader, "totalCount", users.size(), "womenCount", count));
}
}
@@ -0,0 +1,89 @@
package com.ruoyi.additional.controller.honor;
import com.ruoyi.additional.service.honor.HonorManageService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
@RestController
@RequestMapping("/honor/honorSummary")
public class HonorSummaryController {
@Autowired
private Dao dao;
@Autowired
private HonorManageService honorManageService;
private static final String HONORSINGLEID = "8a8b455b964a41f2bbf18a4896cbd83e";
private static final String HONORLISTID = "6b9e26a9467f49ae88fbd3951377e0f8";
private static final String HONORWORKROOMID = "103a47ed06e54dab8195f52741d1df07";
private static final String nationalLevel = "21a118f4c771400aa8b911a0cd203289";
private static final String provincial = "e13ce814a6db48ad8b8491985c1da964";
private static final String schoolLevel = "65772a664e034121bb245eeff66ea1b5";
@PostMapping("unionData")
@RequiresPermissions("additional:honor:summary:unionSummary")
public AjaxResult unionData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unionId", required = false) String unionId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
id,
unionName as unionname,
( SELECT COUNT( 1 ) FROM honor h WHERE h.honorType = @personalHonor AND h.unionId = un.id $cnd) personalHonorNum,
( SELECT COUNT( 1 ) FROM honor h WHERE h.honorType = @collectiveHonor AND h.unionId = un.id $cnd) collectiveHonorNum,
( SELECT COUNT( 1 ) FROM honor h WHERE h.honorType = @workRoomHonor AND h.unionId = un.id $cnd) workRoomHonorNum
FROM
`union` un $condition
""")
.setParam("personalHonor", HONORSINGLEID)
.setParam("collectiveHonor", HONORLISTID)
.setParam("workRoomHonor", HONORWORKROOMID);
cnd.andEX("id", "=", unionId);
if (year != null) {
sql.setVar("cnd", "and YEAR(grantDate)=" + year);
}
cnd.desc("unionname");
sql.setCondition(cnd);
return AjaxResult.success(honorManageService.listMap(sql));
}
@PostMapping("honorLevelData")
@RequiresPermissions("additional:honor:summary:unionSummary")
public AjaxResult honorLevelData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unionId", required = false) String unionId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
id,
unionName as unionname,
( SELECT COUNT( 1 ) FROM honor h WHERE h.honorLevel = @nationalLevel AND h.unionId = un.id $cnd) nationalLevelNum,
( SELECT COUNT( 1 ) FROM honor h WHERE h.honorLevel = @provincial AND h.unionId = un.id $cnd) provincialNum ,
( SELECT COUNT( 1 ) FROM honor h WHERE h.honorLevel = @schoolLevel AND h.unionId = un.id $cnd) schoolLevelNum
FROM
`union` un $condition
""").setParam("nationalLevel", nationalLevel).setParam("provincial", provincial).setParam("schoolLevel", schoolLevel);
cnd.andEX("id", "=", unionId);
if (year != null) {
sql.setVar("cnd", "and YEAR(grantDate)=" + year);
}
cnd.desc("unionname");
sql.setCondition(cnd);
return AjaxResult.success(honorManageService.listMap(sql));
}
}
@@ -0,0 +1,144 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
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;
import java.util.Optional;
@RestController
@RequestMapping("/medicalAid/branchUnionAudit")
public class MedicalAidBranchUnionAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:branchUnionAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin")) {
cnd.and("m.unionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.BRANCH_UNION_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.BRANCH_UNION_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.BRANCH_UNION_READY);
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:branchUnionAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String branchUnionAuditId = medicalAid.getBranchUnionAuditId();
dao.delete(Audit.class, branchUnionAuditId);
Chain chain = Chain.make("branchUnionAuditId", null);
chain.add("stateId", MedicalAuditState.BRANCH_UNION_READY);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param ids id
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:branchUnionAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam(name = "ids[]") String[] ids) {
dao.insert(audit);
List<MedicalAid> medicalAids = dao.query(MedicalAid.class, Cnd.where("id", "in", ids));
for (MedicalAid medicalAid : medicalAids) {
medicalAid.setBranchUnionAuditId(audit.getId());
List<String> unionAuditIds = Optional.ofNullable(medicalAid.getBranchUnionAuditIds()).orElse(new ArrayList<>());
unionAuditIds.add(audit.getId());
medicalAid.setBranchUnionAuditIds(unionAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.SCHOOL_HOSPITAL_READY);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.BRANCH_UNION_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.BRANCH_UNION_BACK_MODIFY);
}
}
dao.updateIgnoreNull(medicalAids);
return AjaxResult.success();
}
}
@@ -0,0 +1,184 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.DictUtils;
import com.ruoyi.system.api.domain.SysDictData;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/medical/dashBoard")
public class MedicalAidDashBoardController {
@Autowired
private MedicalAidOrdinaryApplyService aidOrdinaryApplyService;
@Autowired
private Dao dao;
/**
* 各工会会员数
*/
@RequestMapping("unionMember")
@RequiresPermissions("medical:dashBoard")
public AjaxResult unionMember() {
String str = """
SELECT
un.unionName,
un.unionCode,
( SELECT count( 1 ) FROM `user` WHERE unionId = un.id and aidFundMember = @code ) `value`
FROM
`union` un
ORDER BY
$order
""";
List<NutMap> chartData = aidOrdinaryApplyService.listMap(Sqls.create(str).setParam("code", AidFundMemberMode.NORMAL.getCode()).setVar("order", "un.unionCode"));
List<NutMap> tableData = aidOrdinaryApplyService.listMap(Sqls.create(str).setParam("code", AidFundMemberMode.NORMAL.getCode()).setVar("order", "un.unionCode"));
return AjaxResult.success(Map.of("chartData", chartData, "tableData", tableData));
}
/**
* 根据在职状态查找会员数
*
* @return
*/
@RequestMapping("userStateMember")
@RequiresPermissions("medical:dashBoard")
public Object userStateMember() {
List<SysDictData> userStateDicts = Optional.ofNullable(DictUtils.getDictCache("user_state")).orElse(Collections.emptyList());
StringBuilder userStateSqlStr = new StringBuilder();
for (int i = 0; i < userStateDicts.size(); i++) {
userStateSqlStr.append("(SELECT COUNT(1) FROM `user` WHERE aidFundMember = %d AND userState = '%s') as '%s'".formatted(AidFundMemberMode.NORMAL.getCode(), userStateDicts.get(i).getDictValue(), userStateDicts.get(i).getDictLabel()));
if (i < userStateDicts.size() - 1) {
userStateSqlStr.append(",");
}
}
Sql sql = Sqls.create("SELECT $userStateSql ");
sql.setVar("userStateSql", userStateSqlStr.toString());
NutMap nutMap = aidOrdinaryApplyService.fetch(sql);
List<NutMap> list = userStateDicts.stream().map(v -> NutMap.NEW().addv("name", v.getDictLabel())
.addv("type", v.getDictValue())
.addv("value", nutMap.getInt(v.getDictLabel(), 0))).collect(Collectors.toList());
return AjaxResult.success(list);
}
/**
* 根据人员类型查找会员数
*
* @return
*/
@RequestMapping("personTypeMember")
@RequiresPermissions("medical:dashBoard")
public Object personTypeMember() {
List<SysDictData> userStateDicts = Optional.ofNullable(DictUtils.getDictCache("user_type")).orElse(Collections.emptyList());
StringBuilder userStateSqlStr = new StringBuilder();
for (int i = 0; i < userStateDicts.size(); i++) {
userStateSqlStr.append("(SELECT COUNT(1) FROM `user` WHERE aidFundMember = %d AND personType = '%s') as '%s'".formatted(AidFundMemberMode.NORMAL.getCode(), userStateDicts.get(i).getDictValue(), userStateDicts.get(i).getDictLabel()));
if (i < userStateDicts.size() - 1) {
userStateSqlStr.append(",");
}
}
Sql sql = Sqls.create("SELECT $userStateSql ");
sql.setVar("userStateSql", userStateSqlStr.toString());
NutMap nutMap = aidOrdinaryApplyService.fetch(sql);
List<NutMap> list = userStateDicts.stream().map(v -> NutMap.NEW().addv("name", v.getDictLabel())
.addv("label", v.getDictLabel())
.addv("value", nutMap.getInt(v.getDictLabel(), 0))).collect(Collectors.toList());
return AjaxResult.success(list);
}
/**
* 查询基金会员总数
*
* @return
*/
@RequestMapping("getAidFundMember")
@RequiresPermissions("medical:dashBoard")
public Object getAidFundMember() {
int count = dao.count("user", Cnd.where("aidFundMember", "=", AidFundMemberMode.NORMAL.getCode()));
return AjaxResult.success(count);
}
/**
* 查询本年加入的基金会员
*
* @return
*/
@RequestMapping("getAidFundMemberYear")
@RequiresPermissions("medical:dashBoard")
public Object getAidFundMemberYear() {
int count = dao.count("user", Cnd.where("aidFundMember", "=", AidFundMemberMode.NORMAL.getCode()).and("YEAR(aidFundMemberJoinTime)", "=", DateUtil.thisYear()));
return AjaxResult.success(count);
}
/**
* 查询med医疗补助和weightMed重疾补助
*
* @return
*/
@RequestMapping("getAidMedical")
@RequiresPermissions("medical:dashBoard")
public AjaxResult getAidMedical() {
Sql sql = Sqls.create("""
SELECT
sum( CASE WHEN type = '1' THEN 1 ELSE 0 END ) AS med,
sum( CASE WHEN type = '2' THEN 1 ELSE 0 END ) AS weightMed
FROM
medical_aid
""");
return AjaxResult.success(aidOrdinaryApplyService.fetch(sql));
}
/**
* 查询全部补助金额
*
* @return
*/
@RequestMapping("getAidMedicalMoney")
@RequiresPermissions("medical:dashBoard")
public AjaxResult getAidMedicalMoney() {
Sql sql = Sqls.create("""
SELECT
sum( ordinarySubsidiesAmount ) + sum( seriousSubsidiesAmount )\s
FROM
medical_aid
WHERE stateId = @PASS
""");
sql.setParam("PASS", MedicalAuditState.PASS);
double money = (double) Daos.query(dao, sql.toString(), Sqls.callback.doubleValue());
return AjaxResult.success(money);
}
}
@@ -0,0 +1,51 @@
package com.ruoyi.additional.controller.medical;
import com.ruoyi.additional.api.domain.medical.MedicalAidDiseaseType;
import com.ruoyi.additional.service.medical.MedicalAidDiseaseTypeService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/medicalAid/diseaseType")
public class MedicalAidDiseaseTypeController {
@Autowired
private MedicalAidDiseaseTypeService diseaseTypeService;
@RequestMapping("/pageData")
@RequiresPermissions("medical:diseaseType")
public AjaxResult pageData(@RequestBody PageForm pageForm) {
Cnd cnd = Cnd.NEW();
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("typeCode", pageForm.getSearchKeyword());
seg.orLike("typeName", pageForm.getSearchKeyword());
cnd.and(seg);
cnd.asc("typeCode");
Pagination pagination = diseaseTypeService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
return AjaxResult.success(pagination);
}
@RequestMapping("/addAndModify")
@RequiresPermissions("medical:diseaseType")
public Object addAndModify(@RequestBody MedicalAidDiseaseType data) {
diseaseTypeService.insertOrUpdate(data);
return AjaxResult.success();
}
@RequestMapping("/doDelete")
@RequiresPermissions("medical:diseaseType")
public AjaxResult doDelete(@RequestParam String id) {
diseaseTypeService.delete(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,187 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.constant.medical.MedicalType;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
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.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* 财务出纳
*
* @author jug
* @date 2023/02/21
*/
@RestController
@RequestMapping("/medicalAid/financialCashierAudit")
public class MedicalAidFinancialCashierAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:financialCashierAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.unionName,
m.unitName,
m.applyTime,
m.diseaseDiagnosis,
m.bankName,
m.bankAccount,
m.subsidiesAmount,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
cnd.andEX("m.unionId", "=", pageForm.getUnionId());
cnd.andEX("m.unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (pageForm.getIsMajorDisease() != null) {
if (pageForm.getIsMajorDisease()) {
cnd.and("t.typeCode", "!=", "A");
} else {
cnd.and("t.typeCode", "=", "A");
}
}
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.FINANCIAL_CASHIER_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.FINANCIAL_CASHIER_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.FINANCIAL_CASHIER_READY);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:financialCashierAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String financialCashierAuditId = medicalAid.getFinancialCashierAuditId();
dao.delete(Audit.class, financialCashierAuditId);
Chain chain = Chain.make("financialCashierAuditId", null);
chain.add("stateId", MedicalAuditState.FINANCIAL_CASHIER_READY);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param ids ids
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:financialCashierAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam(name = "ids[]") String[] ids) {
dao.insert(audit);
List<MedicalAid> medicalAids = dao.query(MedicalAid.class, Cnd.where("id", "in", ids));
for (MedicalAid medicalAid : medicalAids) {
medicalAid.setFinancialCashierAuditId(audit.getId());
List<String> financialCashierAuditIds = Optional.ofNullable(medicalAid.getFinancialCashierAuditIds()).orElse(new ArrayList<>());
financialCashierAuditIds.add(audit.getId());
medicalAid.setFinancialCashierAuditIds(financialCashierAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.PASS);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.FINANCIAL_CASHIER_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.FINANCIAL_CASHIER_BACK_MODIFY);
}
}
dao.updateIgnoreNull(medicalAids);
//医疗互助 个人实际支付部分金额 = selfPayMoney - subsidiesAmount 大于10000元 生成重疾记录
List<MedicalAid> seriousMedicals = medicalAids.stream().filter(v -> v.getType().equals(MedicalType.ORDINARY.getCode()) && (NumberUtil.sub(v.getSelfPayMoney(), v.getOrdinarySubsidiesAmount())) >= 10000).collect(Collectors.toList());
for (MedicalAid seriousMedical : seriousMedicals) {
seriousMedical.setId(null);
seriousMedical.setType(MedicalType.SERIOUS.getCode());
seriousMedical.setStateId(MedicalAuditState.NOT_SUBMIT);
seriousMedical.setApplyTime(null);
seriousMedical.setBranchUnionAuditId(null);
seriousMedical.setBranchUnionAuditIds(Collections.emptyList());
seriousMedical.setRetireAuditId(null);
seriousMedical.setRetireAuditIds(Collections.emptyList());
seriousMedical.setSchoolHospitalAuditId(null);
seriousMedical.setSchoolHospitalAuditIds(Collections.emptyList());
seriousMedical.setSchoolAccountingAuditId(null);
seriousMedical.setSchoolAccountingAuditIds(Collections.emptyList());
seriousMedical.setSchoolViceChairmanAuditId(null);
seriousMedical.setSchoolViceChairmanAuditIds(Collections.emptyList());
seriousMedical.setSchoolChairmanAuditId(null);
seriousMedical.setSchoolChairmanAuditIds(Collections.emptyList());
seriousMedical.setFinancialCashierAuditId(null);
seriousMedical.setFinancialCashierAuditIds(Collections.emptyList());
}
dao.insert(seriousMedicals);
return AjaxResult.success();
}
}
@@ -0,0 +1,137 @@
package com.ruoyi.additional.controller.medical;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
@RestController
@RequestMapping("/medicalAid/ordinaryApply")
@Slf4j
public class MedicalAidOrdinaryApplyController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
@RequestMapping("pageData")
@RequiresPermissions("medical:ordinaryApply")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Pagination pagination = ordinaryApplyService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@RequestMapping("queryUsers")
@RequiresPermissions("medical:ordinaryApply")
public AjaxResult queryUsers(@RequestParam String query) {
List<NutMap> list = ordinaryApplyService.queryUsers(query);
return AjaxResult.success(list);
}
@RequestMapping("/doSave")
@RequiresPermissions("medical:ordinaryApply")
public AjaxResult doSave(@RequestBody MedicalAid medicalAid) {
ordinaryApplyService.doSave(medicalAid);
return AjaxResult.success();
}
@RequestMapping("/doSubmit")
@RequiresPermissions("medical:ordinaryApply")
public AjaxResult doSubmit(@RequestBody MedicalAid medicalAid) {
ordinaryApplyService.doSubmit(medicalAid);
return AjaxResult.success();
}
@RequestMapping("/doDelete")
@RequiresPermissions("medical:ordinaryApply")
public AjaxResult doDelete(@RequestParam String id) {
ordinaryApplyService.delete(id);
return AjaxResult.success();
}
@RequestMapping("/findOne")
@RequiresPermissions("medical:ordinaryApply")
public AjaxResult findOne(@RequestParam String id) {
MedicalAid medicalAid = ordinaryApplyService.fetch(id);
return AjaxResult.success(medicalAid);
}
@RequestMapping("/fullInfo")
@RequiresLogin
public AjaxResult fullInfo(@RequestParam String id) {
MedicalAid medicalAid = ordinaryApplyService.fetch(id);
if (Lang.isEmpty(medicalAid.getBranchUnionAuditIds())) {
medicalAid.setBranchUnionAuditIds(Collections.emptyList());
}
if (Lang.isEmpty(medicalAid.getRetireAuditIds())) {
medicalAid.setRetireAuditIds(Collections.emptyList());
}
if (Lang.isEmpty(medicalAid.getSchoolHospitalAuditIds())) {
medicalAid.setSchoolHospitalAuditIds(Collections.emptyList());
}
if (Lang.isEmpty(medicalAid.getSchoolAccountingAuditIds())) {
medicalAid.setSchoolAccountingAuditIds(Collections.emptyList());
}
if (Lang.isEmpty(medicalAid.getSchoolViceChairmanAuditIds())) {
medicalAid.setSchoolViceChairmanAuditIds(Collections.emptyList());
}
if (Lang.isEmpty(medicalAid.getSchoolChairmanAuditIds())) {
medicalAid.setSchoolChairmanAuditIds(Collections.emptyList());
}
if (Lang.isEmpty(medicalAid.getFinancialCashierAuditIds())) {
medicalAid.setFinancialCashierAuditIds(Collections.emptyList());
}
medicalAid.setBranchUnionAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getBranchUnionAuditIds()).desc("auditTime")));
medicalAid.setRetireAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getRetireAuditIds()).desc("auditTime")));
medicalAid.setSchoolHospitalAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getSchoolHospitalAuditIds()).desc("auditTime")));
medicalAid.setSchoolAccountingAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getSchoolAccountingAuditIds()).desc("auditTime")));
medicalAid.setSchoolViceChairmanAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getSchoolViceChairmanAuditIds()).desc("auditTime")));
medicalAid.setSchoolChairmanAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getSchoolChairmanAuditIds()).desc("auditTime")));
medicalAid.setFinancialCashierAudits(dao.query(Audit.class, Cnd.where("id", "in", medicalAid.getFinancialCashierAuditIds()).desc("auditTime")));
return AjaxResult.success(medicalAid);
}
@PostMapping("exportOrdinary")
@RequiresPermissions("medical:ordinaryApply")
public void exportOrdinary(@RequestParam String id, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream();
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/medical/ordinaryApply.docx");
) {
NutMap renderMap = ordinaryApplyService.exportOrdinaryData(id);
String userName = renderMap.getString("userName");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(userName + "-医疗互助申请表.docx", StandardCharsets.UTF_8)));
Configure config = Configure.builder().build();
assert inputStream != null;
XWPFTemplate.compile(inputStream, config).render(renderMap, outputStream);
} catch (Exception e) {
log.error(e.getMessage());
}
}
}
@@ -0,0 +1,152 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.RemoteConfigService;
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.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;
import java.util.Optional;
/**
* 离退休工作处审核
*
* @author jug
* @date 2023/02/21
*/
@RestController
@RequestMapping("/medicalAid/retireAudit")
public class MedicalAidRetireAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private RemoteConfigService remoteConfigService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:retireAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
String retirementOfficeDeptId = remoteConfigService.selectConfigByKey("sys.retirementOfficeDeptId").getMsg();
cnd.and("m.unitId", "=", retirementOfficeDeptId);
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.RETIRED_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.RETIRED_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.RETIRED_READY);
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:retireAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String retireAuditId = medicalAid.getRetireAuditId();
dao.delete(Audit.class, retireAuditId);
Chain chain = Chain.make("retireAuditId", null);
chain.add("stateId", MedicalAuditState.RETIRED_READY);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param ids ids
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:retireAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam(name = "ids[]") String[] ids) {
dao.insert(audit);
List<MedicalAid> medicalAids = dao.query(MedicalAid.class, Cnd.where("id", "in", ids));
for (MedicalAid medicalAid : medicalAids) {
medicalAid.setRetireAuditId(audit.getId());
List<String> retireAuditIds = Optional.ofNullable(medicalAid.getRetireAuditIds()).orElse(new ArrayList<>());
retireAuditIds.add(audit.getId());
medicalAid.setRetireAuditIds(retireAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.SCHOOL_HOSPITAL_READY);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.RETIRED_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.RETIRED_BACK_MODIFY);
}
}
dao.updateIgnoreNull(medicalAids);
return AjaxResult.success();
}
}
@@ -0,0 +1,177 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.constant.medical.MedicalType;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.additional.service.medical.MedicalCalcMoney;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
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;
import java.util.Optional;
/**
* 工会会计审核
*
* @author jug
* @date 2023/02/21
*/
@RestController
@RequestMapping("/medicalAid/schoolAccountingAudit")
public class MedicalAidSchoolAccountingAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:schoolAccountingAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.unionName,
m.unitName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
cnd.andEX("m.unionId", "=", pageForm.getUnionId());
cnd.andEX("m.unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.SCHOOL_ACCOUNTING_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.SCHOOL_ACCOUNTING_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.SCHOOL_ACCOUNTING_READY);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolAccountingAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String schoolAccountingAuditId = medicalAid.getSchoolAccountingAuditId();
dao.delete(Audit.class, schoolAccountingAuditId);
Chain chain = Chain.make("schoolAccountingAuditId", null);
chain.add("stateId", MedicalAuditState.SCHOOL_ACCOUNTING_READY);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param id id
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolAccountingAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam String id, @RequestParam double subsidiesAmount) {
dao.insert(audit);
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
medicalAid.setSchoolAccountingAuditId(audit.getId());
if (medicalAid.getType().equals(MedicalType.ORDINARY.getCode())) {
medicalAid.setOrdinarySubsidiesAmount(subsidiesAmount);
} else {
medicalAid.setSeriousSubsidiesAmount(subsidiesAmount);
}
List<String> schoolAccountingAuditIds = Optional.ofNullable(medicalAid.getSchoolAccountingAuditIds()).orElse(new ArrayList<>());
schoolAccountingAuditIds.add(audit.getId());
medicalAid.setSchoolAccountingAuditIds(schoolAccountingAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.SCHOOL_VICE_CHAIRMAN_READY);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.SCHOOL_ACCOUNTING_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.SCHOOL_ACCOUNTING_BACK_MODIFY);
}
dao.updateIgnoreNull(medicalAid);
return AjaxResult.success();
}
/**
* 计算补贴金额
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("calcSubsidiesAmount")
@RequiresPermissions("medical:schoolAccountingAudit")
public AjaxResult calcSubsidiesAmount(@RequestParam String id) {
MedicalAid medicalAid = ordinaryApplyService.fetch(id);
if (medicalAid.getType().equals(MedicalType.ORDINARY.getCode())) {
double subsidiesAmount = NumberUtil.mul(medicalAid.getSelfPayMoney(), Double.valueOf(0.5));
subsidiesAmount = Math.max(subsidiesAmount, 200);
return AjaxResult.success("操作成功", NumberUtil.decimalFormat("0.00", subsidiesAmount));
} else {
//个人实际支付部分合计
double selfPartPayMoney = NumberUtil.sub(medicalAid.getSelfPayMoney(), medicalAid.getOrdinarySubsidiesAmount());
double totalGrant = MedicalCalcMoney.calc(selfPartPayMoney);
return AjaxResult.success("操作成功", NumberUtil.decimalFormat("0.00", totalGrant));
}
}
}
@@ -0,0 +1,148 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
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;
import java.util.Optional;
/**
* 工会主席审核
*
* @author jug
* @date 2023/02/21
*/
@RestController
@RequestMapping("/medicalAid/schoolChairmanAudit")
public class MedicalAidSchoolChairmanAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:schoolChairmanAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.unionName,
m.unitName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
cnd.andEX("m.unionId", "=", pageForm.getUnionId());
cnd.andEX("m.unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.SCHOOL_CHAIRMAN_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.SCHOOL_CHAIRMAN_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.SCHOOL_CHAIRMAN_READY);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolChairmanAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String schoolChairmanAuditId = medicalAid.getSchoolChairmanAuditId();
dao.delete(Audit.class, schoolChairmanAuditId);
Chain chain = Chain.make("schoolChairmanAuditId", null);
chain.add("stateId", MedicalAuditState.SCHOOL_CHAIRMAN_READY);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param ids ids
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolChairmanAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam(name = "ids[]") String[] ids) {
dao.insert(audit);
List<MedicalAid> medicalAids = dao.query(MedicalAid.class, Cnd.where("id", "in", ids));
for (MedicalAid medicalAid : medicalAids) {
medicalAid.setSchoolChairmanAuditId(audit.getId());
List<String> schoolChairmanAuditIds = Optional.ofNullable(medicalAid.getSchoolChairmanAuditIds()).orElse(new ArrayList<>());
schoolChairmanAuditIds.add(audit.getId());
medicalAid.setSchoolChairmanAuditIds(schoolChairmanAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.FINANCIAL_CASHIER_READY);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.SCHOOL_CHAIRMAN_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.SCHOOL_CHAIRMAN_BACK_MODIFY);
}
}
dao.updateIgnoreNull(medicalAids);
return AjaxResult.success();
}
}
@@ -0,0 +1,175 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.api.domain.medical.MedicalAidDiseaseType;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
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;
import java.util.Optional;
/**
* 校医院审核
*
* @author jug
* @date 2023/02/21
*/
@RestController
@RequestMapping("/medicalAid/schoolHospitalAudit")
public class MedicalAidSchoolHospitalAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:schoolHospitalAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.unionName,
m.unitName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
cnd.andEX("m.unionId", "=", pageForm.getUnionId());
cnd.andEX("m.unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.SCHOOL_HOSPITAL_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.SCHOOL_HOSPITAL_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.SCHOOL_HOSPITAL_READY);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolHospitalAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String schoolHospitalAuditId = medicalAid.getSchoolHospitalAuditId();
dao.delete(Audit.class, schoolHospitalAuditId);
Chain chain = Chain.make("schoolHospitalAuditId", null);
chain.add("stateId", MedicalAuditState.SCHOOL_HOSPITAL_READY);
chain.add("diseaseTypeCode", null);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param id id
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolHospitalAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam String id, @RequestParam String diseaseTypeCode) {
dao.insert(audit);
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
medicalAid.setSchoolHospitalAuditId(audit.getId());
medicalAid.setDiseaseTypeId(diseaseTypeCode);
List<String> schoolHospitalAuditIds = Optional.ofNullable(medicalAid.getSchoolHospitalAuditIds()).orElse(new ArrayList<>());
schoolHospitalAuditIds.add(audit.getId());
medicalAid.setSchoolHospitalAuditIds(schoolHospitalAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.SCHOOL_ACCOUNTING_READY);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.SCHOOL_HOSPITAL_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.SCHOOL_HOSPITAL_BACK_MODIFY);
}
dao.updateIgnoreNull(medicalAid);
return AjaxResult.success();
}
/**
* 疾病类型
*
* @return {@link AjaxResult}
*/
@RequestMapping("diseaseTypes")
@RequiresPermissions("medical:schoolHospitalAudit")
public AjaxResult diseaseTypes() {
List<MedicalAidDiseaseType> list = dao.query(MedicalAidDiseaseType.class, Cnd.NEW().asc("typeCode"));
return AjaxResult.success(list);
}
/**
* 编辑疾病类型
*
* @return {@link AjaxResult}
*/
@RequestMapping("doEditMedicalType")
@RequiresPermissions("medical:schoolHospitalAudit")
public AjaxResult doEditMedicalType(@RequestBody MedicalAid medicalAid) {
dao.update(medicalAid, "diseaseTypeId");
return AjaxResult.success();
}
}
@@ -0,0 +1,147 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
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;
import java.util.Optional;
/**
* 工会副主席审核
*
* @author jug
* @date 2023/02/21
*/
@RestController
@RequestMapping("/medicalAid/schoolViceChairmanAudit")
public class MedicalAidSchoolViceChairmanAuditController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link AjaxResult}
*/
@RequestMapping("pageData")
@RequiresPermissions("medical:schoolViceChairmanAudit")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.unionName,
m.unitName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
state.stateName,
t.typeName as diseaseTypeName
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
cnd.andEX("m.unionId", "=", pageForm.getUnionId());
cnd.andEX("m.unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (pageForm.getIsAudit() == null) {
cnd.and("m.stateId", ">=", MedicalAuditState.SCHOOL_VICE_CHAIRMAN_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("m.stateId", ">", MedicalAuditState.SCHOOL_VICE_CHAIRMAN_READY);
} else {
cnd.and("m.stateId", "=", MedicalAuditState.SCHOOL_VICE_CHAIRMAN_READY);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
/**
* 做撤销
*
* @param id id
* @return {@link AjaxResult}
*/
@RequestMapping("doRevoke")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolViceChairmanAudit")
public AjaxResult doRevoke(@RequestParam String id) {
MedicalAid medicalAid = dao.fetch(MedicalAid.class, id);
String schoolViceChairmanAuditId = medicalAid.getSchoolViceChairmanAuditId();
dao.delete(Audit.class, schoolViceChairmanAuditId);
Chain chain = Chain.make("schoolViceChairmanAuditId", null);
chain.add("stateId", MedicalAuditState.SCHOOL_VICE_CHAIRMAN_READY);
dao.update(MedicalAid.class, chain, Cnd.where("id", "=", id));
return AjaxResult.success();
}
/**
* 做审核
*
* @param audit 审计
* @param ids ids
* @return {@link AjaxResult}
*/
@PostMapping("/doSubmit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("medical:schoolViceChairmanAudit")
public AjaxResult doSubmit(@RequestBody Audit audit, @RequestParam(name = "ids[]") String[] ids) {
dao.insert(audit);
List<MedicalAid> medicalAids = dao.query(MedicalAid.class, Cnd.where("id", "in", ids));
for (MedicalAid medicalAid : medicalAids) {
medicalAid.setSchoolViceChairmanAuditId(audit.getId());
List<String> schoolViceChairmanAuditIds = Optional.ofNullable(medicalAid.getSchoolViceChairmanAuditIds()).orElse(new ArrayList<>());
schoolViceChairmanAuditIds.add(audit.getId());
medicalAid.setSchoolViceChairmanAuditIds(schoolViceChairmanAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> medicalAid.setStateId(MedicalAuditState.SCHOOL_CHAIRMAN_READY);
case AuditConstants.REJECT -> medicalAid.setStateId(MedicalAuditState.SCHOOL_VICE_CHAIRMAN_REJECTED);
case AuditConstants.BACK -> medicalAid.setStateId(MedicalAuditState.SCHOOL_VICE_CHAIRMAN_BACK_MODIFY);
}
}
dao.updateIgnoreNull(medicalAids);
return AjaxResult.success();
}
}
@@ -0,0 +1,88 @@
package com.ruoyi.additional.controller.medical;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.api.domain.medical.MedicalAid;
import com.ruoyi.additional.service.medical.MedicalAidSeriousApplyService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.RemoteConfigService;
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.Date;
@RestController
@RequestMapping("/medicalAid/seriousApply")
@Slf4j
public class MedicalAidSeriousApplyController {
@Autowired
private MedicalAidSeriousApplyService seriousApplyService;
@Autowired
private RemoteConfigService remoteConfigService;
@Autowired
private Dao dao;
@RequestMapping("pageData")
@RequiresPermissions("medical:seriousApply")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Pagination pagination = seriousApplyService.pageData(pageForm);
return AjaxResult.success(pagination);
}
@RequestMapping("/doSubmit")
@RequiresPermissions("medical:seriousApply")
public AjaxResult doSubmit(@RequestParam String id) {
String retirementOfficeDeptId = remoteConfigService.selectConfigByKey("sys.retirementOfficeDeptId").getMsg();
MedicalAid medicalAid = seriousApplyService.fetch(id);
if (medicalAid.getUnitId().equals(retirementOfficeDeptId)) {
medicalAid.setStateId(MedicalAuditState.RETIRED_READY);
} else {
medicalAid.setStateId(MedicalAuditState.BRANCH_UNION_READY);
}
medicalAid.setApplyTime(new Date());
dao.update(medicalAid, "stateId|applyTime");
return AjaxResult.success();
}
@RequestMapping("/findOne")
@RequiresPermissions("medical:seriousApply")
public AjaxResult findOne(@RequestParam String id) {
MedicalAid medicalAid = seriousApplyService.fetch(id);
return AjaxResult.success(medicalAid);
}
@PostMapping("exportSerious")
@RequiresPermissions("medical:seriousApply")
public void exportOrdinary(@RequestParam String id, HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream();
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/medical/seriousApply.docx");
) {
NutMap renderMap = seriousApplyService.exportSeriousData(id);
String userName = renderMap.getString("userName");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(userName + "-重大疾病医疗互助补助金审批表.docx", StandardCharsets.UTF_8)));
Configure config = Configure.builder().build();
assert inputStream != null;
XWPFTemplate.compile(inputStream, config).render(renderMap, outputStream);
} catch (Exception e) {
log.error(e.getMessage());
}
}
}
@@ -0,0 +1,88 @@
package com.ruoyi.additional.controller.medical;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.medical.MedicalAuditState;
import com.ruoyi.additional.api.constant.medical.MedicalPageForm;
import com.ruoyi.additional.service.medical.MedicalAidOrdinaryApplyService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 补助汇总
*
* @author jug
* @date 2023/02/22
*/
@RestController
@RequestMapping("/medicalAid/subsidySummary")
public class MedicalAidSubsidySummaryController {
@Autowired
private MedicalAidOrdinaryApplyService ordinaryApplyService;
@Autowired
private Dao dao;
@RequestMapping("pageData")
@RequiresPermissions("medical:subsidySummary")
public AjaxResult pageData(@RequestBody MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.loginName,
m.userName,
m.unionName,
m.unitName,
m.applyTime,
m.diseaseDiagnosis,
m.hospital,
m.diseaseTypeId,
m.type,
m.stateId,
m.ordinarySubsidiesAmount,
m.seriousSubsidiesAmount,
state.stateName,
t.typeName as diseaseTypeName,
DATE_FORMAT(a.auditTime,'%Y-%m-%d') as reimbursementDate
FROM
medical_aid m
LEFT JOIN audit_state state ON state.stateId = m.stateId
LEFT JOIN medical_aid_disease_type t on t.id = m.diseaseTypeId
LEFT JOIN audit a on a.id = m.financialCashierAuditId
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin")) {
cnd.and("m.unionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("m.type", "=", pageForm.getType());
cnd.andEX("m.year", "=", pageForm.getYear());
cnd.and("m.stateId", "=", MedicalAuditState.PASS);
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("m.userName", pageForm.getSearchKeyword());
seg.orLike("m.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.desc("m.applyTime");
sql.setCondition(cnd);
Pagination pagination = ordinaryApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
}
@@ -0,0 +1,103 @@
package com.ruoyi.additional.controller.meeting;
import com.ruoyi.additional.api.domain.meeting.MeetingInfo;
import com.ruoyi.additional.api.domain.meeting.MeetingUser;
import com.ruoyi.additional.api.domain.msgNotify.MsgNotify;
import com.ruoyi.additional.service.meeting.MeetingManageService;
import com.ruoyi.additional.service.msgNotify.MsgNotifyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/16
* @Description
*/
@RestController
@RequestMapping("/meeting/meetingManage")
public class MeetingManageController {
@Autowired
private Dao dao;
@Autowired
private MeetingManageService meetingManageService;
@Autowired
private MsgNotifyService msgNotifyService;
@PostMapping("pageData")
@RequiresPermissions("additional:meeting:meetingManage")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "year", required = false) Integer year,
@RequestParam(name = "typeId", required = false) String typeId) {
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(info.startTime)", "=", year);
cnd.andEX("info.typeId", "=", typeId);
Pagination pagination = meetingManageService.pageData(pageForm, cnd);
return AjaxResult.success(pagination);
}
@PostMapping("doAdd")
@RequiresPermissions("additional:meeting:meetingManage")
public AjaxResult doAdd(@RequestBody MeetingInfo meetingInfo,
@RequestParam(name = "type") String type,
@RequestParam(name = "sendTypes[]", required = false) List<String> sendTypes) {
MsgNotify msgNotify = meetingInfo.getMsgNotify();
msgNotify.setType(type);
msgNotify.setSendTypes(sendTypes);
NutMap nutMap = msgNotifyService.doSubmit(msgNotify, false, meetingInfo.getMsgNotify().getUsers());
meetingInfo.setNotifyId(nutMap.getString("id"));
List<String> userIdList = nutMap.getList("userIdList", String.class);
List<MeetingUser> meetingUserList = new ArrayList<>();
for (String id : userIdList) {
MeetingUser meetingUser = new MeetingUser();
meetingUser.setUserId(id);
meetingUserList.add(meetingUser);
}
meetingInfo.setMeetingUserList(meetingUserList);
meetingManageService.doAdd(meetingInfo);
return AjaxResult.success();
}
@PostMapping("doEdit")
@RequiresPermissions("additional:meeting:meetingManage")
public AjaxResult doEdit(@RequestBody MeetingInfo meetingInfo,
@RequestParam(name = "type") String type,
@RequestParam(name = "sendTypes[]", required = false) List<String> sendTypes) {
MsgNotify notify = meetingInfo.getMsgNotify();
notify.setType(type);
notify.setSendTypes(sendTypes);
NutMap msgMap = msgNotifyService.doSubmit(notify, false, meetingInfo.getMsgNotify().getUsers());
List<String> userIdList = msgMap.getList("userIdList", String.class);
meetingManageService.doEdit(meetingInfo, userIdList);
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
public AjaxResult findOne(@PathVariable String id) {
MeetingInfo meetingInfo = dao.fetchLinks(dao.fetch(MeetingInfo.class, id), "^meetingTimePeriods$", Cnd.NEW().asc("startTime"));
return AjaxResult.success(meetingInfo);
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("additional:meeting:meetingManage")
public AjaxResult doDelete(@PathVariable String id) {
meetingManageService.doDelete(id);
return AjaxResult.success();
}
}
@@ -0,0 +1,106 @@
package com.ruoyi.additional.controller.meeting;
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.additional.api.domain.meeting.MeetingInfo;
import com.ruoyi.additional.api.domain.meeting.MeetingTimePeriod;
import com.ruoyi.additional.service.meeting.MeetingOnlineService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Author JyuHsin
* @Date 2023/2/17
* @Description
*/
@RestController
@RequestMapping("/meeting/meetingOnline")
public class MeetingOnlineController {
@Autowired
private Dao dao;
@Autowired
private MeetingOnlineService meetingOnlineService;
@PostMapping("pageData")
@RequiresPermissions("additional:meeting:meetingOnline")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "year", required = false) Integer year,
@RequestParam(name = "typeId", required = false) String typeId) {
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(info.startTime)", "=", year);
cnd.andEX("info.typeId", "=", typeId);
Pagination pagination = meetingOnlineService.pageData(pageForm, cnd);
return AjaxResult.success(pagination);
}
@PostMapping("exportSignature/{timePeriodId}")
@RequiresPermissions("additional:meeting:meetingOnline")
public void exportSignature(@PathVariable String timePeriodId, HttpServletResponse response) throws IOException {
MeetingTimePeriod timePeriod = dao.fetch(MeetingTimePeriod.class, timePeriodId);
MeetingInfo meetingInfo = dao.fetch(MeetingInfo.class, timePeriod.getMeetingId());
String fileName = meetingInfo.getMeetingName() + "(" + timePeriod.getTimePeriodName() + ")签字表";
List<ExcelExportEntity> entityArrayList = new ArrayList<>();
entityArrayList.add(new ExcelExportEntity("姓名", "username", 20));
entityArrayList.add(new ExcelExportEntity("工号", "loginname", 20));
entityArrayList.add(new ExcelExportEntity("单位", "unitname", 20));
entityArrayList.add(new ExcelExportEntity("分工会", "unionname", 20));
entityArrayList.add(new ExcelExportEntity("签字", "", 20));
ExportParams exportParams = new ExportParams();
exportParams.setTitle(timePeriod.getTimePeriodName() + "签字表");
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityArrayList, meetingOnlineService.exportSignature(timePeriodId));
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8)));
workbook.write(response.getOutputStream());
workbook.close();
}
@GetMapping("getRealTimeData/{timePeriodId}")
@RequiresPermissions("additional:meeting:meetingOnline")
public AjaxResult getRealTimeData(@PathVariable String timePeriodId) {
List<NutMap> signInUser = meetingOnlineService.getSignInUser(timePeriodId);
List<Map<String, Object>> countData = meetingOnlineService.getRealTimeData(timePeriodId);
return AjaxResult.success(Map.of("countData", countData, "userData", signInUser));
}
@GetMapping("generateQrCodeUrl")
@RequiresPermissions("additional:meeting:meetingOnline")
public AjaxResult generateQrCodeUrl(String tpId, String meetingId) {
StringBuilder redirect = new StringBuilder();
redirect.append("https://zhgh.neu.edu.cn/h5/#/pages/index?path=");
StringBuilder busUrl = new StringBuilder();
busUrl.append("/pages/meeting/signIn");
busUrl.append("?a=1");
busUrl.append("&");
busUrl.append("mtpId=").append(tpId);
busUrl.append("&");
busUrl.append("meetingId=").append(meetingId);
redirect.append(URLEncoder.encode(busUrl.toString(), Charset.defaultCharset()));
return AjaxResult.success(redirect);
}
}
@@ -0,0 +1,107 @@
package com.ruoyi.additional.controller.meeting;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.export.ExcelExportService;
import com.ruoyi.additional.service.meeting.MeetingStatisticsService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
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.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @Author JyuHsin
* @Date 2023/2/17
* @Description
*/
@RestController
@RequestMapping("/meeting/meetingStatistics")
public class MeetingStatisticsController {
@Autowired
private Dao dao;
@Autowired
private MeetingStatisticsService meetingStatisticsService;
@PostMapping("pageData")
@RequiresPermissions("additional:meeting:meetingStatistics")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "meetingId", required = false) String meetingId,
@RequestParam(name = "meetingTime[]", required = false) String[] meetingTime,
@RequestParam(name = "typeId", required = false) String typeId) {
Pagination pagination = meetingStatisticsService.pageData(pageForm, meetingId, meetingTime, typeId);
return AjaxResult.success(pagination);
}
@GetMapping("getSignUserNum")
@RequiresPermissions("additional:meeting:meetingStatistics")
public AjaxResult getSignUserNum(int val) {
Random random = new Random();
return AjaxResult.success(val + random.nextInt(2) + 1);
}
@GetMapping("getMeetingList")
@RequiresPermissions("additional:meeting:meetingStatistics")
public AjaxResult getMeetingList(@RequestParam(name = "meetingTime[]", required = false) String[] meetingTime) {
Object meetingList = meetingStatisticsService.getMeetingList(meetingTime);
return AjaxResult.success(meetingList);
}
@PostMapping("getUserData")
@RequiresPermissions("additional:meeting:meetingStatistics")
public AjaxResult getUserData(@RequestBody PageForm pageForm,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "meetingId", required = false) String meetingId,
@RequestParam(name = "type", required = false) String type,
@RequestParam(name = "unitId", required = false) String unitId,
@RequestParam(name = "unionId", required = false) String unionId) {
Pagination userData = meetingStatisticsService.getUserData(pageForm, id, meetingId, type, unitId, unionId);
return AjaxResult.success(userData);
}
@RequestMapping("exportUser")
@RequiresPermissions("additional:meeting:meetingStatistics")
public void exportUser(String id, String meetingId, HttpServletResponse response) throws IOException {
List<ExcelExportEntity> entityList = new ArrayList<>();
entityList.add(new ExcelExportEntity("姓名", "userName", 20));
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
entityList.add(new ExcelExportEntity("单位", "unitName", 30));
entityList.add(new ExcelExportEntity("分工会", "unionName", 35));
Workbook workbook = new XSSFWorkbook();
String[] arr = {"应到人数", "实到人数", "请假人数", "未到人数"};
for (String a : arr) {
List<NutMap> userData = meetingStatisticsService.getUserData(id, meetingId, a);
ExcelExportService service = new ExcelExportService();
ExportParams exportParams = new ExportParams();
exportParams.setTitle(a);
exportParams.setSheetName(a);
exportParams.setType(ExcelType.XSSF);
service.createSheetForMap(workbook, exportParams, entityList, userData);
}
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=%s".formatted(URLEncoder.encode("人员列表.xlsx", StandardCharsets.UTF_8)));
ServletOutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.close();
}
}
@@ -0,0 +1,86 @@
package com.ruoyi.additional.controller.meeting;
import com.ruoyi.additional.api.domain.AuditState;
import com.ruoyi.additional.api.domain.meeting.MeetingType;
import com.ruoyi.additional.service.meeting.MeetingTypeService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/16
* @Description
*/
@RestController
@RequestMapping("/meeting/meetingType")
public class MeetingTypeController {
@Autowired
private Dao dao;
@Autowired
private MeetingTypeService meetingTypeService;
@GetMapping("findAll")
public AjaxResult findAll() {
List<MeetingType> typeList = dao.query(MeetingType.class, Cnd.NEW().asc("sortNum"));
dao.fetchLinks(typeList, "^auditStateList$");
for (MeetingType meetingType : typeList) {
meetingType.setAuditStateList(dao.query(AuditState.class, Cnd.where("typeId", "=", meetingType.getId()).and("module", "=", meetingType.getModuleName())));
List<AuditState> auditStateList = meetingType.getAuditStateList();
dao.fetchLinks(auditStateList, "^auditStateUserList$");
}
return AjaxResult.success(typeList);
}
@PostMapping("doHandle")
@RequiresPermissions("additional:meeting:meetingType")
public AjaxResult doHandle(@RequestBody MeetingType meetingType) {
if (null == meetingType.getId()) {
int typeCount = dao.count(MeetingType.class, Cnd.where("moduleName", "=", meetingType.getModuleName()));
int count = dao.count(AuditState.class, Cnd.where("module", "=", meetingType.getModuleName()));
if (typeCount > 0 || count > 0) {
return AjaxResult.error("模块名称已存在,换一个试试");
}
meetingTypeService.add(meetingType);
} else {
meetingTypeService.edit(meetingType);
}
return AjaxResult.success();
}
@PostMapping("delete/{id}")
@RequiresPermissions("additional:meeting:meetingType")
public AjaxResult delete(@PathVariable Integer id) {
MeetingType meetingType = dao.fetch(MeetingType.class, id);
dao.clear(AuditState.class, Cnd.where("module", "=", meetingType.getModuleName()));
dao.clear(MeetingType.class, Cnd.where("id", "=", id));
return AjaxResult.success();
}
@GetMapping("findMaxStateId")
@RequiresPermissions("additional:meeting:meetingType")
public AjaxResult findMaxStateId() {
return AjaxResult.success(meetingTypeService.findMaxStateId());
}
@RequestMapping("checkStateId")
@RequiresPermissions("additional:meeting:meetingType")
public AjaxResult checkStateId(@RequestParam("stateId") Integer stateId, @RequestParam("stateIndex") Integer stateIndex) {
if (stateId == null) {
return AjaxResult.error("参数错误!");
}
int count = dao.count(AuditState.class, Cnd.where("stateId", "=", stateId));
if (count == 0) {
return AjaxResult.success(stateId);
} else {
return AjaxResult.success(meetingTypeService.findMaxStateId() + 10 * stateIndex);
}
}
}
@@ -0,0 +1,56 @@
package com.ruoyi.additional.controller.meeting.mobile;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.service.meeting.MMeetingAuditService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import org.apache.commons.lang3.StringUtils;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author JyuHsin
* @Date 2023/2/22
* @Description
*/
@RestController
@RequestMapping("/mobile/meetingAudit")
public class MMeetingAuditController {
@Autowired
private Dao dao;
@Autowired
private MMeetingAuditService meetingAuditService;
@PostMapping("pageData")
@RequiresLogin
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "typeId", required = false) String typeId,
@RequestParam(name = "meetingTime", required = false) Integer meetingTime) {
Pagination pagination = meetingAuditService.myMeetingPageData(pageForm.getPageNumber(), pageForm.getPageSize(), pageForm.getSearchKeyword(), typeId, meetingTime);
return AjaxResult.success(pagination);
}
@GetMapping("getLeaveUser")
@RequiresLogin
public AjaxResult getLeaveUser(String meetingId, String typeId, String auditType) {
if (StringUtils.isBlank(meetingId)) {
return AjaxResult.warn("参数为空");
}
return AjaxResult.success(meetingAuditService.getLeaveUser(meetingId, typeId, auditType));
}
@PostMapping("audit")
@RequiresLogin
public AjaxResult audit(@RequestBody Audit audit,
@RequestParam(name = "idList[]", required = false) String[] idList,
@RequestParam(name = "isPass", required = false) Boolean isPass) {
meetingAuditService.audit(idList, audit, isPass);
return AjaxResult.success();
}
}
@@ -0,0 +1,154 @@
package com.ruoyi.additional.controller.meeting.mobile;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.domain.meeting.MeetingInfo;
import com.ruoyi.additional.api.domain.meeting.MeetingTimePeriodUser;
import com.ruoyi.additional.service.meeting.MMeetingMineService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.Lang;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @Author JyuHsin
* @Date 2023/2/22
* @Description
*/
@RestController
@RequestMapping("/mobile/myMeeting")
public class MMeetingMineController {
@Autowired
private MMeetingMineService meetingMineService;
@Autowired
private Dao dao;
@PostMapping("pageData")
@RequiresLogin
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "typeId", required = false) String typeId,
@RequestParam(name = "meetingTime", required = false) Integer meetingTime,
@RequestParam(name = "tabNameIndex", required = false) Integer tabNameIndex) {
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(typeId)) {
cnd.andEX("info.typeId", "=", typeId);
}
if (meetingTime != null) {
if (meetingTime == 0) {
cnd.andEX("info.startTime", ">=", DateUtils.getTime());
} else {
cnd.andEX("info.startTime", "<", DateUtils.getTime());
}
}
switch (tabNameIndex) {
case 1 -> cnd.and("mu.isJoin", "is", null);
case 2 -> cnd.and("mu.isJoin", "=", 0);
default -> {
}
}
Pagination pagination = meetingMineService.myMeetingPageData(pageForm, cnd);
return AjaxResult.success(pagination);
}
@GetMapping("findMyMeetPeriod")
@RequiresLogin
public AjaxResult findMyMeetPeriod(@RequestParam(name = "meetingId", required = false) String meetingId) {
if (StrUtil.isBlank(meetingId)) {
return AjaxResult.warn("参数错误");
}
return AjaxResult.success(meetingMineService.findMyMeetPeriod(meetingId));
}
@PostMapping("askForLeave")
@RequiresLogin
public AjaxResult askForLeave(@RequestBody List<MeetingTimePeriodUser> meetingTimePeriod,
@RequestParam(name = "meetingId", required = false) String meetingId) {
//先清空,因为可能会涉及到修改
org.nutz.dao.Chain clearChain = Chain.make("isJoin", null);
clearChain.add("stateCode", null);
clearChain.add("leaveReason", "");
Cnd clearCnd = Cnd.where("meetingId", "=", meetingId)
.and("userId", "=", SecurityUtils.getUserId())
.and("auditIdList", "is", null);
dao.update(MeetingTimePeriodUser.class, clearChain, clearCnd);
if (Lang.isEmpty(meetingTimePeriod)) {
return AjaxResult.success();
}
meetingMineService.askForLeave(meetingTimePeriod);
return AjaxResult.success();
}
@PostMapping("confirmMeeting")
@RequiresLogin
public AjaxResult confirmMeeting(@RequestBody List<String> tpuIds) {
meetingMineService.confirmMeeting(tpuIds);
return AjaxResult.success();
}
@GetMapping("getMeetingInfo")
@RequiresLogin
public AjaxResult getMeetingInfo(@RequestParam(name = "meetingId", required = false) String meetingId,
@RequestParam(name = "mtpId", required = false) String mtpId) {
MeetingInfo meetingInfo = dao.fetch(MeetingInfo.class, meetingId);
dao.fetchLinks(meetingInfo, "meetingTimePeriods", Cnd.NEW().asc("startTime"));
Cnd cnd = Cnd.NEW();
cnd.and("meetingTimePeriodId", "=", mtpId);
cnd.and("userId", "=", SecurityUtils.getUserId());
MeetingTimePeriodUser mtPu = dao.fetch(MeetingTimePeriodUser.class, cnd);
if (Lang.isEmpty(meetingInfo)) {
return AjaxResult.warn("参数错误");
}
if (Lang.isEmpty(mtPu)) {
return AjaxResult.warn("你不是当前会议人员");
}
return AjaxResult.success(Map.of("meetingInfo", meetingInfo, "signInfo", mtPu));
}
@PostMapping("signIn")
@RequiresLogin
public AjaxResult signIn(String mtpId) {
if (StrUtil.isBlank(mtpId)) {
return AjaxResult.warn("参数错误");
}
Cnd cnd = Cnd.NEW();
cnd.and("meetingTimePeriodId", "=", mtpId);
cnd.and("userId", "=", SecurityUtils.getUserId());
MeetingTimePeriodUser mtpu = dao.fetch(MeetingTimePeriodUser.class, cnd);
if (Lang.isEmpty(mtpu)) {
return AjaxResult.warn("参数错误");
}
if (Lang.isNotEmpty(mtpu.getIsJoin()) && !mtpu.getIsJoin()) {
return AjaxResult.warn("您已请假,不能签到喔");
}
if (Lang.isNotEmpty(mtpu.getIsSignIn()) && mtpu.getIsSignIn()) {
return AjaxResult.warn("您已签到,不要重复签到喔");
}
meetingMineService.signIn(mtpu);
return AjaxResult.success("签到成功");
}
@PostMapping("cancelLeave")
@RequiresLogin
public AjaxResult cancelLeave(String id) {
dao.update(MeetingTimePeriodUser.class, Chain.make("isJoin", null).add("leaveReason", null).add("stateCode", null)
, Cnd.where("id", "=", id));
return AjaxResult.success();
}
}
@@ -0,0 +1,196 @@
package com.ruoyi.additional.controller.msgNotify;
import cn.hutool.core.date.DateUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.domain.msgNotify.MsgNotify;
import com.ruoyi.additional.api.domain.msgNotify.MsgNotifyUser;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.msgNotify.MsgNotifyService;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.jdh.api.domain.db.Jdh_db;
import com.ruoyi.system.api.RemoteUserRoleService;
import com.ruoyi.system.api.RemoteUserService;
import com.ruoyi.system.api.domain.SmsDTO;
import com.ruoyi.system.api.domain.SysUnion;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.model.FeignCnd;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.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;
import java.util.stream.Collectors;
/**
* TODO
* 新建消息
*
* @Author zhf
* @Date 2023/2/13 9:48
*/
@RestController
@RequestMapping("/msgNotify/send")
public class MsgNotifyController {
@Autowired
private MsgNotifyService msgNotifyService;
@Autowired
private RemoteUserRoleService remoteUserRoleService;
@Autowired
private RemoteUserService remoteUserService;
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, name = "users[]") List<String> users) {
Sql sql = Sqls.create("""
SELECT
userId,
userName,
loginName,
deptId unitId,
deptName unitName,
mobile,
unionName
from user
$condition
""");
Cnd cnd = Cnd.NEW();
//cnd.andEX("member", "=", 1);
if (Lang.isNotEmpty(users)) {
cnd.and("userId", "in", users);
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
sql.setCondition(cnd);
return AjaxResult.success(msgNotifyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@PostMapping("/getUserByRoleId")
public AjaxResult getUserByRoleId(@RequestParam(required = false, name = "roleIds[]") List<Long> roleIds,
@RequestParam(required = false, value = "teacherMeetingId") String teacherMeetingId,
@RequestBody PageForm PageForm) {
List<FeignCnd> cndList = new ArrayList<>();
if (Lang.isNotEmpty(roleIds)) {
cndList.add(new FeignCnd("role_id", "in", roleIds));
if (roleIds.stream().anyMatch(r -> r == 104)) {
cndList.add(new FeignCnd("jdhid", "=", teacherMeetingId));
DynamicDataSourceContextHolder.push("jdh");
List<Jdh_db> dbs = msgNotifyService.dao().query(Jdh_db.class, Cnd.NEW().andEX("jdhid", "=", teacherMeetingId));
DynamicDataSourceContextHolder.clear();
if(Lang.isNotEmpty(dbs)) {
List<Long> list = dbs.stream().map(Jdh_db::getDbid).collect(Collectors.toList());
cndList.add(new FeignCnd("user_id", "in", list));
}
}
}
List<SysUserRole> userRoles = remoteUserRoleService.getUserRole(cndList).getData();
List<Long> userIdList = userRoles.stream().map(SysUserRole::getUserId).distinct().collect(Collectors.toList());
Sql sql = Sqls.create("""
SELECT
userId,
userName,
loginName,
deptId unitId,
deptName unitName,
mobile,
unionName
from user
$condition
""");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(PageForm.getSearchName()) && Strings.isNotBlank(PageForm.getSearchKeyword())) {
cnd.where().andLike(PageForm.getSearchName(), PageForm.getSearchKeyword());
}
cnd.and("userId", "in", userIdList);
sql.setCondition(cnd);
return AjaxResult.success(msgNotifyService.listPageMap(PageForm.getPageNumber(), PageForm.getPageSize(), sql));
}
@GetMapping("/findOne")
public AjaxResult findOne(String id) {
return AjaxResult.success(msgNotifyService.fetch(id));
}
@PostMapping("/getUsersByTitleId")
public Object getUsersByTitleId(@RequestBody PageForm pageForm,
@RequestParam String id,
@RequestParam(required = false, value = "type") String type) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
u.userId,
u.userName,
u.loginName,
u.deptId unitId,
u.deptName unitName,
u.mobile,
u.unionName
FROM
msg_notify_user mnu
LEFT JOIN `user` u ON u.userid = mnu.userid
$condition
""");
cnd.and("mnu.titleId", "=", id);
sql.setCondition(cnd);
if (!type.equals("user")) {
return msgNotifyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
} else {
return msgNotifyService.listMap(sql);
}
}
@PostMapping("/doSubmit")
public AjaxResult doSubmit(@RequestBody MsgNotify msgNotify,
@RequestParam boolean flag) {
try {
NutMap map = msgNotifyService.doSubmit(msgNotify, flag, msgNotify.getUsers());
//如果是true发送短信
if (flag) {
String id = map.getString("id");
msgNotify = msgNotifyService.fetch(id);
List<String> loginNames = map.getAsList("loginNames", String.class);
SmsDTO smsDTO = new SmsDTO();
smsDTO.setLoginNames(loginNames);
smsDTO.setSms_info(msgNotify.getContent());
// R r = remoteUserService.sendSms(loginNames, new ArrayList<>(), msgNotify.getContent());
R r = remoteUserService.sendSms(smsDTO, SecurityConstants.INNER);
if (R.isError(r)) {
msgNotify.setHold(false);
msgNotifyService.update(msgNotify);
return AjaxResult.error(r.getMsg());
}
msgNotify.setSendTime(DateUtil.now());
msgNotifyService.update(msgNotify);
return AjaxResult.success();
}
return AjaxResult.success();
}catch (Exception e){
return AjaxResult.error(e.getMessage());
}
}
}
@@ -0,0 +1,104 @@
package com.ruoyi.additional.controller.msgNotify;
import com.ruoyi.additional.service.msgNotify.MsgNotifyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/13 9:49
*/
@RestController
@RequestMapping("/msgNotify/sendList")
public class MsgNotifyListController {
@Autowired
private MsgNotifyService msgNotifyService;
@PostMapping("/pageData")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, value = "titleId") String titleId,
@RequestParam(required = false, name = "dateRange[]") List<String> dateRange,
@RequestParam(required = false, value = "unitId") String unitId,
@RequestParam(required = false, value = "unionId") String unionId,
@RequestParam(required = false, name = "sendTypes[]") List<String> sendTypes) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
u.userName,
u.loginName,
u.unionName,
u.deptName,
mnu.*,
mn.title,
mn.activityGroupId,
mn.module,
mn.teacherMeetingId,
mn.type,
mn.roleIds,
mn.sendTypes,
mn.content,
mn.sendTime,
mn.hold
FROM
`msg_notify_user` mnu
LEFT JOIN `user` u ON u.userId = mnu.userId
LEFT JOIN msg_notify mn ON mn.id = mnu.titleId
$condition
""");
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("u.deptId", "=", unitId);
cnd.andEX("mn.hold", "=", 1);
cnd.andEX("mn.id", "=", titleId);
if (!AuthUtil.hasRole("admin")) {
cnd.and("mnu.userId", "=", SecurityUtils.getUserId());
}
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
if (sendTypes != null && sendTypes.contains("msg")) {
cnd.and(new Static("JSON_CONTAINS(mn.sendTypes,JSON_QUOTE( 'msg' ))"));
}
if (sendTypes != null && sendTypes.contains("WeChat")) {
cnd.and(new Static("JSON_CONTAINS(mn.sendTypes,JSON_QUOTE( 'WeChat' ))"));
}
if (dateRange != null && dateRange.size() == 2) {
cnd.and("mn.sendTime", ">=", dateRange.get(0));
cnd.and("mn.sendTime", "<=", dateRange.get(1));
}
cnd.desc("mn.sendTime");
cnd.desc("u.unionCode");
sql.setCondition(cnd);
return AjaxResult.success(msgNotifyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@PostMapping("/getTitleList")
public AjaxResult getTitleList(@RequestParam(required = false, name = "dateRange[]") List<String> dateRange) {
Cnd cnd = Cnd.NEW();
if (dateRange != null && dateRange.size() == 2) {
cnd.and("CreateTime", ">=", dateRange.get(0));
cnd.and("CreateTime", "<=", dateRange.get(1));
}
return AjaxResult.success(msgNotifyService.query(cnd));
}
}
@@ -0,0 +1,86 @@
package com.ruoyi.additional.controller.msgNotify;
import com.ruoyi.additional.service.msgNotify.MsgNotifyService;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* TODO
*
* @Author zhf
* @Date 2023/2/13 9:50
*/
@RestController
@RequestMapping("/msgNotify/titleList")
public class MsgNotifyTitleController {
@Autowired
private MsgNotifyService msgNotifyService;
@PostMapping("/pageData")
@RequiresPermissions("additional:msgNotify:notifyTitle")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(required = false, name = "dateRange[]") List<String> dateRange,
@RequestParam(required = false, name = "sendTypes[]") List<String> sendTypes,
@RequestParam(required = false, value = "title") String title) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
mn.*
FROM
`msg_notify` mn $condition
""");
if (Strings.isNotBlank(title)) {
cnd.where().andLike("mn.title", title);
}
if (sendTypes != null && sendTypes.contains("msg")) {
cnd.and(new Static("JSON_CONTAINS(mn.sendTypes,JSON_QUOTE( 'msg' ))"));
}
if (sendTypes != null && sendTypes.contains("WeChat")) {
cnd.and(new Static("JSON_CONTAINS(mn.sendTypes,JSON_QUOTE( 'WeChat' ))"));
}
if (dateRange != null && dateRange.size() == 2) {
cnd.and("mn.CreateTime", ">=", dateRange.get(0));
cnd.and("mn.CreateTime", "<=", dateRange.get(1));
}
cnd.asc("mn.hold");
cnd.desc("mn.CreateTime");
sql.setCondition(cnd);
return AjaxResult.success(msgNotifyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@DeleteMapping("/doDelete")
public AjaxResult doDelete(String id) {
msgNotifyService.doDelete(id);
return AjaxResult.success();
}
@PostMapping("/doSend")
public AjaxResult doSend(@RequestParam String id,
@RequestParam(required = false, value = "content") String content,
@RequestParam(required = false, name = "sendTypes[]") List<String> sendTypes) {
R r = msgNotifyService.doSend(id, content, sendTypes);
if (R.isError(r)) {
return AjaxResult.error(r.getMsg());
}
return AjaxResult.success();
}
}
@@ -0,0 +1,139 @@
package com.ruoyi.additional.controller.offerAdvice;
import com.ruoyi.additional.api.constant.offerAdvice.OfferAdviceState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.offerAdvice.OfferAdvice;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.offerAdvice.OfferAdviceManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.proposal.api.domain.ProposalType;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/7
* @Description
*/
@RestController
@RequestMapping("/offerAdvice/offerAdviceLeaderAudit")
public class OfferAdviceLeaderAuditController {
@Autowired
private Dao dao;
@Autowired
private OfferAdviceManageService offerAdviceManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:offerAdvice:offerAdviceLeaderAudit")
public Object pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "subjectName", required = false) String subjectName,
@RequestParam(name = "year", required = false) Integer year,
@RequestParam(name = "auditState", required = false) Integer auditState) {
Sql sql = Sqls.create("""
SELECT
oa.*,
state.stateName
FROM
offer_advice oa
LEFT JOIN audit_state state ON state.stateId = oa.stateCode
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(createTime)", "=", year);
cnd.and(Cnd.likeEX("oa.subjectName", subjectName));
switch (auditState) {
case -1 -> {
cnd.and("oa.stateCode", "=", OfferAdviceState.awaitLeaderAudit);
}
case 1 -> {
cnd.and("oa.stateCode", "=", OfferAdviceState.auditPass);
}
case 0 -> {
cnd.and("oa.stateCode", ">=", OfferAdviceState.awaitLeaderAudit);
}
}
if (!AuthUtil.hasRole("admin")) {
List<NutMap> list = ProModuleDS.exec(Ds.SYSTEM, () -> {
Sql underTakeSql = Sqls.create("""
select underTakeId from sys_user_role where role_id = @leaderRoleId and user_id = @userId
""");
underTakeSql.setParam("leaderRoleId", Roles.PROPOSAL_SCHOOL_LEADER);
underTakeSql.setParam("userId", SecurityUtils.getUserId());
return offerAdviceManageService.listMap(underTakeSql);
});
if (list != null && list.size() > 0) {
List<String> takeIds = list.stream().map(o -> o.getString("underTakeId")).collect(Collectors.toList());
cnd.and("oa.undertakeUnitId", "in", takeIds);
}
}
cnd.asc("oa.stateCode");
sql.setCondition(cnd);
Pagination pagination = offerAdviceManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
//获取提案类型
List<ProposalType> proposalTypes = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.query(ProposalType.class, Cnd.NEW());
});
Map<Long, String> typeMap = proposalTypes.stream().collect(Collectors.toMap(ProposalType::getId, ProposalType::getTypeName));
list.forEach(item -> {
item.put("typeName", typeMap.get(item.getLong("typeId")));
});
pagination.setList(list);
return AjaxResult.success(pagination);
}
@PostMapping("doAudit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("additional:offerAdvice:offerAdviceLeaderAudit")
public Object doAudit(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "publicity", required = false) Boolean publicity) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setAuditTime(new Date());
audit.setUserName(SecurityUtils.getNickName());
audit.setLoginName(SecurityUtils.getUsername());
dao.insert(audit);
Chain chain = Chain.make("stateCode", OfferAdviceState.auditPass);
chain.add("leaderAuditId", audit.getId());
chain.add("publicity", publicity);
dao.update(OfferAdvice.class, chain, Cnd.where("id", "=", id));
String processUniqueId = "OFFER_ADVICE@" + id;
localProcessService.completeTask(processUniqueId, String.valueOf(OfferAdviceState.awaitLeaderAudit), "分管校领导已审核", SecurityConstants.INNER);
localProcessService.completeProcess(processUniqueId, false, SecurityConstants.INNER);
return AjaxResult.success();
}
}
@@ -0,0 +1,100 @@
package com.ruoyi.additional.controller.offerAdvice;
import cn.hutool.core.lang.Assert;
import com.ruoyi.additional.api.domain.offerAdvice.OfferAdvice;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.offerAdvice.OfferAdviceManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.proposal.api.domain.ProposalType;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.Sys_local_process_instance;
import com.ruoyi.system.api.domain.Sys_local_process_instance_task;
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;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/7
* @Description
*/
@RestController
@RequestMapping("/offerAdvice/offerAdviceMine")
public class OfferAdviceMineController {
@Autowired
private Dao dao;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@Autowired
private OfferAdviceManageService offerAdviceManageService;
@PostMapping("pageData")
@RequiresPermissions("additional:offerAdvice:offerAdviceMine")
public Object pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "subjectName", required = false) String subjectName,
@RequestParam(name = "year", required = false) Integer year) {
Sql sql = Sqls.create("""
SELECT
oa.*,
state.stateName
FROM
offer_advice oa
LEFT JOIN audit_state state ON state.stateId = oa.stateCode
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("admin, A06")) {
cnd.and("oa.createUserId", "=", SecurityUtils.getUserId());
}
cnd.andEX("YEAR(createTime)", "=", year);
cnd.and(Cnd.likeEX("oa.subjectName", subjectName));
cnd.asc("oa.stateCode");
sql.setCondition(cnd);
Pagination pagination = offerAdviceManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
//获取提案类型
List<ProposalType> proposalTypes = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.query(ProposalType.class, Cnd.NEW());
});
Map<Long, String> typeMap = proposalTypes.stream().collect(Collectors.toMap(ProposalType::getId, ProposalType::getTypeName));
list.forEach(item -> {
item.put("typeName", typeMap.get(item.getLong("typeId")));
});
pagination.setList(list);
return AjaxResult.success(pagination);
}
@PostMapping("doDelete/{id}")
@RequiresPermissions("additional:offerAdvice:offerAdviceMine")
public Object doDelete(@PathVariable String id) {
Assert.notBlank(id);
dao.clear(OfferAdvice.class, Cnd.where("id", "=", id));
ProModuleDS.exec(Ds.SYSTEM, () -> {
dao.clear(Sys_local_process_instance_task.class, Cnd.where("processInstanceId", "=", "OFFER_ADVICE@" + id));
dao.clear(Sys_local_process_instance.class, Cnd.where("processUniqueId", "=", "OFFER_ADVICE@" + id));
return null;
});
localProcessService.deleteProcessInstance("OFFER_ADVICE@" + id, SecurityConstants.INNER);
return AjaxResult.success();
}
}
@@ -0,0 +1,85 @@
package com.ruoyi.additional.controller.offerAdvice;
import com.ruoyi.additional.api.constant.offerAdvice.OfferAdviceState;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.offerAdvice.OfferAdviceManageService;
import com.ruoyi.additional.util.ProModuleDS;
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.proposal.api.domain.ProposalType;
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;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/7
* @Description
*/
@RestController
@RequestMapping("/offerAdvice/offerAdviceQuery")
public class OfferAdviceQueryController {
@Autowired
private Dao dao;
@Autowired
private OfferAdviceManageService offerAdviceManageService;
@PostMapping("pageData")
@RequiresPermissions("additional:offerAdvice:offerAdviceQuery")
public Object pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "subjectName", required = false) String subjectName,
@RequestParam(name = "year", required = false) Integer year,
@RequestParam(name = "unitId", required = false) String unitId,
@RequestParam(name = "unionId", required = false) String unionId) {
Sql sql = Sqls.create("""
SELECT
oa.*,
state.stateName,
u.deptName as unitName,
u.unionName as unionName
FROM
offer_advice oa
LEFT JOIN audit_state state ON state.stateId = oa.stateCode
LEFT JOIN `user` u on u.userId = oa.createUserId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(createTime)", "=", year);
cnd.and(Cnd.likeEX("oa.subjectName", subjectName));
cnd.andEX("oa.createUnitId", "=", unitId);
cnd.andEX("oa.createUnionId", "=", unionId);
cnd.and("oa.stateCode", "=", OfferAdviceState.auditPass);
cnd.and("oa.publicity", "=", 1);
sql.setCondition(cnd);
Pagination pagination = offerAdviceManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
//获取提案类型
List<ProposalType> proposalTypes = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.query(ProposalType.class, Cnd.NEW());
});
Map<Long, String> typeMap = proposalTypes.stream().collect(Collectors.toMap(ProposalType::getId, ProposalType::getTypeName));
list.forEach(item -> {
item.put("typeName", typeMap.get(item.getLong("typeId")));
});
pagination.setList(list);
return AjaxResult.success(pagination);
}
}
@@ -0,0 +1,183 @@
package com.ruoyi.additional.controller.offerAdvice;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.constant.offerAdvice.OfferAdviceState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.offerAdvice.OfferAdvice;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.offerAdvice.OfferAdviceManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.proposal.api.domain.ProposalType;
import com.ruoyi.proposal.api.domain.ProposalUnderTake;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.SysUserRole;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.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.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/7
* @Description
*/
@RestController
@RequestMapping("/offerAdvice/offerAdviceSchoolAudit")
public class OfferAdviceSchoolAuditController {
@Autowired
private Dao dao;
@Autowired
private OfferAdviceManageService offerAdviceManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:offerAdvice:offerAdviceSchoolAudit")
public Object pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "subjectName", required = false) String subjectName,
@RequestParam(name = "year", required = false) Integer year,
@RequestParam(name = "auditState", required = false) Integer auditState) {
Sql sql = Sqls.create("""
SELECT
oa.*,
state.stateName
FROM
offer_advice oa
LEFT JOIN audit_state state ON state.stateId = oa.stateCode
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(createTime)", "=", year);
cnd.and(Cnd.likeEX("oa.subjectName", subjectName));
switch (auditState) {
case -1 -> {
cnd.and("oa.stateCode", "=", OfferAdviceState.awaitSchoolUnionAudit);
}
case 1 -> {
cnd.and("oa.stateCode", ">", OfferAdviceState.awaitSchoolUnionAudit);
}
case 0 -> {
cnd.and("oa.stateCode", ">=", OfferAdviceState.awaitSchoolUnionAudit);
}
}
cnd.asc("oa.stateCode");
sql.setCondition(cnd);
Pagination pagination = offerAdviceManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
//获取提案类型
List<ProposalType> proposalTypes = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.query(ProposalType.class, Cnd.NEW());
});
Map<Long, String> typeMap = proposalTypes.stream().collect(Collectors.toMap(ProposalType::getId, ProposalType::getTypeName));
list.forEach(item -> {
item.put("typeName", typeMap.get(item.getLong("typeId")));
});
pagination.setList(list);
return AjaxResult.success(pagination);
}
@PostMapping("doAudit")
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("additional:offerAdvice:offerAdviceSchoolAudit")
public Object doAudit(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "undertakeUnitId", required = false) String undertakeUnitId) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setAuditTime(new Date());
audit.setUserName(SecurityUtils.getNickName());
audit.setLoginName(SecurityUtils.getUsername());
dao.insert(audit);
Chain chain = Chain.make("stateCode", OfferAdviceState.awaitLeaderAudit);
chain.add("undertakeUnitId", undertakeUnitId);
chain.add("schoolUnionAuditId", audit.getId());
dao.update(OfferAdvice.class, chain, Cnd.where("id", "=", id));
String processUniqueId = "OFFER_ADVICE@" + id;
localProcessService.completeTask(processUniqueId, String.valueOf(OfferAdviceState.awaitSchoolUnionAudit), "校工会已审核", SecurityConstants.INNER);
// 通过,下一步流程,分管校领导审核
R<List<String>> assignments = localProcessService.getAssignmentsByColumn("underTakeId", undertakeUnitId, Roles.PROPOSAL_SCHOOL_LEADER, SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(OfferAdviceState.awaitLeaderAudit),
"分管校领导审核",
loginNameList,
"/offerAdvice/offerAdviceLeaderAudit",
null,
SecurityConstants.INNER
);
return AjaxResult.success();
}
@GetMapping("getUnderTakeAndLeader")
public AjaxResult getUnderTakeAndLeader() {
//查询承办单位
List<ProposalUnderTake> proposalUnderTakes = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.query(ProposalUnderTake.class, Cnd.NEW().asc("unitCode"));
});
//从承办单位list中取id集合
List<String> underTakeIds = proposalUnderTakes.stream().map(ProposalUnderTake::getId).collect(Collectors.toList());
//查询sys_user_role表中角色为承办单位负责人
List<NutMap> userList = ProModuleDS.exec(Ds.SYSTEM, () -> {
Sql sql = Sqls.create("""
SELECT
r.*,
GROUP_CONCAT( u.userName ) as userName
FROM
sys_user_role r
LEFT JOIN `user` u ON u.userId = r.user_id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("r.role_id", "=", Roles.PROPOSAL_SCHOOL_LEADER);
cnd.and("r.underTakeId", "in", underTakeIds);
cnd.and("r.underTakeId", "is not", null);
cnd.groupBy("r.underTakeId");
sql.setCondition(cnd);
return offerAdviceManageService.listMap(sql);
});
Map<String, String> userMap = userList.stream().collect(Collectors.toMap(o -> o.getString("underTakeId"), o -> o.getString("userName")));
//循环取
List<NutMap> result = new ArrayList<>();
proposalUnderTakes.forEach(item -> {
String leadName = userMap.get(item.getId());
NutMap nutMap = Lang.obj2nutmap(item);
nutMap.put("leader", StrUtil.isNotBlank(leadName) ? leadName : "");
result.add(nutMap);
});
return AjaxResult.success(result);
}
}
@@ -0,0 +1,135 @@
package com.ruoyi.additional.controller.offerAdvice;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.offerAdvice.OfferAdviceState;
import com.ruoyi.additional.api.domain.offerAdvice.OfferAdvice;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.util.ProModuleDS;
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.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresLogin;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.proposal.api.domain.ProposalType;
import com.ruoyi.proposal.api.domain.ProposalUnderTake;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.domain.SysUnion;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @Author JyuHsin
* @Date 2023/2/7
* @Description
*/
@RestController
@RequestMapping("/offerAdvice/offerAdviceWrite")
public class OfferAdviceWriteController {
@Autowired
private Dao dao;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("doHandler")
@RequiresPermissions("additional:offerAdvice:offerAdviceWrite")
public AjaxResult doHandler(@RequestBody OfferAdvice offerAdvice) {
// 如果是被退回的流程,那就要完成被退回流程的任务
if (offerAdvice.getStateCode() != null) {
localProcessService.completeReturnTask("OFFER_ADVICE@" + offerAdvice.getId(), SecurityConstants.INNER);
}
if (offerAdvice.getIsSubmit()) {
offerAdvice.setStateCode(OfferAdviceState.awaitSchoolUnionAudit);
} else {
offerAdvice.setStateCode(OfferAdviceState.unSubmitted);
}
offerAdvice.setCreateUnitId(SecurityUtils.getDeptId());
offerAdvice.setCreateUnionId(SecurityUtils.getUnionId());
offerAdvice.setCreateUnitName(Optional.ofNullable(SecurityUtils.getDept()).map(SysDept::getDeptName).orElse(null));
offerAdvice.setCreateUnionName(Optional.ofNullable(SecurityUtils.getUnion()).map(SysUnion::getUnionName).orElse(null));
if (StrUtil.isBlank(offerAdvice.getId())) {
offerAdvice.setCreateUserId(SecurityUtils.getUserId());
offerAdvice.setCreateLoginName(SecurityUtils.getUsername());
offerAdvice.setCreateUserName(SecurityUtils.getNickName());
offerAdvice.setCreateTime(DateUtil.date());
dao.insert(offerAdvice);
} else {
dao.updateIgnoreNull(offerAdvice);
}
String processUniqueId = "OFFER_ADVICE@" + offerAdvice.getId();
localProcessService.initCreateInstance(
processUniqueId,
offerAdvice.getId(),
"[建言献策]" + offerAdvice.getCreateUserName(),
"/offerAdvice/offerAdviceMine",
null,
SecurityConstants.INNER
);
if(offerAdvice.getIsSubmit()) {
//下一步流程,校工会审核
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.SCHOOL_ADMIN, SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(OfferAdviceState.awaitSchoolUnionAudit),
"校工会审核",
loginNameList,
"/offerAdvice/offerAdviceSchoolAudit",
null,
SecurityConstants.INNER
);
}
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
@RequiresLogin
public AjaxResult findOne(@PathVariable String id) {
Assert.notBlank(id);
OfferAdvice offerAdvice = dao.fetch(OfferAdvice.class, id);
if (offerAdvice != null) {
//查询提案类型
if (offerAdvice.getTypeId() != null) {
ProposalType proposalType = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.fetch(ProposalType.class, Cnd.where("id", "=", offerAdvice.getTypeId()));
});
offerAdvice.setType(proposalType);
}
if (StrUtil.isNotBlank(offerAdvice.getUndertakeUnitId())) {
//查询承办单位
ProposalUnderTake proposalUnderTake = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.fetch(ProposalUnderTake.class, offerAdvice.getUndertakeUnitId());
});
offerAdvice.setUnderTakeInfo(proposalUnderTake);
}
}
return AjaxResult.success(dao.fetchLinks(offerAdvice, null));
}
@GetMapping("getProposalType")
public AjaxResult getProposalType() {
List<ProposalType> typeCode = ProModuleDS.exec(Ds.PROPOSAL, () -> {
return dao.query(ProposalType.class, Cnd.orderBy().asc("typeCode"));
});
return AjaxResult.success(typeCode);
}
}
@@ -0,0 +1,166 @@
package com.ruoyi.additional.controller.reimbursement;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.reimbursement.ReimbursementNew;
import com.ruoyi.additional.service.reimbursement.ReimbursementManageService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
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.Date;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/11
* @Description
*/
@RestController
@RequestMapping("/reimbursement/accountantAudit")
public class ReimbursementAccountantAuditController {
@Autowired
private Dao dao;
@Autowired
private ReimbursementManageService reimbursementManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:reimbursement:reimbursementAccountantAudit")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unitId", required = false) String unitId,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "reiItemId", required = false) String reiItemId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit) {
Cnd cnd = Cnd.NEW();
if (isAudit == null) {
cnd.and("rei.state", ">=", 140);
} else if (isAudit) {
cnd.and("rei.state", ">", 140);
} else {
cnd.and("rei.state", "=", 140);
}
if (Strings.isNotBlank(reiItemId) && "ww".equals(reiItemId)) {
cnd.and("rei.reimbursementItemId", "in", Lang.array("fyww", "zfww"));
} else {
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.andEX("YEAR ( rei.applyTime )", "=", year);
cnd.andEX("rei.unitId", "=", unitId);
cnd.andEX("rei.unionId", "=", unionId);
cnd.desc("rei.applyTime");
Pagination pagination = reimbursementManageService.pageData(cnd, pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("rollBack/{id}")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementAccountantAudit")
public AjaxResult rollBack(@PathVariable String id) {
String processUniqueId = "REIMBURSEMENT_APPLY@" + id;
reimbursementManageService.update(Chain.make("state", ReimbursementState.ACCOUNTANT_READY), Cnd.where("id", "=", id));
localProcessService.revokeTask(processUniqueId, String.valueOf(ReimbursementState.ACCOUNTANT_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementAccountantAudit")
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
ReimbursementNew reimbursementNew = dao.fetch(ReimbursementNew.class, id);
if (pass == 1) {
taskNodeName = "校工会会计审核审核拒绝";
reimbursementNew.setState(ReimbursementState.ACCOUNTANT_REJECTED);
} else if (pass == 2) {
taskNodeName = "校工会会计审核退回修改";
reimbursementNew.setState(ReimbursementState.ACCOUNTANT_BACK_MODIFY);
} else {
taskNodeName = "待校工会审核";
reimbursementNew.setState(ReimbursementState.SCHOOL_READY);
}
reimbursementNew.setAccountantAuditId(audit.getId());
dao.updateIgnoreNull(reimbursementNew);
String processUniqueId = "REIMBURSEMENT_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(ReimbursementState.ACCOUNTANT_READY), taskNodeName, SecurityConstants.INNER);
if (pass == 1) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
}else if(pass==2){
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", reimbursementNew.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(ReimbursementState.ACCOUNTANT_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/reimbursement/reimbursementMine",
null,
SecurityConstants.INNER
);
} else if (pass == 3) {
// 审核通过,往下走流程
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.GH_WYH_CWFZX, SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(ReimbursementState.SCHOOL_READY),
"校工会主席审核",
loginNameList,
"/reimbursement/reimbursementSchoolAudit",
null,
SecurityConstants.INNER
);
}
return AjaxResult.success();
}
}
@@ -0,0 +1,251 @@
package com.ruoyi.additional.controller.reimbursement;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.fund.FundClub;
import com.ruoyi.additional.api.domain.fund.FundSchool;
import com.ruoyi.additional.api.domain.fund.FundUnion;
import com.ruoyi.additional.api.domain.reimbursement.ReimbursementNew;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.reimbursement.ReimbursementManageService;
import com.ruoyi.additional.util.ProModuleDS;
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.DateUtils;
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.MemberApplyState;
import com.ruoyi.system.api.RemoteClubService;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.club.Sys_club_user;
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.Strings;
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 javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/11
* @Description
*/
@RestController
@RequestMapping("/reimbursement/apply")
public class ReimbursementApplyController {
@Autowired
private Dao dao;
@Autowired
private ReimbursementManageService reimbursementManageService;
@Autowired
private RemoteClubService remoteClubService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("doSave")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult doSave(@RequestBody ReimbursementNew reimbursementNew) {
reimbursementNew.setUserId(SecurityUtils.getUserId());
reimbursementNew.setUnitId(SecurityUtils.getDeptId());
reimbursementNew.setUnionId(SecurityUtils.getUnionId());
reimbursementNew.setState(ReimbursementState.NOT_SUBMIT);
reimbursementNew.setApplyTime(DateUtils.getTime());
dao.insertOrUpdate(reimbursementNew);
//TODO:后面需要添加发送短信
return AjaxResult.success();
}
@PostMapping("doSubmit")
@DSTransactional
@Transactional(rollbackFor = Exception.class)
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult doSubmit(@RequestBody ReimbursementNew reimbursementNew) {
if (reimbursementNew.getState() != null) {
// 先完成当前节点的任务
localProcessService.completeReturnTask("REIMBURSEMENT_APPLY@", SecurityConstants.INNER);
}
reimbursementNew.setUserId(SecurityUtils.getUserId());
reimbursementNew.setUnitId(SecurityUtils.getDeptId());
reimbursementNew.setUnionId(SecurityUtils.getUnionId());
reimbursementNew.setState(ReimbursementState.UNION_READY);
if (StrUtil.isBlank(reimbursementNew.getApplyTime())) {
reimbursementNew.setApplyTime(DateUtils.getTime());
}
dao.insertOrUpdate(reimbursementNew);
String processUniqueId = "REIMBURSEMENT_APPLY@" + reimbursementNew.getId();
// 创建实例
localProcessService.initCreateInstance(
processUniqueId,
reimbursementNew.getId(),
"[工会报销申请]" + SecurityUtils.getNickName(),
"/reimbursement/reimbursementMine",
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(ReimbursementState.UNION_READY),
"分工会主席审核",
loginNameList,
"/reimbursement/reimbursementUnionAudit",
null,
SecurityConstants.INNER
);
return AjaxResult.success();
}
@GetMapping("findOne/{id}")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult findOne(@PathVariable String id) {
ReimbursementNew reimbursementNew = dao.fetch(ReimbursementNew.class, id);
return AjaxResult.success(reimbursementNew);
}
@GetMapping("getBalance")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult getBalance() {
FundUnion yjgh = dao.fetch(FundUnion.class, Cnd.where("unionId", "=", SecurityUtils.getUnionId())
.and("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
if (yjgh != null) {
double balance = yjgh.getTotalQuota() - yjgh.getUsedQuota();
return AjaxResult.success(balance);
}
return AjaxResult.success(0f);
}
@GetMapping("getSchoolBudget")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult getSchoolBudget() {
FundSchool jfSchool = dao.fetch(FundSchool.class, Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
if (jfSchool != null) {
double balance = jfSchool.getTotalQuota() - jfSchool.getUsedQuota();
return AjaxResult.success(balance);
}
return AjaxResult.success(0f);
}
@GetMapping("getClubBudget")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult getClubBudget(@RequestParam("clubId") String clubId) {
FundClub club = dao.fetch(FundClub.class, Cnd.where("year", "=", DateUtil.thisYear())
.and("club_id", "=", clubId).and("state", "=", 1));
if (Lang.isNotEmpty(club)) {
double balance = club.getTotal_quota() - club.getUsed_quota();
BigDecimal bigDecimal = new BigDecimal(balance);
double value = bigDecimal.setScale(2, RoundingMode.HALF_UP).doubleValue();
return AjaxResult.success(value);
}
/*Sys_club_user clubUser = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.fetch(Sys_club_user.class, Cnd.where("userid", "=", SecurityUtils.getUserId()));
});
if (clubUser == null) {
return AjaxResult.success(0f);
}
FundClub jf_club = dao.fetch(FundClub.class, Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR))
.and("state", "=", 1).and("club_id", "=", clubUser.getClubid()));
if (jf_club != null) {
double balance = jf_club.getTotal_quota() - jf_club.getUsed_quota();
return AjaxResult.success(balance);
}*/
return AjaxResult.success(0f);
}
@GetMapping("querySqr")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult querySqr(String key) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
su.userId,
su.userName,
su.birthday,
su.loginName,
su.mobile,
su.sex,
su.deptName,
su.unionName
FROM
`user` su
$condition
""");
cnd.and("su.unionId", "=", SecurityUtils.getUnionId());
if (Strings.isNotBlank(key)) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("su.userName", key);
group.orLike("su.loginName", key);
cnd.and(group);
}
sql.setCondition(cnd);
List<Object> list = reimbursementManageService.listPageMap(1, 10, sql).getList();
return AjaxResult.success(list);
}
@GetMapping("getUserData")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult getUserData(String userId) {
Sql sql = Sqls.create("""
select
*
from
`user`
where userId = @userId
""");
sql.setParam("userId", userId);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap nutMap = (NutMap) sql.getResult();
return AjaxResult.success(nutMap);
}
@GetMapping("validRole")
@RequiresPermissions("additional:reimbursement:reimbursementApply")
public AjaxResult validRole(String val) {
if (AuthUtil.hasRole("admin")) {
return AjaxResult.success();
}
if ("2".equals(val)) {
if (!AuthUtil.hasAnyRoles("gh01,H04")) {
return AjaxResult.error("分工会报销只能由分工会主席操作");
}
} else if ("3".equals(val)) {
List<NutMap> data = remoteClubService.getClubsByRole().getData();
if (Lang.isNotEmpty(data)) {
return AjaxResult.error("协会/社团报销只能由会长操作");
}
}
return AjaxResult.success();
}
}
@@ -0,0 +1,110 @@
package com.ruoyi.additional.controller.reimbursement;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.fund.FundUnion;
import com.ruoyi.additional.api.domain.fund.FundUse;
import com.ruoyi.additional.api.domain.reimbursement.ReimbursementNew;
import com.ruoyi.additional.service.reimbursement.ReimbursementManageService;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.aop.interceptor.ioc.TransAop;
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.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Calendar;
/**
* @Author JyuHsin
* @Date 2023/2/11
* @Description
*/
@RestController
@RequestMapping("/reimbursement/mine")
public class ReimbursementMineController {
@Autowired
private Dao dao;
@Autowired
private ReimbursementManageService reimbursementManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:reimbursement:reimbursementMine")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unitId", required = false) String unitId,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "reiItemId", required = false) String reiItemId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
rei.*,
be.userName be_username,
state.stateName,
state.stateColor
FROM
`reimbursement_new` rei
LEFT JOIN `user` be ON be.userId = rei.be_user
LEFT JOIN audit_state state ON state.stateId = rei.state
$condition
""");
cnd.andEX("YEAR ( rei.applyTime )", "=", year);
cnd.andEX("rei.unitId", "=", unitId);
cnd.andEX("rei.unionId", "=", unionId);
if (!AuthUtil.hasAnyRoles("admin")) {
cnd.and("rei.userId", "=", SecurityUtils.getUserId());
}
if (Strings.isNotBlank(reiItemId) && "ww".equals(reiItemId)) {
cnd.and("rei.reimbursementItemId", "in", Lang.array("fyww", "zfww"));
} else {
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
}
cnd.desc("rei.applyTime");
sql.setCondition(cnd);
Pagination pagination = reimbursementManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@GetMapping("findOne/{id}")
public AjaxResult findOne(@PathVariable String id) {
NutMap nutMap = reimbursementManageService.findOne(id);
return AjaxResult.success(nutMap);
}
@PostMapping("doDelete/{id}")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementMine")
public AjaxResult doDelete(@PathVariable String id) {
ReimbursementNew reimbursementNew = dao.fetch(ReimbursementNew.class, id);
if (reimbursementNew.getState().equals(ReimbursementState.SCHOOL_PASS)) {
FundUnion yjgh = dao.fetch(FundUnion.class, Cnd.where("unionId", "=", SecurityUtils.getUnionId())
.and("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
yjgh.setUsedQuota(yjgh.getUsedQuota() - reimbursementNew.getMoney());
dao.updateIgnoreNull(yjgh);
dao.clear(FundUse.class, Cnd.where("apply_id", "=", reimbursementNew.getId()));
}
dao.clear(ReimbursementNew.class, Cnd.where("id", "=", id));
String processUniqueId = "REIMBURSEMENT_APPLY@" + reimbursementNew.getId();
localProcessService.deleteProcessInstance(processUniqueId, SecurityConstants.INNER);
return AjaxResult.success();
}
}
@@ -0,0 +1,231 @@
package com.ruoyi.additional.controller.reimbursement;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.honor.HonorAuditState;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.fund.*;
import com.ruoyi.additional.api.domain.reimbursement.ReimbursementNew;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.reimbursement.ReimbursementManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import com.ruoyi.system.api.domain.club.Sys_club_user;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
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.Calendar;
import java.util.Date;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/11
* @Description
*/
@RestController
@RequestMapping("/reimbursement/schoolAudit")
public class ReimbursementSchoolAuditController {
@Autowired
private Dao dao;
@Autowired
private ReimbursementManageService reimbursementManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:reimbursement:reimbursementSchoolAudit")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unitId", required = false) String unitId,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "reiItemId", required = false) String reiItemId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit) {
Cnd cnd = Cnd.NEW();
if (isAudit == null) {
cnd.and("rei.state", ">=", 170);
} else if (isAudit) {
cnd.and("rei.state", ">", 170);
} else {
cnd.and("rei.state", "=", 170);
}
if (Strings.isNotBlank(reiItemId) && "ww".equals(reiItemId)) {
cnd.and("rei.reimbursementItemId", "in", Lang.array("fyww", "zfww"));
} else {
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.andEX("YEAR ( rei.applyTime )", "=", year);
cnd.andEX("rei.unitId", "=", unitId);
cnd.andEX("rei.unionId", "=", unionId);
cnd.desc("rei.applyTime");
Pagination pagination = reimbursementManageService.pageData(cnd, pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("rollBack/{id}")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementSchoolAudit")
public AjaxResult rollBack(@PathVariable String id) {
String processUniqueId = "REIMBURSEMENT_APPLY@" + id;
ReimbursementNew reimbursementNew = dao.fetch(ReimbursementNew.class, id);
reimbursementManageService.update(Chain.make("state", ReimbursementState.SCHOOL_READY), Cnd.where("id", "=", id));
if (reimbursementNew.getJf_source().equals("1")) {
FundSchool jfSchool = dao.fetch(FundSchool.class, Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
jfSchool.setUsedQuota(jfSchool.getUsedQuota() - reimbursementNew.getMoney());
dao.updateIgnoreNull(jfSchool);
dao.clear(SchoolUse.class, Cnd.where("reimbursementId", "=", reimbursementNew.getId()));
} else if (reimbursementNew.getJf_source().equals("2")) {
FundUnion yjgh = dao.fetch(FundUnion.class, Cnd.where("unionId", "=", reimbursementNew.getUnionId()).and("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
yjgh.setUsedQuota(yjgh.getUsedQuota() - reimbursementNew.getMoney());
dao.updateIgnoreNull(yjgh);
dao.clear(FundUse.class, Cnd.where("apply_id", "=", reimbursementNew.getId()));
} else if (reimbursementNew.getJf_source().equals("3")) {
Sys_club_user clubUser = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.fetch(Sys_club_user.class, Cnd.where("userid", "=", reimbursementNew.getUserId()));
});
FundClub jf_club = dao.fetch(FundClub.class, Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1).and("club_id", "=", clubUser.getClubid()));
jf_club.setUsed_quota(jf_club.getUsed_quota() - reimbursementNew.getMoney());
dao.updateIgnoreNull(jf_club);
dao.clear(FundUse.class, Cnd.where("apply_id", "=", reimbursementNew.getId()));
}
localProcessService.revokeTask(processUniqueId, String.valueOf(ReimbursementState.SCHOOL_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementSchoolAudit")
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
ReimbursementNew reimbursementNew = dao.fetch(ReimbursementNew.class, id);
if (pass == 1) {
taskNodeName = "校工会审核拒绝";
reimbursementNew.setState(ReimbursementState.SCHOOL_REJECTED);
} else if (pass == 2) {
taskNodeName = "校工会审核退回修改";
reimbursementNew.setState(ReimbursementState.SCHOOL_BACK_MODIFY);
} else {
taskNodeName = "校工会审核通过";
reimbursementNew.setState(ReimbursementState.SCHOOL_PASS);
}
reimbursementNew.setSchoolAuditId(audit.getId());
dao.updateIgnoreNull(reimbursementNew);
if (pass == 3) {
if (reimbursementNew.getJf_source().equals("1")) {
FundSchool jfSchool = dao.fetch(FundSchool.class, Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
SchoolUse schoolUse = new SchoolUse();
schoolUse.setReimbursementId(reimbursementNew.getId());
dao.insert(schoolUse);
//往预算分配表减钱
jfSchool.setUsedQuota(jfSchool.getUsedQuota() + reimbursementNew.getMoney());
dao.updateIgnoreNull(jfSchool);
} else if (reimbursementNew.getJf_source().equals("2")) {
FundUnion yjgh = dao.fetch(FundUnion.class, Cnd.where("unionId", "=", reimbursementNew.getUnionId()).and("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1));
//往经费使用表中添加一条数据
FundUse jf_use = new FundUse();
jf_use.setAdjust_id(yjgh.getId());
jf_use.setProject(reimbursementNew.getReimbursementItemName());
jf_use.setAdjust_money(reimbursementNew.getMoney());
jf_use.setAdjust_reason(reimbursementNew.getCause());
jf_use.setAdjust_time(DateUtils.getTime());
jf_use.setAdjust_person(SecurityUtils.getUserId());
jf_use.setApply_id(reimbursementNew.getId());
dao.insert(jf_use);
//往预算分配表减钱
yjgh.setUsedQuota(yjgh.getUsedQuota() + reimbursementNew.getMoney());
dao.updateIgnoreNull(yjgh);
} else if (reimbursementNew.getJf_source().equals("3")) {
Sys_club_user clubUser = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.fetch(Sys_club_user.class, Cnd.where("userid", "=", reimbursementNew.getUserId()));
});
FundClub jf_club = dao.fetch(FundClub.class, Cnd.where("year", "=", Calendar.getInstance().get(Calendar.YEAR)).and("state", "=", 1).and("club_id", "=", clubUser.getClubid()));
//往经费使用表中添加一条数据
FundUse jf_use = new FundUse();
jf_use.setAdjust_id(jf_club.getId());
jf_use.setProject(reimbursementNew.getReimbursementItemName());
jf_use.setAdjust_money(reimbursementNew.getMoney());
jf_use.setAdjust_reason(reimbursementNew.getCause());
jf_use.setAdjust_time(DateUtils.getTime());
jf_use.setAdjust_person(SecurityUtils.getUserId());
jf_use.setApply_id(reimbursementNew.getId());
dao.insert(jf_use);
//往预算分配表减钱
jf_club.setUsed_quota(jf_club.getUsed_quota() + reimbursementNew.getMoney());
dao.updateIgnoreNull(jf_club);
}
}
String processUniqueId = "REIMBURSEMENT_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(ReimbursementState.SCHOOL_READY), taskNodeName, SecurityConstants.INNER);
if (pass != 2) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
}else if (pass==2){
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", reimbursementNew.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(ReimbursementState.SCHOOL_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/reimbursement/reimbursementMine",
null,
SecurityConstants.INNER
);
}
return AjaxResult.success();
}
}
@@ -0,0 +1,301 @@
package com.ruoyi.additional.controller.reimbursement;
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.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.reimbursement.ReimbursementManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteFileService;
import com.ruoyi.system.api.domain.SysConfig;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.IOUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/13
* @Description
*/
@RestController
@RequestMapping("/reimbursement/summary")
public class ReimbursementSummaryController {
@Autowired
private Dao dao;
@Autowired
private ReimbursementManageService reimbursementManageService;
@Autowired
private RemoteFileService remoteFileService;
@PostMapping("pageData")
@RequiresPermissions("additional:reimbursement:reimbursementSummary")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(name = "unitId", required = false) String unitId,
@RequestParam(name = "unionId", required = false) String unionId,
@RequestParam(name = "reiItemId", required = false) String reiItemId,
@RequestParam(name = "reimbursementDate[]", required = false) String[] reimbursementDate) {
Sql sql = Sqls.create("""
SELECT
rei.*,
be.userName be_username,
state.stateName,
state.stateColor
FROM
`reimbursement_new` rei
LEFT JOIN `user` be ON be.userId = rei.be_user
LEFT JOIN audit_state state ON state.stateId = rei.state
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("rei.state", "=", ReimbursementState.SCHOOL_PASS);
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
if (reimbursementDate != null && reimbursementDate.length > 0) {
cnd.and("rei.applyTime", ">=", reimbursementDate[0]);
cnd.and("rei.applyTime", "<=", reimbursementDate[1]);
}
cnd.andEX("rei.unitId", "=", unitId);
cnd.andEX("rei.unionId", "=", unionId);
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
if (Strings.isNotBlank(reiItemId) && "ww".equals(reiItemId)) {
cnd.and("rei.reimbursementItemId", "in", Lang.array("fyww", "zfww"));
} else {
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
}
if (!AuthUtil.hasAnyRoles("admin, A06, gh12, wyh02, wyh03")) {
SqlExpressionGroup group = new SqlExpressionGroup();
if (AuthUtil.hasAnyRoles("gh01, H04")) {
group.or("rei.unionId", "=", SecurityUtils.getUnionId());
} else {
group.or("rei.userId", "=", SecurityUtils.getUserId());
}
cnd.and(group);
}
cnd.desc("rei.applyTime");
sql.setCondition(cnd);
Pagination pagination = reimbursementManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return AjaxResult.success(pagination);
}
@RequestMapping("doExportUserExcel")
public void doExportUserExcel(@RequestBody PageForm pageForm,
@RequestParam(name = "unitId", required = false) String unitId,
@RequestParam(name = "unionId", required = false) String unionId,
@RequestParam(name = "reiItemId", required = false) String reiItemId,
@RequestParam(name = "reimbursementDate[]", required = false) String[] reimbursementDate,
HttpServletResponse response) throws IOException {
Sql sql = Sqls.create("""
SELECT
rei.*,
be.userName be_username,
state.stateName,
state.stateColor
FROM
`reimbursement_new` rei
LEFT JOIN `user` be ON be.userId = rei.be_user
LEFT JOIN audit_state state ON state.stateId = rei.state
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
if (reimbursementDate != null && reimbursementDate.length > 0) {
cnd.and("rei.applyTime", ">=", reimbursementDate[0]);
cnd.and("rei.applyTime", "<=", reimbursementDate[1]);
}
cnd.andEX("rei.unitId", "=", unitId);
cnd.andEX("rei.unionId", "=", unionId);
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.and("rei.state","=",200);
cnd.desc("rei.applyTime");
sql.setCondition(cnd);
List<NutMap> mapList = reimbursementManageService.listMap(sql);
mapList.forEach(v -> {
v.setv("description", Strings.isNotBlank(v.getString("activity_name")) ? ("活动名称:" + v.getString("activity_name")) : ("被慰问人:" + v.getString("be_username")));
});
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("经办人工号", "loginName", 20));
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 20));
exportEntities.add(new ExcelExportEntity("申请时间", "applyTime", 20));
exportEntities.add(new ExcelExportEntity("报销项目", "reimbursementItemName", 20));
exportEntities.add(new ExcelExportEntity("备注", "description", 20));
exportEntities.add(new ExcelExportEntity("金额(元)", "money", 20));
String fileName = "报销汇总表.xlsx";
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, mapList);
workbook.write(response.getOutputStream());
}
@RequestMapping("printData")
public void printData(String id, HttpServletResponse response) throws IOException {
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType(MediaType.APPLICATION_PDF_VALUE);
NutMap record = reimbursementManageService.findOne(id);
SysConfig configKey = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.fetch(SysConfig.class, Cnd.where("config_key", "=", "sys.schoolName"));
});
record.setv("schoolName", configKey.getConfigValue());
record.setv("money_big", Convert.digitToChinese(record.getFloat("money")));
String wtAct = "□慰问 □活动 □建家 □日常 □劳务 □专家";
if ("fyww".equals(record.getString("reimbursementItemId")) || "zfww".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□慰问", "√慰问");
} else if ("fyhd".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□活动", "√活动");
} else if ("fyjj".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□建家", "√建家");
} else if ("fyrc".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□日常", "√日常");
} else if ("zflw".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□劳务", "√劳务");
} else if ("zfzj".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□专家", "√专家");
}
record.setv("bxxm", wtAct);
InputStream inputStream;
if ("zf".equals(record.getString("reimbursementItemSort"))) {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/reimbursement/reimbursementMoney.docx");
} else {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/reimbursement/reimbursement.docx");
}
assert inputStream != null;
FileItem item = new DiskFileItemFactory().createItem("file"
, MediaType.MULTIPART_FORM_DATA_VALUE
, true
, System.currentTimeMillis() + ".docx");
XWPFTemplate.compile(inputStream).render(record).write(item.getOutputStream());
MultipartFile commonsMultipartFile = new CommonsMultipartFile(item);
byte[] bytes = remoteFileService.convertToPdfByInputStream(commonsMultipartFile);
InputStream pdfStream = new ByteArrayInputStream(bytes);
IOUtils.copy(pdfStream, response.getOutputStream());
pdfStream.close();
inputStream.close();
item.delete();
}
@RequestMapping("exportData")
public void exportData(String id, HttpServletResponse response) throws IOException {
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType(MediaType.APPLICATION_PDF_VALUE);
NutMap record = reimbursementManageService.findOne(id);
SysConfig configKey = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao.fetch(SysConfig.class, Cnd.where("config_key", "=", "sys.schoolName"));
});
record.setv("schoolName", configKey.getConfigValue());
record.setv("money_big", Convert.digitToChinese(record.getFloat("money")));
String wtAct = "□慰问 □活动 □建家 □日常 □劳务 □专家";
if ("fyww".equals(record.getString("reimbursementItemId")) || "zfww".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□慰问", "√慰问");
} else if ("fyhd".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□活动", "√活动");
} else if ("fyjj".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□建家", "√建家");
} else if ("fyrc".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□日常", "√日常");
} else if ("zflw".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□劳务", "√劳务");
} else if ("zfzj".equals(record.getString("reimbursementItemId"))) {
wtAct = wtAct.replace("□专家", "√专家");
}
record.setv("bxxm", wtAct);
InputStream inputStream;
if ("zf".equals(record.getString("reimbursementItemSort"))) {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/reimbursement/reimbursementMoney.docx");
} else {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/reimbursement/reimbursement.docx");
}
String fileName = "";
if ("zf".equals(record.getString("reimbursementItemSort"))) {
fileName = configKey.getConfigValue() + "支付凭证.docx";
} else {
fileName = configKey.getConfigValue() + "工会凭证报销单.docx";
}
String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", disposition);
Configure config = Configure.builder().build();
assert inputStream != null;
XWPFTemplate.compile(inputStream, config).render(record, response.getOutputStream());
inputStream.close();
}
}
@@ -0,0 +1,170 @@
package com.ruoyi.additional.controller.reimbursement;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.reimbursement.ReimbursementState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.reimbursement.ReimbursementNew;
import com.ruoyi.additional.service.reimbursement.ReimbursementManageService;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.api.constant.MemberApplyState;
import com.ruoyi.system.api.RemoteSysLocalProcessService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
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.Date;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/11
* @Description
*/
@RestController
@RequestMapping("/reimbursement/unionAudit")
public class ReimbursementUnionAuditController {
@Autowired
private Dao dao;
@Autowired
private ReimbursementManageService reimbursementManageService;
@Autowired
private RemoteSysLocalProcessService localProcessService;
@PostMapping("pageData")
@RequiresPermissions("additional:reimbursement:reimbursementUnionAudit")
public AjaxResult pageData(@RequestBody PageForm pageForm,
@RequestParam(value = "year", required = false) Integer year,
@RequestParam(value = "unitId", required = false) String unitId,
@RequestParam(value = "unionId", required = false) String unionId,
@RequestParam(value = "reiItemId", required = false) String reiItemId,
@RequestParam(value = "isAudit", required = false) Boolean isAudit) {
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRole("admin")) {
cnd.and("rei.unionId", "=", SecurityUtils.getUnionId());
}
if (isAudit == null) {
cnd.and("rei.state", ">=", 110);
} else if (isAudit) {
cnd.and("rei.state", ">", 110);
} else {
cnd.and("rei.state", "=", 110);
}
if (Strings.isNotBlank(reiItemId) && "ww".equals(reiItemId)) {
cnd.and("rei.reimbursementItemId", "in", Lang.array("fyww", "zfww"));
} else {
cnd.andEX("rei.reimbursementItemId", "=", reiItemId);
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.andEX("YEAR ( rei.applyTime )", "=", year);
cnd.andEX("rei.unitId", "=", unitId);
cnd.andEX("rei.unionId", "=", unionId);
cnd.desc("rei.applyTime");
Pagination pagination = reimbursementManageService.pageData(cnd, pageForm);
return AjaxResult.success(pagination);
}
@PostMapping("rollBack/{id}")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementUnionAudit")
public AjaxResult rollBack(@PathVariable String id) {
String processUniqueId = "REIMBURSEMENT_APPLY@" + id;
reimbursementManageService.update(Chain.make("state", ReimbursementState.UNION_READY), Cnd.where("id", "=", id));
localProcessService.deleteTask(processUniqueId, String.valueOf(ReimbursementState.UNION_READY), SecurityConstants.INNER);
return AjaxResult.success();
}
@PostMapping("doReview")
@DSTransactional
@RequiresPermissions("additional:reimbursement:reimbursementUnionAudit")
public AjaxResult doReview(@RequestBody Audit audit,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "pass", required = false) Integer pass) {
audit.setAuditor(SecurityUtils.getUserId());
audit.setLoginName(SecurityUtils.getUsername());
audit.setUserName(SecurityUtils.getNickName());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
String taskNodeName = "";
ReimbursementNew reimbursementNew = dao.fetch(ReimbursementNew.class, id);
if (pass == 1) {
taskNodeName = "分工会主席审核拒绝";
reimbursementNew.setState(ReimbursementState.UNION_REJECTED);
} else if (pass == 2) {
taskNodeName = "分工会主席审核退回修改";
reimbursementNew.setState(ReimbursementState.UNION_BACK_MODIFY);
} else {
taskNodeName = "待校工会会计审核";
reimbursementNew.setState(ReimbursementState.ACCOUNTANT_READY);
}
reimbursementNew.setUnionAuditId(audit.getId());
dao.updateIgnoreNull(reimbursementNew);
String processUniqueId = "REIMBURSEMENT_APPLY@" + id;
// 先完成当前节点的任务
localProcessService.completeTask(processUniqueId, String.valueOf(ReimbursementState.UNION_READY), taskNodeName, SecurityConstants.INNER);
if (pass == 1) {
// 审核不通过,流程结束
localProcessService.completeProcess(processUniqueId, true, SecurityConstants.INNER);
}else if(pass==2){
// 退回修改,流程继续
Sql sql = Sqls.create("select loginName FROM `user` where userId=@userId").setParam("userId", reimbursementNew.getUserId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap userMap = (NutMap) sql.getResult();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(ReimbursementState.UNION_BACK_MODIFY),
taskNodeName,
List.of(userMap.getString("loginName")),
"/reimbursement/reimbursementMine",
null,
SecurityConstants.INNER
);
} else if (pass == 3) {
// 审核通过,往下走流程
R<List<String>> assignments = localProcessService.getAssignments(null, null, Roles.SCHOOL_ACCOUNTING, SecurityConstants.INNER);
List<String> loginNameList = assignments.getData();
localProcessService.initCreateTask(
processUniqueId,
String.valueOf(ReimbursementState.ACCOUNTANT_READY),
"校工会会计审核",
loginNameList,
"/reimbursement/reimbursementAccountantAudit",
null,
SecurityConstants.INNER
);
}
return AjaxResult.success();
}
}
@@ -0,0 +1,115 @@
package com.ruoyi.additional.handle.meeting;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.ruoyi.additional.api.customEnum.CustomAuditTypeEnum;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.Roles;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.domain.SysUserRole;
import com.ruoyi.system.api.domain.club.Sys_club_user;
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.nutz.dao.util.Daos;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.lang.Lang;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/3/30
* @Description
*/
@Getter
public enum CustomAuditTypeHandle {
DW(CustomAuditTypeEnum.DW.getValue()) {
@Override
public SqlExpressionGroup next(SqlExpressionGroup sqlExpressionGroup) {
DynamicDataSourceContextHolder.push("system");
SysUser user = dao.fetch(SysUser.class, Cnd.where("userId", "=", SecurityUtils.getUserId()));
sqlExpressionGroup.or("u.deptId", "in", user.getDeptId());
DynamicDataSourceContextHolder.clear();
return sqlExpressionGroup;
}
},
FGH(CustomAuditTypeEnum.FGH.getValue()) {
@Override
public SqlExpressionGroup next(SqlExpressionGroup sqlExpressionGroup) {
//查询当前登录用户管理的工会
DynamicDataSourceContextHolder.push("system");
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("userId", "=", SecurityUtils.getUserId())
.and("roleId", "in", Lang.array(Roles.FGH_ADMIN)));
List<String> unionIds = userRoles.stream().map(SysUserRole::getUnionId).collect(Collectors.toList());
if (Lang.isNotEmpty(unionIds)) {
sqlExpressionGroup.or("u.unionid", "in", unionIds);
}
DynamicDataSourceContextHolder.clear();
return sqlExpressionGroup;
}
},
CLUB(CustomAuditTypeEnum.CLUB.getValue()) {
@Override
public SqlExpressionGroup next(SqlExpressionGroup sqlExpressionGroup) {
//查询当前登录用户管理的协会
DynamicDataSourceContextHolder.push("system");
List<SysUserRole> userRoles = dao.query(SysUserRole.class, Cnd.where("userId", "=", SecurityUtils.getUserId())
.and("roleId", "in", Lang.array(Roles.CLUB_PRESIDENT)));
List<String> clubIds = userRoles.stream().map(SysUserRole::getStid).collect(Collectors.toList());
List<Sys_club_user> clubUsers = dao.query(Sys_club_user.class, Cnd.where("stid", "in", clubIds));
if (Lang.isNotEmpty(clubUsers)) {
sqlExpressionGroup.or("u.userId", "in", clubUsers.stream().map(Sys_club_user::getUserid).collect(Collectors.toList()));
}
DynamicDataSourceContextHolder.clear();
return sqlExpressionGroup;
}
},
TZ(CustomAuditTypeEnum.TZ.getValue()) {
@Override
public SqlExpressionGroup next(SqlExpressionGroup sqlExpressionGroup) {
DynamicDataSourceContextHolder.push("jdh");
Sql sql = Sqls.fetchString("""
SELECT
dbtid
FROM
jdh_db
WHERE
jdhid = ( SELECT id FROM jdh_jdhxx WHERE jdhkqzt = 1 ORDER BY jdhkqsj DESC LIMIT 1 )
AND dbid = @userId
""");
sql.setParam("userId", SecurityUtils.getUserId());
dao.execute(sql);
String dbtId = sql.getString();
Sql dbSql = Sqls.queryString("""
select DISTINCT dbid from jdh_db where dbtid = @dbtid
""");
dbSql.setParam("dbtid", dbtId);
dao.execute(dbSql);
List<String> list = dbSql.getList(String.class);
if (Lang.isNotEmpty(list)) {
sqlExpressionGroup.or("u.userId", "in", list);
}
DynamicDataSourceContextHolder.clear();
return sqlExpressionGroup;
}
};
private final String name;
public Dao dao = SpringUtils.getBean(Dao.class);
CustomAuditTypeHandle(String name) {
this.name = name;
}
public abstract SqlExpressionGroup next(SqlExpressionGroup sqlExpressionGroup);
}
@@ -0,0 +1,13 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
public interface AidFundMemberApplyService extends BaseService {
NutMap applyInfo();
void signOut();
void doApply();
}
@@ -0,0 +1,24 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
public interface AidFundMemberBatchJoinService extends BaseService {
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link Pagination}
*/
Pagination pageData(AidFundMemberPageForm pageForm);
/**
* 加入基金会
*
* @param userIds 用户id
*/
void batchSettings(String[] userIds);
}
@@ -0,0 +1,33 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
public interface AidFundMemberBranchUnionAuditService extends BaseService {
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link Pagination}
*/
Pagination pageData(AidFundMemberPageForm pageForm);
/**
* 做提交
*
* @param audit 审计
* @param id id
*/
void doSubmit(Audit audit, String id);
/**
* 撤销
*
* @param id id
*/
void doRevoke(String id);
}
@@ -0,0 +1,19 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
public interface AidFundMemberChangeRecordService extends BaseService<AidFundMemberAuditRecord> {
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link Pagination}
*/
Pagination pageData(AidFundMemberPageForm pageForm);
void doDelete(String id);
}
@@ -0,0 +1,42 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface AidFundMemberFoundationAuditService extends BaseService {
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link Pagination}
*/
Pagination pageData(AidFundMemberPageForm pageForm);
/**
* 做提交
*
* @param audit 审计
* @param ids ids
*/
void doSubmit(Audit audit, List<String> ids);
/**
* 撤销
*
* @param id id
*/
void doRevoke(String id);
/**
* @param pageForm
* @return {@link List}<{@link NutMap}>
*/
List<NutMap> exportAuditUser(AidFundMemberPageForm pageForm);
}
@@ -0,0 +1,15 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberHistory;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
public interface AidFundMemberHistoryService extends BaseService<AidFundMemberHistory> {
Pagination pageData(AidFundMemberPageForm pageForm);
void backupMember(int year);
void doDelete(String id);
}
@@ -0,0 +1,49 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberPayXlsMode;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberPay;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface AidFundMemberPayService extends BaseService<AidFundMemberPay> {
/**
* 生成来年会员缴费名单
*/
void createMemberPayList();
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link Pagination}
*/
Pagination pageData(AidFundMemberPageForm pageForm);
/**
* 导出名单
*
* @param year 一年
* @param userState 用户状态
* @return {@link List}<{@link NutMap}>
*/
List<NutMap> exportPaysByYear(int year, List<String> userStates);
/**
* 情况缴费记录
*
* @param year 一年
*/
void clearPays(int year);
/**
* 导入缴费记录
*
* @param list 列表
*/
String importPayRecords(List<AidFundMemberPayXlsMode> list);
}
@@ -0,0 +1,33 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
public interface AidFundMemberRetireAuditService extends BaseService {
/**
* 页面数据
*
* @param pageForm 页面形式
* @return {@link Pagination}
*/
Pagination pageData(AidFundMemberPageForm pageForm);
/**
* 做提交
*
* @param audit 审计
* @param id id
*/
void doSubmit(Audit audit, String id);
/**
* 撤销
*
* @param id id
*/
void doRevoke(String id);
}
@@ -0,0 +1,19 @@
package com.ruoyi.additional.service.aidFundMember;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface AidFundMemberStandingBookManageService extends BaseService {
Pagination pageData(AidFundMemberPageForm pageForm);
List<NutMap> exportNewMember();
void doChange(String userId, String changeType, String currentUnitId, String currentThreeUnitId);
void doDelete(String userId);
}
@@ -0,0 +1,24 @@
package com.ruoyi.additional.service.evaluate;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.nutz.dao.Cnd;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
public interface EvaluateApplyService extends BaseService<EvaluateApply> {
Pagination pageData(PageForm pageForm, Cnd cnd);
Object findOne(String id);
Object doDelete(String id);
AjaxResult verifyApply(String evaluateId);
}
@@ -0,0 +1,25 @@
package com.ruoyi.additional.service.evaluate;
import com.ruoyi.additional.api.domain.evaluate.Evaluate;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseService;
import org.nutz.dao.Cnd;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
public interface EvaluateManageService extends BaseService<Evaluate> {
void add(Evaluate evaluate);
void edit(Evaluate evaluate);
Pagination pageData(PageForm pageForm, Cnd cnd);
Object findOne(String id);
Object getEvaluateList(String userId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.additional.service.fund;
import com.ruoyi.additional.api.domain.fund.FundClub;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
/**
* @Author JyuHsin
* @Date 2023/2/10
* @Description
*/
public interface ClubBudgetManageService extends BaseService<FundClub> {
AjaxResult issue();
AjaxResult doAdd(FundClub club);
}
@@ -0,0 +1,11 @@
package com.ruoyi.additional.service.fund;
import com.ruoyi.common.core.service.BaseService;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
public interface SchoolBudgetListService extends BaseService {
}
@@ -0,0 +1,15 @@
package com.ruoyi.additional.service.fund;
import com.ruoyi.additional.api.domain.fund.FundUnion;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
public interface UnionBudgetManageService extends BaseService<FundUnion> {
AjaxResult issue();
}
@@ -0,0 +1,16 @@
package com.ruoyi.additional.service.fund;
import com.ruoyi.additional.api.domain.fund.CostSet;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.common.core.web.domain.AjaxResult;
/**
* @Author JyuHsin
* @Date 2023/2/9
* @Description
*/
public interface YearCostSetService extends BaseService<CostSet> {
AjaxResult set(CostSet costsSet);
}
@@ -0,0 +1,12 @@
package com.ruoyi.additional.service.honor;
import com.ruoyi.additional.api.domain.honor.HonorBasicSettings;
import com.ruoyi.common.core.service.BaseService;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
public interface HonorBasicSettingsService extends BaseService<HonorBasicSettings> {
}
@@ -0,0 +1,22 @@
package com.ruoyi.additional.service.honor;
import com.ruoyi.additional.api.domain.honor.Honor;
import com.ruoyi.common.core.service.BaseService;
import java.util.List;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
public interface HonorBatchRegisterService extends BaseService {
/**
* 检验数据合法性
*
* @param list
* @return
*/
List<Honor> checkData(List<Honor> list, String lx);
}
@@ -0,0 +1,12 @@
package com.ruoyi.additional.service.honor;
import com.ruoyi.additional.api.domain.honor.Honor;
import com.ruoyi.common.core.service.BaseService;
/**
* @Author JyuHsin
* @Date 2023/2/3
* @Description
*/
public interface HonorManageService extends BaseService<Honor> {
}
@@ -0,0 +1,171 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberAuditState;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberSource;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberApplyService;
import com.ruoyi.common.core.service.BaseServiceImpl;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.RemoteConfigService;
import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.domain.SysUnion;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Optional;
@Service
public class AidFundMemberApplyServiceImpl extends BaseServiceImpl implements AidFundMemberApplyService {
public AidFundMemberApplyServiceImpl(Dao dao) {
super(dao);
}
@Autowired
private RemoteConfigService remoteConfigService;
@Override
public NutMap applyInfo() {
Sql sql = Sqls.create("""
SELECT
userId,
userName,
loginName,
sex,
deptName,
mobile,
idcard,
schoolTime,
aidFundMember
FROM
`user`
WHERE userId = @userId
""");
sql.setParam("userId", SecurityUtils.getUserId());
NutMap applyInfo = fetch(sql);
AidFundMemberAuditRecord record = dao().fetch(AidFundMemberAuditRecord.class, Cnd.where("userId", "=", SecurityUtils.getUserId()).desc("applyTime"));
dao().fetchLinks(record, null);
if (Lang.isNotEmpty(record)) {
applyInfo.setv("applyTime", record.getApplyTime());
if (Lang.isNotEmpty(record.getAuditState())) {
applyInfo.setv("stateName", record.getAuditState().getStateName());
}
if (AidFundMemberAuditState.AUDIT_PASS_STATES.contains(record.getStateId())) {
applyInfo.setv("status", "PASS");
} else if (AidFundMemberAuditState.AUDIT_REJECTED_STATES.contains(record.getStateId())) {
applyInfo.setv("status", "REJECTED");
} else if (AidFundMemberAuditState.AUDIT_BACK_MODIFY_STATES.contains(record.getStateId())) {
applyInfo.setv("status", "BACK_MODIFY");
} else {
applyInfo.setv("status", "AUDIT_ING");
}
} else {
applyInfo.setv("status", "NEVER_APPLY");
}
return applyInfo;
}
@Override
public void signOut() {
//判断是否是拒绝后申请还是退回后申请还是从来没申请
AidFundMemberAuditRecord record = dao().fetch(AidFundMemberAuditRecord.class, Cnd.where("userId", "=", SecurityUtils.getUserId()).desc("applyTime"));
dao().fetchLinks(record, null);
if (Lang.isNotEmpty(record)) {
Integer stateId = record.getStateId();
if (AidFundMemberAuditState.AUDIT_REJECTED_STATES.contains(stateId)) {
applyNewRecord(true);
} else {
modifyOldRecord(record);
}
} else {
//从来没申请过
applyNewRecord(true);
}
applyNewRecord(false);
}
@Override
public void doApply() {
Sql userSql = Sqls.create("select aidFundMember from `user` where userId = @userId");
userSql.setParam("userId", SecurityUtils.getUserId());
Integer aidFundMemberCode = (Integer) Daos.query(dao(), userSql.toString(), Sqls.callback.integer());
boolean isJoin = aidFundMemberCode == AidFundMemberMode.NONE.getCode();
AidFundMemberAuditRecord record = dao().fetch(AidFundMemberAuditRecord.class, Cnd.where("userId", "=", SecurityUtils.getUserId()).and("isJoin", "=", isJoin ? 1 : 0).desc("applyTime"));
dao().fetchLinks(record, null);
//判断是否是拒绝后申请还是退回后申请还是从来没申请
if (Lang.isNotEmpty(record)) {
Integer stateId = record.getStateId();
if (AidFundMemberAuditState.AUDIT_REJECTED_STATES.contains(stateId) || AidFundMemberAuditState.AUDIT_PASS_STATES.contains(stateId)) {
applyNewRecord(isJoin);
} else {
modifyOldRecord(record);
}
} else {
//从来没申请过
applyNewRecord(isJoin);
}
}
private void applyNewRecord(boolean isJoin) {
// String retirementOfficeDeptId = remoteConfigService.selectConfigByKey("sys.retirementOfficeDeptId").getMsg();
AidFundMemberAuditRecord applyRecord = new AidFundMemberAuditRecord();
applyRecord.setUserId(String.valueOf(SecurityUtils.getUserId()));
applyRecord.setApplyTime(new Date());
applyRecord.setIsJoin(isJoin);
applyRecord.setUnionId(SecurityUtils.getUnionId());
applyRecord.setUnionName(Optional.ofNullable(SecurityUtils.getUnion()).map(SysUnion::getUnionName).orElse(null));
applyRecord.setUnionCode(Optional.ofNullable(SecurityUtils.getUnion()).map(SysUnion::getUnionCode).orElse(null));
applyRecord.setDeptId(String.valueOf(SecurityUtils.getDeptId()));
applyRecord.setDeptName(Optional.ofNullable(SecurityUtils.getDept()).map(SysDept::getDeptName).orElse(null));
applyRecord.setDeptCode(Optional.ofNullable(SecurityUtils.getDept()).map(SysDept::getDeptCode).orElse(null));
applyRecord.setPersonType(SecurityUtils.getLoginUser().getSysUser().getPersonType());
applyRecord.setUserState(SecurityUtils.getLoginUser().getSysUser().getUserState());
applyRecord.setSource(AidFundMemberSource.PERSONAL.getCode());
if (SecurityUtils.getLoginUser().getSysUser().getUserState().equals("在职")) {
applyRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_READY);
} else if (SecurityUtils.getLoginUser().getSysUser().getUserState().equals("退休")) {
applyRecord.setStateId(AidFundMemberAuditState.RETIRED_READY);
} else {
applyRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_READY);
}
// if (String.valueOf(SecurityUtils.getDeptId()).equals(retirementOfficeDeptId)) {
// applyRecord.setStateId(AidFundMemberAuditState.RETIRED_READY);
// } else {
// applyRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_READY);
// }
dao().insert(applyRecord);
}
//修改继续上次的申请
private void modifyOldRecord(AidFundMemberAuditRecord applyRecord) {
String retirementOfficeDeptId = remoteConfigService.selectConfigByKey("sys.retirementOfficeDeptId").getMsg();
if (String.valueOf(SecurityUtils.getDeptId()).equals(retirementOfficeDeptId)) {
applyRecord.setStateId(AidFundMemberAuditState.RETIRED_READY);
} else {
applyRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_READY);
}
dao().updateIgnoreNull(applyRecord);
}
}
@@ -0,0 +1,159 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberAuditState;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberSource;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberBatchJoinService;
import com.ruoyi.additional.util.ProModuleDS;
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.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.Lang;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
public class AidFundMemberBatchJoinServiceImpl extends BaseServiceImpl implements AidFundMemberBatchJoinService {
public AidFundMemberBatchJoinServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
u.userId,
u.loginName,
u.userName,
u.sex,
u.mobile,
u.userState,
u.deptName,
u.deptCode,
u.unionId,
u.unionCode,
u.unionName,
u.aidFundMemberQuitTime
FROM
`user` u
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasAnyRoles("HZ,admin")) {
if (AuthUtil.hasRole("H04")) {
cnd.and("u.unionId", "=", SecurityUtils.getUnionId());
cnd.and("u.userState", "=", "在职");
}
if (AuthUtil.hasAnyRoles("ltxgbc")) {
cnd.and("u.userState", "=", "退休");
}
}
cnd.and("u.aidFundMember", "=", AidFundMemberMode.NONE.getCode());
// cnd.and("""
// (
// SELECT
// COUNT(1)
// FROM aid_fund_member_audit_record
// WHERE
// userId = u.userId
// AND stateId NOT IN (@applyIngStates)
// )
// """, "=", "0");
//
// sql.setParam("AUDIT_APPLYING_STATES", AidFundMemberAuditState.AUDIT_APPLYING_STATES);
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.andEX("u.unionId", "=", pageForm.getUnionId());
cnd.andEX("u.deptId", "=", pageForm.getUnitId());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
cnd.andEX("u.userState", "=", pageForm.getUserState());
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
@DSTransactional
public void batchSettings(String[] userIds) {
Audit audit = new Audit();
audit.setAuditOpinion(AidFundMemberSource.BATCH.getDescription() + "通过");
dao().insert(audit);
Sql userSql = Sqls.create("""
select
userName,
loginName,
userId,
sex,
personType,
userState,
deptName,
deptCode,
deptId,
unionId,
unionName,
unionCode
from `user`
where
userId in (@userIds)
""").setParam("userIds", userIds);
userSql.setCallback(Sqls.callback.entities());
userSql.setEntity(dao().getEntity(AidFundMemberAuditRecord.class));
dao().execute(userSql);
List<AidFundMemberAuditRecord> records = userSql.getList(AidFundMemberAuditRecord.class);
for (AidFundMemberAuditRecord record : records) {
record.setIsJoin(true);
record.setApplyTime(new Date());
record.setSource(AidFundMemberSource.BATCH.getCode());
if (AuthUtil.hasRole("admin")) {
record.setFundAuditId(audit.getId());
record.setFundAuditIds(Lang.list(audit.getId()));
record.setStateId(AidFundMemberAuditState.AID_FUND_PASS);
} else if (AuthUtil.hasRole("H04")) {
record.setUnionAuditId(audit.getId());
record.setUnionAuditIds(Lang.list(audit.getId()));
record.setStateId(AidFundMemberAuditState.AID_FUND_READY);
} else if (AuthUtil.hasRole("ltxgbc")) {
record.setRetirementAuditId(audit.getId());
record.setRetirementAuditIds(Lang.list(audit.getId()));
record.setStateId(AidFundMemberAuditState.AID_FUND_READY);
}
}
dao().insert(records);
ProModuleDS.execVoid(Ds.SYSTEM, () -> {
if (AuthUtil.hasRole("admin")) {
dao().update(SysUser.class,
Chain.make("aidFundMember", AidFundMemberMode.NORMAL.getCode())
.add("aidFundMemberJoinTime", new Date()),
Cnd.where("userId", "in", userIds));
} else {
dao().update(SysUser.class,
Chain.make("aidFundMember", AidFundMemberMode.NONE.getCode()),
Cnd.where("userId", "in", userIds));
}
});
}
}
@@ -0,0 +1,114 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberAuditState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberBranchUnionAuditService;
import com.ruoyi.common.core.constant.AuditConstants;
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 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.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class AidFundMemberBranchUnionAuditServiceImpl extends BaseServiceImpl implements AidFundMemberBranchUnionAuditService {
public AidFundMemberBranchUnionAuditServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
afmar.*,
u.loginName,
u.userName,
u.sex,
u.mobile,
st.stateName,
st.stateColor\s
FROM
`aid_fund_member_audit_record` afmar
LEFT JOIN audit_state st ON st.stateId = afmar.stateId
LEFT JOIN `user` u ON u.userId = afmar.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (pageForm.getIsAudit() == null) {
cnd.and("afmar.stateId", ">=", AidFundMemberAuditState.BRANCH_UNION_READY);
cnd.asc("afmar.stateId");
} else if (pageForm.getIsAudit()) {
cnd.and("afmar.stateId", ">", AidFundMemberAuditState.BRANCH_UNION_READY);
cnd.asc("afmar.stateId");
} else {
cnd.and("afmar.stateId", "=", AidFundMemberAuditState.BRANCH_UNION_READY);
}
if (!AuthUtil.hasRole("admin")) {
cnd.and("afmar.unionId", "=", SecurityUtils.getUnionId());
}
cnd.andEX("YEAR(afmar.applyTime)", "=", pageForm.getYear());
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.andEX("afmar.unionId", "=", pageForm.getUnionId());
cnd.andEX("afmar.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmar.personType", "=", pageForm.getPersonType());
cnd.andEX("afmar.userState", "=", pageForm.getUserState());
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void doSubmit(Audit audit, String id) {
dao().insert(audit);
AidFundMemberAuditRecord auditRecord = dao().fetch(AidFundMemberAuditRecord.class, id);
auditRecord.setUnionAuditId(audit.getId());
List<String> unionAuditIds = Optional.ofNullable(auditRecord.getUnionAuditIds()).orElse(new ArrayList<>());
unionAuditIds.add(audit.getId());
auditRecord.setUnionAuditIds(unionAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> auditRecord.setStateId(AidFundMemberAuditState.AID_FUND_READY);
case AuditConstants.REJECT -> auditRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_REJECTED);
case AuditConstants.BACK -> auditRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_BACK_MODIFY);
}
dao().updateIgnoreNull(auditRecord);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void doRevoke(String id) {
AidFundMemberAuditRecord auditRecord = dao().fetch(AidFundMemberAuditRecord.class, id);
List<String> unionAuditIds = auditRecord.getUnionAuditIds();
String unionAuditId = auditRecord.getUnionAuditId();
dao().delete(Audit.class, unionAuditId);
unionAuditIds.remove(unionAuditId);
auditRecord.setStateId(AidFundMemberAuditState.BRANCH_UNION_READY);
auditRecord.setUnionAuditId(null);
auditRecord.setUnionAuditIds(unionAuditIds);
dao().update(auditRecord);
}
}
@@ -0,0 +1,63 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberChangeRecordService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
import com.ruoyi.common.core.utils.sql.SqlUtil;
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.springframework.stereotype.Service;
@Service
public class AidFundMemberChangeRecordServiceImpl extends BaseServiceImpl<AidFundMemberAuditRecord> implements AidFundMemberChangeRecordService {
public AidFundMemberChangeRecordServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
afmar.*,
u.userName,
u.loginName,
u.sex
FROM
`aid_fund_member_audit_record` afmar
LEFT JOIN `user` u on u.userId = afmar.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(afmar.applyTime)", "=", pageForm.getYear());
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.andEX("afmar.unionId", "=", pageForm.getUnionId());
cnd.andEX("afmar.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmar.personType", "=", pageForm.getPersonType());
cnd.andEX("afmar.userState", "=", pageForm.getUserState());
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public void doDelete(String id) {
dao().delete(AidFundMemberAuditRecord.class, id);
}
}
@@ -0,0 +1,169 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberAuditState;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberFoundationAuditService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@Service
public class AidFundMemberFoundationAuditServiceImpl extends BaseServiceImpl implements AidFundMemberFoundationAuditService {
public AidFundMemberFoundationAuditServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
afmar.*,
u.loginName,
u.userName,
u.sex,
u.mobile,
st.stateName,
st.stateColor\s
FROM
`aid_fund_member_audit_record` afmar
LEFT JOIN audit_state st ON st.stateId = afmar.stateId
LEFT JOIN `user` u ON u.userId = afmar.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (pageForm.getIsAudit() == null) {
cnd.and("afmar.stateId", ">=", AidFundMemberAuditState.AID_FUND_READY);
cnd.asc("afmar.stateId");
} else if (pageForm.getIsAudit()) {
cnd.and("afmar.stateId", ">", AidFundMemberAuditState.AID_FUND_READY);
cnd.asc("afmar.stateId");
} else {
cnd.and("afmar.stateId", "=", AidFundMemberAuditState.AID_FUND_READY);
}
cnd.andEX("YEAR(afmar.applyTime)", "=", pageForm.getYear());
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.andEX("afmar.unionId", "=", pageForm.getUnionId());
cnd.andEX("afmar.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmar.personType", "=", pageForm.getPersonType());
cnd.andEX("afmar.userState", "=", pageForm.getUserState());
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
@DSTransactional
public void doSubmit(Audit audit, List<String> ids) {
for (String id : ids) {
dao().insert(audit);
AidFundMemberAuditRecord auditRecord = dao().fetch(AidFundMemberAuditRecord.class, id);
auditRecord.setFundAuditId(audit.getId());
List<String> fundAuditIds = Optional.ofNullable(auditRecord.getFundAuditIds()).orElse(new ArrayList<>());
fundAuditIds.add(audit.getId());
auditRecord.setFundAuditIds(fundAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> {
auditRecord.setStateId(AidFundMemberAuditState.AID_FUND_PASS);
//修改用户表状态
ProModuleDS.execVoid(Ds.SYSTEM, () -> {
Chain userChain = Chain.make("aidFundMember", auditRecord.getIsJoin() ? AidFundMemberMode.NORMAL.getCode() : AidFundMemberMode.NONE.getCode());
userChain.add(auditRecord.getIsJoin() ? "aidFundMemberJoinTime" : "aidFundMemberQuitTime", new Date());
dao().update(SysUser.class, userChain, Cnd.where("userId", "=", auditRecord.getUserId()));
});
}
case AuditConstants.REJECT -> auditRecord.setStateId(AidFundMemberAuditState.AID_FUND_REJECTED);
case AuditConstants.BACK -> auditRecord.setStateId(AidFundMemberAuditState.AID_FUND_BACK_MODIFY);
}
dao().updateIgnoreNull(auditRecord);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void doRevoke(String id) {
AidFundMemberAuditRecord auditRecord = dao().fetch(AidFundMemberAuditRecord.class, id);
List<String> fundAuditIds = auditRecord.getFundAuditIds();
String fundAuditId = auditRecord.getFundAuditId();
dao().delete(Audit.class, fundAuditId);
fundAuditIds.remove(fundAuditId);
auditRecord.setStateId(AidFundMemberAuditState.AID_FUND_READY);
auditRecord.setFundAuditId(null);
auditRecord.setFundAuditIds(fundAuditIds);
dao().update(auditRecord);
}
@Override
public List<NutMap> exportAuditUser(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
afmar.deptName,
afmar.unionName,
u.loginName,
u.userName,
u.idcard
FROM
`aid_fund_member_audit_record` afmar
LEFT JOIN audit_state st ON st.stateId = afmar.stateId
LEFT JOIN `user` u ON u.userId = afmar.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (pageForm.getIsAudit() == null) {
cnd.and("afmar.stateId", ">=", AidFundMemberAuditState.AID_FUND_READY);
} else if (pageForm.getIsAudit()) {
cnd.and("afmar.stateId", ">", AidFundMemberAuditState.AID_FUND_READY);
} else {
cnd.and("afmar.stateId", "=", AidFundMemberAuditState.AID_FUND_READY);
}
cnd.andEX("YEAR(afmar.applyTime)", "=", pageForm.getYear());
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.andEX("afmar.unionId", "=", pageForm.getUnionId());
cnd.andEX("afmar.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmar.personType", "=", pageForm.getPersonType());
cnd.andEX("afmar.userState", "=", pageForm.getUserState());
cnd.asc("afmar.unionName");
cnd.asc("afmar.deptName");
sql.setCondition(cnd);
return listMap(sql);
}
}
@@ -0,0 +1,88 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberHistory;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberHistoryService;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
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.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class AidFundMemberHistoryServiceImpl extends BaseServiceImpl<AidFundMemberHistory> implements AidFundMemberHistoryService {
public AidFundMemberHistoryServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("select afmh.*,u.mobile from aid_fund_member_history afmh left join `user` u on u.userId = afmh.userId $condition");
Cnd cnd = Cnd.NEW();
cnd.andEX("afmh.unionId", "=", pageForm.getUnionId());
cnd.andEX("afmh.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmh.personType", "=", pageForm.getPersonType());
cnd.andEX("afmh.userState", "=", pageForm.getUserState());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("afmh.userName", pageForm.getSearchKeyword());
seg.orLike("afmh.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.and("afmh.`year`", "=", pageForm.getYear());
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void backupMember(int year) {
dao().clear(AidFundMemberHistory.class, Cnd.where("year", "=", year));
Sql sql = Sqls.create("""
SELECT
userId,
loginName,
userName,
deptId,
deptName,
deptCode,
unionId,
unionName,
unionCode,
sex,
personType,
userState,
aidFundMemberJoinTime,
@year as `year`
FROM
`user`
WHERE aidFundMember = @aidFundMember
""");
sql.setParam("aidFundMember", AidFundMemberMode.NORMAL.getCode());
sql.setParam("year", year);
sql.setCallback(Sqls.callback.entities());
sql.setEntity(dao().getEntity(AidFundMemberHistory.class));
sql.forceExecQuery();
dao().execute(sql);
List<AidFundMemberHistory> histories = sql.getList(AidFundMemberHistory.class);
dao().insert(histories);
}
@Override
public void doDelete(String id) {
dao().delete(AidFundMemberHistory.class, id);
}
}
@@ -0,0 +1,233 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberPayXlsMode;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberPay;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberPayService;
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.system.api.RemoteConfigService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.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.*;
import java.util.stream.Collectors;
@Service
public class AidFundMemberPayServiceImpl extends BaseServiceImpl<AidFundMemberPay> implements AidFundMemberPayService {
public AidFundMemberPayServiceImpl(Dao dao) {
super(dao);
}
@Autowired
private RemoteConfigService remoteConfigService;
@Override
@Transactional(rollbackFor = Exception.class)
public void createMemberPayList() {
int nextYear = Calendar.getInstance().get(Calendar.YEAR) + 1;
dao().clear(AidFundMemberPay.class, Cnd.where("year", "=", nextYear));
String welfareMemberMoney = remoteConfigService.selectConfigByKey("welfareMember.money").getMsg();
Sql sql = Sqls.create("""
SELECT
userId,
loginName,
userName,
deptId,
deptName,
deptCode,
unionId,
unionName,
unionCode,
sex,
personType,
userState,
aidFundMemberJoinTime,
@year as `year`
FROM
`user`
WHERE aidFundMember = @aidFundMember
""");
sql.setParam("aidFundMember", AidFundMemberMode.NORMAL.getCode());
sql.setParam("year", nextYear);
sql.setCallback(Sqls.callback.entities());
sql.setEntity(dao().getEntity(AidFundMemberPay.class));
sql.forceExecQuery();
dao().execute(sql);
List<AidFundMemberPay> pays = sql.getList(AidFundMemberPay.class);
for (AidFundMemberPay pay : pays) {
pay.setPayed(false);
pay.setMoney(Double.valueOf(welfareMemberMoney));
}
dao().insert(pays);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("select afmp.*,u.mobile from aid_fund_member_pay afmp left join `user` u on u.userId = afmp.userId $condition");
Cnd cnd = Cnd.NEW();
cnd.andEX("afmp.payed", "=", pageForm.getIsPayed());
cnd.andEX("afmp.unionId", "=", pageForm.getUnionId());
cnd.andEX("afmp.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmp.personType", "=", pageForm.getPersonType());
cnd.andEX("afmp.userState", "=", pageForm.getUserState());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("afmp.userName", pageForm.getSearchKeyword());
seg.orLike("afmp.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.and("afmp.`year`", "=", pageForm.getYear());
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), SqlUtil.getOrderBy(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public List<NutMap> exportPaysByYear(int year, List<String> userStates) {
Sql sql = Sqls.create("""
SELECT
pay.*,
YEAR ( u.aidFundMemberJoinTime ) aidYear\s
FROM
aid_fund_member_pay pay
LEFT JOIN `user` u ON u.userId = pay.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("pay.`year` ", "=", year);
cnd.andEX("u.userState", "in", userStates);
cnd.desc("u.aidFundMemberJoinTime");
sql.setCondition(cnd);
List<NutMap> list = listMap(sql);
for (NutMap v : list) {
if (v.getInt("aidYear") == year) {
v.setv("memberStatus", "新会员");
} else {
v.setv("memberStatus", "老会员");
}
}
return list;
}
@Override
public void clearPays(int year) {
dao().clear(AidFundMemberPay.class, Cnd.where("year", "=", year));
}
@Override
@Transactional(rollbackFor = Exception.class)
public String importPayRecords(List<AidFundMemberPayXlsMode> list) {
List<String> emptyDataRows = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
AidFundMemberPayXlsMode xlsMode = list.get(i);
String loginName = xlsMode.getLoginName();
String userName = xlsMode.getUserName();
Integer year = xlsMode.getYear();
if (StrUtil.isBlank(loginName) || StrUtil.isBlank(userName) || year == null) {
emptyDataRows.add(String.valueOf(i + 1));
}
}
if (!emptyDataRows.isEmpty()) {
return "" + String.join(",", emptyDataRows) + "行数据有空值,请检查!";
}
List<String> repeatLoginNames = list.stream().collect(Collectors.groupingBy(AidFundMemberPayXlsMode::getLoginName, Collectors.counting()))
.entrySet().stream().filter(e -> e.getValue() > 1)
.map(Map.Entry::getKey).collect(Collectors.toList());
if (!repeatLoginNames.isEmpty()) {
return "工号为" + String.join(",", repeatLoginNames) + "有重复数据,请检查!";
}
Map<String, String> userMap = list.stream().collect(Collectors.toMap(AidFundMemberPayXlsMode::getLoginName, AidFundMemberPayXlsMode::getUserName));
Set<String> loginNames = userMap.keySet();
Sql userSql = Sqls.create("""
select
userName,
loginName,
userId,
sex,
personType,
userState,
deptName,
deptCode,
deptId,
unionId,
unionName,
unionCode
from `user`
where
loginName in (@loginNames)
""").setParam("loginNames", loginNames);
List<NutMap> dbUserList = listMap(userSql);
Map<String, String> userMapDB = dbUserList.stream().collect(Collectors.toMap(v -> v.getString("loginName"), v -> v.getString("userName")));
List<String> noneMatchLoginNames = new ArrayList<>();
for (Map.Entry<String, String> xlsEntry : userMap.entrySet()) {
String xlsUseName = xlsEntry.getValue();
if (!userMapDB.containsKey(xlsEntry.getKey())) {
noneMatchLoginNames.add(xlsEntry.getKey());
continue;
}
String dbUserName = userMapDB.get(xlsEntry.getKey());
if (StrUtil.isBlank(dbUserName)) {
noneMatchLoginNames.add(xlsEntry.getKey());
continue;
}
if (!dbUserName.equals(xlsUseName)) {
noneMatchLoginNames.add(xlsEntry.getKey());
}
}
if (!noneMatchLoginNames.isEmpty()) {
return "工号为" + String.join(",", noneMatchLoginNames) + "的数据与姓名不匹配,请检查!";
}
//删除之前的记录
for (AidFundMemberPayXlsMode xlsMode : list) {
dao().clear(AidFundMemberPay.class, Cnd.where("loginName", "=", xlsMode.getLoginName()).and("year", "=", xlsMode.getYear()));
}
String welfareMemberMoney = remoteConfigService.selectConfigByKey("welfareMember.money").getMsg();
//插入新的缴费记录
List<AidFundMemberPay> pays = Lang.collection2list(dbUserList, AidFundMemberPay.class);
for (AidFundMemberPay pay : pays) {
pay.setPayed(true);
pay.setYear(list.stream().filter(v -> v.getLoginName().equals(pay.getLoginName())).findFirst().map(v -> v.getYear()).orElse(null));
pay.setMoney(Double.valueOf(welfareMemberMoney));
}
dao().insert(pays);
return null;
}
}
@@ -0,0 +1,121 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberAuditState;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberRetireAuditService;
import com.ruoyi.common.core.constant.AuditConstants;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
import com.ruoyi.system.api.RemoteConfigService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class AidFundMemberRetireAuditServiceImpl extends BaseServiceImpl implements AidFundMemberRetireAuditService {
public AidFundMemberRetireAuditServiceImpl(Dao dao) {
super(dao);
}
@Autowired
private RemoteConfigService remoteConfigService;
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
afmar.*,
u.loginName,
u.userName,
u.sex,
u.mobile,
st.stateName,
st.stateColor\s
FROM
`aid_fund_member_audit_record` afmar
LEFT JOIN audit_state st ON st.stateId = afmar.stateId
LEFT JOIN `user` u ON u.userId = afmar.userId
$condition
""");
Cnd cnd = Cnd.NEW();
if (pageForm.getIsAudit() == null) {
cnd.and("afmar.stateId", ">=", AidFundMemberAuditState.RETIRED_READY);
cnd.asc("afmar.stateId");
} else if (pageForm.getIsAudit()) {
cnd.and("afmar.stateId", ">", AidFundMemberAuditState.RETIRED_READY);
cnd.asc("afmar.stateId");
} else {
cnd.and("afmar.stateId", "=", AidFundMemberAuditState.RETIRED_READY);
}
// if (!AuthUtil.hasRole("admin")) {
// cnd.and("afmar.unionId", "=", SecurityUtils.getUnionId());
// }
cnd.andEX("YEAR(afmar.applyTime)", "=", pageForm.getYear());
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.andEX("afmar.unionId", "=", pageForm.getUnionId());
// cnd.andEX("afmar.deptId", "=", pageForm.getUnitId());
cnd.andEX("afmar.personType", "=", pageForm.getPersonType());
cnd.andEX("afmar.userState", "=", pageForm.getUserState());
String retirementOfficeDeptId = remoteConfigService.selectConfigByKey("sys.retirementOfficeDeptId").getMsg();
cnd.andEX("afmar.deptId", "=", retirementOfficeDeptId);
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void doSubmit(Audit audit, String id) {
dao().insert(audit);
AidFundMemberAuditRecord auditRecord = dao().fetch(AidFundMemberAuditRecord.class, id);
auditRecord.setRetirementAuditId(audit.getId());
List<String> retirementAuditIds = Optional.ofNullable(auditRecord.getRetirementAuditIds()).orElse(new ArrayList<>());
retirementAuditIds.add(audit.getId());
auditRecord.setRetirementAuditIds(retirementAuditIds);
switch (audit.getAuditResult()) {
case AuditConstants.PASS -> auditRecord.setStateId(AidFundMemberAuditState.AID_FUND_READY);
case AuditConstants.REJECT -> auditRecord.setStateId(AidFundMemberAuditState.RETIRED_REJECTED);
case AuditConstants.BACK -> auditRecord.setStateId(AidFundMemberAuditState.RETIRED_BACK_MODIFY);
}
dao().updateIgnoreNull(auditRecord);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void doRevoke(String id) {
AidFundMemberAuditRecord auditRecord = dao().fetch(AidFundMemberAuditRecord.class, id);
List<String> retirementAuditIds = auditRecord.getRetirementAuditIds();
String retirementAuditId = auditRecord.getRetirementAuditId();
dao().delete(Audit.class, retirementAuditId);
retirementAuditIds.remove(retirementAuditId);
auditRecord.setStateId(AidFundMemberAuditState.RETIRED_READY);
auditRecord.setRetirementAuditId(null);
auditRecord.setRetirementAuditIds(retirementAuditIds);
dao().update(auditRecord);
}
}
@@ -0,0 +1,144 @@
package com.ruoyi.additional.service.impl.aidFundMember;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberAuditState;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberChangeType;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberMode;
import com.ruoyi.additional.api.constant.aidFundMember.AidFundMemberSource;
import com.ruoyi.additional.api.domain.Audit;
import com.ruoyi.additional.api.domain.aidFundMember.AidFundMemberAuditRecord;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.constant.aidFundMember.AidFundMemberPageForm;
import com.ruoyi.additional.service.aidFundMember.AidFundMemberStandingBookManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
import com.ruoyi.member.api.constant.UserChangeType;
import com.ruoyi.member.api.domain.UserHistory;
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.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
public class AidFundMemberStandingBookManageServiceImpl extends BaseServiceImpl implements AidFundMemberStandingBookManageService {
public AidFundMemberStandingBookManageServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(AidFundMemberPageForm pageForm) {
Sql sql = Sqls.create("select * from user $condition");
Cnd cnd = Cnd.NEW();
cnd.and("aidFundMember", "=", AidFundMemberMode.NORMAL.getCode());
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("deptId", "=", pageForm.getUnitId());
cnd.andEX("personType", "=", pageForm.getPersonType());
cnd.andEX("userState", "=", pageForm.getUserState());
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);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public List<NutMap> exportNewMember() {
Sql sql = Sqls.create("""
SELECT
loginName,
userName,
deptName,
deptCode,
unionName,
unionCode,
sex,
personType,
userState,
aidFundMemberJoinTime,
idcard
FROM
`user`
WHERE aidFundMember = @aidFundMember
AND YEAR(aidFundMemberJoinTime) = @year
""");
sql.setParam("aidFundMember", AidFundMemberMode.NORMAL.getCode());
sql.setParam("year", DateUtil.thisYear());
return listMap(sql);
}
@Override
@DSTransactional
public void doChange(String userId, String changeType, String currentUnitId, String currentThreeUnitId) {
if (AidFundMemberChangeType.UNIT_CHANGE.getCode().equals(changeType)) {
SysUser user = ProModuleDS.exec(Ds.SYSTEM, () -> dao().fetch(SysUser.class, userId));
boolean deptIdEquals = String.valueOf(user.getDeptId() == null ? "" : user.getDeptId()).equals(currentUnitId);
boolean threeUnitIdEquals = String.valueOf(user.getThreeUnitId() == null ? "" : user.getThreeUnitId()).equals(currentThreeUnitId);
if (!deptIdEquals || !threeUnitIdEquals) {
Chain userChain = Chain.make("deptId", Long.valueOf(currentUnitId));
userChain.add("threeUnitId", Long.valueOf(currentThreeUnitId));
ProModuleDS.execVoid(Ds.SYSTEM, () -> dao().update(SysUser.class, userChain, Cnd.where("userId", "=", userId)));
UserHistory history = new UserHistory();
BeanUtils.copyProperties(user, history);
history.setChangeTime(new Date());
history.setChangeType(UserChangeType.UNIT_CHANGE.getCode());
dao().insert(history);
}
} else {
Sql userSql = Sqls.create("select userId,deptId,deptName,deptCode,unionId,unionName,unionCode,personType,userState from `user` where userId = @userId");
userSql.setParam("userId", userId);
userSql.setCallback(Sqls.callback.entity());
userSql.setEntity(dao().getEntity(AidFundMemberAuditRecord.class));
dao().execute(userSql);
Audit audit = new Audit();
audit.setAuditOpinion("台账直接变更");
dao().insert(audit);
AidFundMemberAuditRecord record = (AidFundMemberAuditRecord) userSql.getResult();
record.setIsJoin(false);
record.setStateId(AidFundMemberAuditState.AID_FUND_PASS);
record.setApplyTime(new Date());
record.setSource(AidFundMemberSource.BATCH.getCode());
record.setFundAuditId(audit.getId());
dao().insert(record);
ProModuleDS.execVoid(Ds.SYSTEM, () -> {
Chain userChain = Chain.make("aidFundMember", AidFundMemberMode.NONE.getCode());
userChain.add("aidFundMemberQuitTime", new Date());
ProModuleDS.execVoid(Ds.SYSTEM, () -> dao().update(SysUser.class, userChain, Cnd.where("userId", "=", userId)));
});
}
}
@Override
@DSTransactional
public void doDelete(String userId) {
ProModuleDS.execVoid(Ds.SYSTEM, () -> {
Chain userChain = Chain.make("aidFundMember",AidFundMemberMode.NONE.getCode());
userChain.add("aidFundMemberJoinTime",null);
userChain.add("aidFundMemberQuitTime",null);
dao().update(SysUser.class, userChain, Cnd.where("userId", "=", userId));
});
}
}
@@ -0,0 +1,82 @@
package com.ruoyi.additional.service.impl.evaluate;
import com.ruoyi.activity.api.domain.basic.ActivityUserScope;
import com.ruoyi.additional.api.domain.evaluate.Evaluate;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.evaluate.EvaluateManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.domain.PageForm;
import com.ruoyi.common.core.page.Pagination;
import com.ruoyi.common.core.service.BaseServiceImpl;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.springframework.stereotype.Service;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@Service
public class EvaluateManageServiceImpl extends BaseServiceImpl<Evaluate> implements EvaluateManageService {
public EvaluateManageServiceImpl(Dao dao) {
super(dao);
}
@Override
public void add(Evaluate evaluate) {
Evaluate eva = dao().insert(evaluate);
}
@Override
public void edit(Evaluate evaluate) {
dao().updateIgnoreNull(evaluate);
}
@Override
public Pagination pageData(PageForm pageForm, Cnd cnd) {
Sql sql = Sqls.create("""
SELECT
e.*,
s.groupName
FROM
evaluate e
LEFT JOIN activity_user_scope s ON e.groupId = s.groupId
$condition
""");
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public Object findOne(String id) {
Evaluate evaluate = dao().fetch(Evaluate.class, id);
ActivityUserScope activityUserScope = ProModuleDS.exec(Ds.ACTIVITY, () -> {
return dao().fetch(ActivityUserScope.class, Cnd.where("groupId", "=", evaluate.getGroupId()));
});
NutMap evaluateMap = Lang.obj2nutmap(evaluate);
evaluateMap.put("groupName", activityUserScope.getGroupName());
return evaluateMap;
}
@Override
public Object getEvaluateList(String userId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
*
FROM
evaluate
$condition
""");
sql.setCondition(cnd);
return listMap(sql);
}
}
@@ -0,0 +1,134 @@
package com.ruoyi.additional.service.impl.evaluate;
import com.ruoyi.activity.api.domain.Audit;
import com.ruoyi.additional.api.domain.evaluate.Evaluate;
import com.ruoyi.additional.api.domain.evaluate.EvaluateApply;
import com.ruoyi.additional.service.evaluate.EvaluateApplyService;
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.web.domain.AjaxResult;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
* @Author JyuHsin
* @Date 2023/2/6
* @Description
*/
@Service
public class EvaluateServiceApplyImpl extends BaseServiceImpl<EvaluateApply> implements EvaluateApplyService {
public EvaluateServiceApplyImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(PageForm pageForm, Cnd cnd) {
Sql sql = Sqls.create("""
SELECT
app.*,
user.userName as username,
user.deptName as unitName,
state.stateName,
state.stateColor,
e.name as evaluateName
FROM
`evaluate_apply` app
LEFT JOIN evaluate e on e.id = app.evaluateId
LEFT JOIN `user` user ON app.userId = user.userId
LEFT JOIN audit_state state ON state.stateId = app.stateId
$condition
""");
if (!AuthUtil.hasAnyRoles("admin, H06")) {
cnd.and("app.userId", "=", SecurityUtils.getUserId());
}
cnd.desc("app.applyTime");
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public Object findOne(String id) {
Sql sql = Sqls.create("""
SELECT
us.userName,
us.loginName,
us.deptName as unitName,
us.unionName,
ha.*,
state.stateName,
state.stateColor
FROM
`evaluate_apply` ha
LEFT JOIN `user` us ON us.userId = ha.userId
LEFT JOIN audit_state state ON state.stateId=ha.stateId
where ha.id = @id
""").setParam("id", id);
NutMap map = listMap(sql).get(0);
if (Strings.isNotBlank(map.getString("unitAuditId"))) {
map.setv("unitAudit", dao().fetch(Audit.class, Cnd.where("id", "=", map.getString("unitAuditId"))));
}
if (Strings.isNotBlank(map.getString("unionAuditId"))) {
map.setv("unionAudit", dao().fetch(Audit.class, Cnd.where("id", "=", map.getString("unionAuditId"))));
}
if (Strings.isNotBlank(map.getString("partyAuditId"))) {
map.setv("partyAudit", dao().fetch(Audit.class, Cnd.where("id", "=", map.getString("partyAuditId"))));
}
if (Strings.isNotBlank(map.getString("schoolAuditId"))) {
map.setv("schoolAudit", dao().fetch(Audit.class, Cnd.where("id", "=", map.getString("schoolAuditId"))));
}
return map;
}
@Override
public Object doDelete(String id) {
//EvaluateApply evaluateApply = dao().fetch(EvaluateApply.class, id);
dao().delete(EvaluateApply.class, id);
//TODO以后删附件
/* if (evaluateApply.getFiles() != null) {
evaluateApply.getFiles().forEach(item -> {
fileService.delete(item.getId(), item.getFilepath());
});
}*/
return null;
}
@Override
public AjaxResult verifyApply(String evaluateId) {
//申请人的工会分配的人数
int limitCount = 0;
Evaluate evaluate = dao().fetch(Evaluate.class, evaluateId);
List<NutMap> unionLimit = evaluate.getUnionLimit();
if (unionLimit != null && !unionLimit.isEmpty()) {
NutMap map = unionLimit.stream().filter(o -> Objects.equals(o.getString("id"), SecurityUtils.getUnionId())).findFirst().orElse(null);
limitCount = map != null ? map.getInt("limitCount") : 0;
}
//申请人工会已经申请的人数
int count = dao().count(EvaluateApply.class, Cnd.NEW().and("evaluateId", "=", evaluateId)
.and("unionId", "=", SecurityUtils.getUnionId())
.and("stateId", "in", List.of("1410", "1420", "1440", "1450", "1470", "1480", "1500", "1510", "1530")));
if (count >= limitCount) {
return AjaxResult.error("抱歉,此评优评先活动您所在分工会人数已满");
}
return AjaxResult.success();
}
}
@@ -0,0 +1,96 @@
package com.ruoyi.additional.service.impl.fund;
import cn.hutool.core.date.DateUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.ruoyi.additional.api.domain.fund.CostSet;
import com.ruoyi.additional.api.domain.fund.FundClub;
import com.ruoyi.additional.constant.Ds;
import com.ruoyi.additional.service.fund.ClubBudgetManageService;
import com.ruoyi.additional.util.ProModuleDS;
import com.ruoyi.common.core.service.BaseServiceImpl;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.api.domain.club.Sys_club;
import com.ruoyi.system.api.domain.club.Sys_club_user;
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.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author JyuHsin
* @Date 2023/2/10
* @Description
*/
@Service
public class ClubBudgetManageServiceImpl extends BaseServiceImpl<FundClub> implements ClubBudgetManageService {
public ClubBudgetManageServiceImpl(Dao dao) {
super(dao);
}
@Override
@DSTransactional
public AjaxResult issue() {
Sql sql = Sqls.create("""
select
jf.club_id,
club.id cid
from
`club` club
left join jf_club jf ON jf.club_id = club.id AND jf.`year` = @year
""").setParam("year", Calendar.getInstance().get(Calendar.YEAR));
List<Record> list = list(sql);
List<Sys_club_user> clubList = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao().query(Sys_club_user.class, Cnd.where("status", "=", "5"));
});
list.forEach(l -> {
int cynum = clubList.stream().filter(c -> c.getClubid().equals(l.getString("club_id"))).collect(Collectors.toList()).size();
String cid = l.getString("cid");
CostSet costsSet = dao().fetch(CostSet.class, Cnd.where("year", "=", DateUtil.thisYear()));
Float clubLeastMoney = costsSet.getClubLeastMoney();
Float clubAtMostMoney = costsSet.getClubAtMostMoney();
Float money = clubLeastMoney;
if (cynum > costsSet.getClubExceedNum()) {
money = clubLeastMoney + (cynum - costsSet.getClubExceedNum()) * costsSet.getClub_avg();
}
if (money > clubAtMostMoney) {
money = clubAtMostMoney;
}
Chain add = Chain.make("total_quota", money)
.add("state", 1)
.add("history_club_avg", costsSet.getClub_avg())
.add("history_member", cynum);
update(add, Cnd.where("year", "=", DateUtil.thisYear()).and("club_id", "=", cid));
});
return AjaxResult.success();
}
@Override
@DSTransactional
public AjaxResult doAdd(FundClub club) {
int clubCount = ProModuleDS.exec(Ds.SYSTEM, () -> {
return dao().count(Sys_club_user.class, Cnd.where("clubid", "=", club.getClub_id()));
});
club.setHistory_member(clubCount);
club.setYear(DateUtil.thisYear());
club.setState(1);
insert(club);
return AjaxResult.success();
}
}

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