This commit is contained in:
Paidax
2025-05-28 11:30:56 +08:00
parent d2412c998c
commit 0d8bdbb11b
11 changed files with 505 additions and 81 deletions
@@ -1,32 +1,56 @@
package io.v.nutz.zhgh.healthCheckup.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.result.Result;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.activity.models.ActivityUserScope;
import io.v.nutz.zhgh.healthCheckup.model.HealthCheckupProject;
import io.v.nutz.zhgh.healthCheckup.model.HealthCheckupProjectSubject;
import io.v.nutz.zhgh.healthCheckup.model.HealthCheckupUnionConfirm;
import io.v.nutz.zhgh.healthCheckup.model.HealthCheckupUserSelection;
import io.v.nutz.zhgh.healthCheckup.service.HealthCheckupProjectService;
import io.v.nutz.zhgh.healthCheckup.template.HealthCheckupImportTemp;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.dao.util.Daos;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName HealthCheckupListController
@@ -39,6 +63,8 @@ import java.util.List;
@At("/platform/healthCheckup/list/mange")
public class HealthCheckupListController {
@Inject
private Dao dao;
@Inject
private HealthCheckupProjectService healthCheckupProjectService;
@@ -58,6 +84,8 @@ public class HealthCheckupListController {
@Param(value = "unitId", required = false) String unitId,
@Param(value = "threeUnitId", required = false) String threeUnitId,
@Param(value = "unionGroupId", required = false) String unionGroupId) {
List<HealthCheckupUnionConfirm> confirms = dao.query(HealthCheckupUnionConfirm.class, Cnd.where("projectId", "=", projectId));
HealthCheckupProject project = healthCheckupProjectService.findOne(projectId);
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
@@ -66,6 +94,7 @@ public class HealthCheckupListController {
hcu.loginname,
hcu.username,
hcu.sex,
hcu.unionId,
hcu.unionname,
hcu.unitname,
hcu.threeUnitName,
@@ -81,20 +110,20 @@ public class HealthCheckupListController {
$condition
""").setParam("projectId", projectId);
sql.setCondition(cnd);
cnd.andEX("hcu.projectId", "=", projectId);
cnd.andEX("hcu.unionId", "=", unionId);
cnd.andEX("hcu.unitId", "=", unitId);
cnd.andEX("hcu.unionGroupId", "=", unionGroupId);
cnd.andEX("hcu.threeUnitId", "=", threeUnitId);
cnd.andEX("hcu.projectId","=",projectId);
if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionAdmin")) {
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
cnd.andEX("hcu.unionId", "=", Vi.getUnionId());
}
if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
}
cnd.groupBy("hcu.userId");
if (Vi.isNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), "ascending".equalsIgnoreCase(pageForm.getPageOrderBy()) ? "ASC" : "DESC");
} else {
@@ -109,10 +138,37 @@ public class HealthCheckupListController {
HealthCheckupProjectSubject subject = subjects.stream().filter(s -> s.getId().equals(v.getString("subjectId"))).findFirst().orElse(null);
v.setv("optionName", subject.getOptionName());
}
if (StrUtil.isNotBlank(v.getString("unionId"))) {
HealthCheckupUnionConfirm confirm = confirms.stream().filter(o -> o.getUnionId().equals(v.getString("unionId"))).findFirst().orElse(null);
v.setv("isAudit", confirm != null ? confirm.getIsAudit() : "");
v.setv("auditTime", confirm != null ? confirm.getAuditTime() : "");
}
});
return pagination;
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("healthCheckup.list.mange")
public Object doAuditUser(@Param(value = "projectId", required = false) String projectId,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "flag") Boolean flag) {
if (flag) {
dao.update(HealthCheckupUnionConfirm.class, Chain.make("isAudit", true)
.add("auditTime", DateUtil.date())
.add("auditUser", ShiroUtil.getUserId()),
Cnd.where("projectId", "=", projectId).and("unionId", "=", unionId));
} else {
dao.update(HealthCheckupUnionConfirm.class, Chain.make("isAudit", null)
.add("auditTime", null)
.add("auditUser", null),
Cnd.where("projectId", "=", projectId).and("unionId", "=", unionId));
}
return null;
}
@At
@ViReturn
@@ -167,4 +223,66 @@ public class HealthCheckupListController {
return sql.getResult();
}
}
@At
@ViReturn
@RequiresAuthentication
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
@Aop(TransAop.READ_COMMITTED)
public Object healthImport(TempFile file, String healthProjectId) {
List<HealthCheckupImportTemp> healthCheckupImportTemps = ExcelImportUtil.importExcel(file.getFile(), HealthCheckupImportTemp.class, new ImportParams());
List<String> loginNames = healthCheckupImportTemps.stream().filter(v -> Strings.isNotBlank(v.getLoginName())).map(v -> v.getLoginName()).collect(Collectors.toList());
//全部的user
Sql sql = Sqls.create("select loginname from sys_user");
List<String> allUserLoginNames = (List<String>) Daos.query(dao, sql.toString(), Sqls.callback.strList());
List<Sys_user> userList = dao.query(Sys_user.class, Cnd.where("loginname", "in", loginNames));
String errMsg = "系统中没有该用户的信息";
//导入数据不在全部user中的人员
List<HealthCheckupImportTemp> errorUsers = healthCheckupImportTemps.stream().filter(v -> !allUserLoginNames.contains(v.getLoginName())).collect(Collectors.toList());
HealthCheckupProject checkupProject = dao.fetch(HealthCheckupProject.class, healthProjectId);
ActivityUserScope userScope = dao.fetch(ActivityUserScope.class, Cnd.where("groupId", "=", checkupProject.getActivityGroupId()));
List<ActivityUserScope> userScopeList = new ArrayList<>();
userList.forEach(v -> {
ActivityUserScope s = new ActivityUserScope();
s.setGroupId(userScope.getGroupId());
s.setGroupName(userScope.getGroupName());
s.setUserId(v.getId());
s.setCreator(ShiroUtil.getUserId());
userScopeList.add(s);
});
dao.insert(userScopeList);
NutMap resultMap = NutMap.NEW();
resultMap.addv("totalCount", healthCheckupImportTemps.size());
resultMap.addv("successCount", userScopeList.size());
resultMap.addv("errorCount", errorUsers.size());
resultMap.addv("errorList", errorUsers.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误信息", errMsg);
}).collect(Collectors.toList()));
return Result.success(resultMap);
}
@At
@Ok("void")
public void downloadTem(HttpServletResponse response) {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
List<ExcelExportEntity> entities = List.of(
new ExcelExportEntity("姓名", "username", 20),
new ExcelExportEntity("工号", "loginname", 20)
);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, new ArrayList<>());
try {
ViTool.excelResponse(response, "参加人员.xlsx");
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -3,11 +3,12 @@ package io.v.nutz.zhgh.healthCheckup.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.zhgh.data.model.MatchConditionStructure;
import io.v.nutz.zhgh.data.service.MatchConditionStructureService;
import io.v.nutz.zhgh.healthCheckup.model.*;
import io.v.nutz.zhgh.healthCheckup.service.HealthCheckupProjectService;
import io.v.nutz.base.query.PageForm;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
@@ -23,6 +24,7 @@ import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -57,7 +59,6 @@ public class HealthCheckupProjectMangeController {
@Aop(TransAop.READ_COMMITTED)
public Object doAdd(HealthCheckupProject healthCheckupProject, @Param(value = "deleteRowIds", required = false) String[] deleteRowIds) {
healthCheckupProject.getHealthCheckupProjectSubjects().forEach(v -> {
if (Lang.isNotEmpty(v.getMatchCnd())) {
MatchConditionStructure save = matchConditionStructureService.save(v.getMatchCnd());
@@ -65,11 +66,14 @@ public class HealthCheckupProjectMangeController {
}
});
String projectId;
//如果是保存
if (StrUtil.isBlank(healthCheckupProject.getId())) {
healthCheckupProject.setYear(DateUtil.thisYear());
healthCheckupProjectService.insertWith(healthCheckupProject, "healthCheckupProjectSubjects");
HealthCheckupProject checkupProject = healthCheckupProjectService.insertWith(healthCheckupProject, "healthCheckupProjectSubjects");
projectId = checkupProject.getId();
} else {
projectId = healthCheckupProject.getId();
healthCheckupProjectService.dao().clear(HealthCheckupProjectSubject.class, Cnd.where("id", "in", deleteRowIds));
healthCheckupProject.getHealthCheckupProjectSubjects().forEach(v -> {
v.setProjectId(healthCheckupProject.getId());
@@ -77,8 +81,21 @@ public class HealthCheckupProjectMangeController {
healthCheckupProjectService.dao().insertOrUpdate(healthCheckupProject.getHealthCheckupProjectSubjects());
healthCheckupProjectService.update(healthCheckupProject);
}
return null;
healthCheckupProjectService.dao().clear(HealthCheckupUnionConfirm.class, Cnd.where("projectId", "=", projectId));
List<Sys_union> unionList = healthCheckupProjectService.dao().query(Sys_union.class, Cnd.NEW());
List<HealthCheckupUnionConfirm> confirmList = new ArrayList<>();
unionList.forEach(item -> {
HealthCheckupUnionConfirm c = new HealthCheckupUnionConfirm();
c.setProjectId(projectId);
c.setUnionId(item.getId());
c.setUnionName(item.getUnionname());
c.setUnionCode(item.getUnioncode());
c.setIsAudit(false);
confirmList.add(c);
});
healthCheckupProjectService.dao().insert(confirmList);
return null;
}
@@ -102,7 +119,8 @@ public class HealthCheckupProjectMangeController {
hcp.provideTimeEnd,
hcp.healthCheckupType,
IF((select count(userId) from health_checkup_user hcu where hcu.projectId = hcp.id) > 0,true,false) AS isHasUserList,
IF(NOW() > hcp.choiceTimeStart AND NOW() < hcp.choiceTimeEnd, true, false) AS isWithinChoiceTime
IF(NOW() > hcp.choiceTimeStart AND NOW() < hcp.choiceTimeEnd, true, false) AS isWithinChoiceTime,
IF(NOW() < hcp.choiceTimeStart, true, false) AS canCreated
FROM
health_checkup_project hcp
$condition
@@ -184,9 +202,9 @@ public class HealthCheckupProjectMangeController {
List<String> userSelectionIds = list.stream().map(v->v.getString("id")).collect(Collectors.toList());
List<String> userIds = list.stream().map(v -> v.getString("selectUserId")).collect(Collectors.toList());
healthCheckupProjectService.dao().clear(HealthCheckupUser.class,Cnd.where("projectId","=",healthCheckupProject.getId()));
healthCheckupProjectService.dao().clear(HealthCheckupUserSelection.class,Cnd.where("selectUserId","in",userIds));
healthCheckupProjectService.dao().clear(HealthCheckupUserCompanion.class,Cnd.where("userSelectionId","in",userSelectionIds));
healthCheckupProjectService.dao().clear(HealthCheckupUser.class,Cnd.where("projectId","=",healthCheckupProject.getId()));
healthCheckupProjectService.addHealthCheckupUser(healthCheckupProject);
return null;
}
@@ -0,0 +1,56 @@
package io.v.nutz.zhgh.healthCheckup.model;
import lombok.Data;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
@Data
@Table
public class HealthCheckupUnionConfirm {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("所属项目")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String projectId;
@Column
@Comment("工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("工会名称")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionName;
@Column
@Comment("工会编号")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionCode;
@Column
@Comment("是否确认")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isAudit;
@Column
@Comment("确认时间")
@ColDefine(type = ColType.DATETIME)
private Date auditTime;
@Column
@Comment("操作人")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String auditUser;
}
@@ -2,12 +2,11 @@ package io.v.nutz.zhgh.healthCheckup.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.service.impl.ViServiceImpl;
import io.v.nutz.zhgh.healthCheckup.model.HealthCheckupProject;
import io.v.nutz.zhgh.healthCheckup.model.HealthCheckupProjectSubject;
import io.v.nutz.zhgh.healthCheckup.service.HealthCheckupProjectService;
import io.v.nutz.zhgh.healthCheckup.service.HealthCheckupSingleService;
import io.v.nutz.base.service.impl.ViServiceImpl;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
@@ -35,19 +34,22 @@ public class HealthCheckupSingleServiceImpl extends ViServiceImpl<HealthCheckupP
HealthCheckupProject project = healthCheckupProjectService.findOne(projectId);
Sql sql = Sqls.create("""
SELECT
su.*,
(SELECT count( 1 ) FROM `health_checkup_user` hcu WHERE hcu.unionId = su.id and hcu.projectId = @projectId $unionGroupIdCnd ) sumCount
uc.unionId AS id,
uc.unionName AS unionname,
uc.unionCode AS unioncode,
SUM(IF(u.id is not null,1,0)) AS sumCount
FROM
sys_union su
health_checkup_union_confirm uc
LEFT JOIN health_checkup_user u ON u.unionId = uc.unionId
$condition
""").setParam("projectId",projectId);
CndPlus cnd = CndPlus.create();
cnd.andEX("su.id","=",unionId);
cnd.asc("su.unioncode");
Cnd cnd = Cnd.NEW();
cnd.andEX("uc.unionId","=",unionId);
cnd.and("uc.projectId", "=", projectId);
cnd.and("u.projectId", "=", projectId);
cnd.groupBy("uc.unionId");
cnd.asc("uc.unionCode");
sql.setCondition(cnd);
if (StrUtil.isNotBlank(unionGroupId)) {
sql.setVar("unionGroupIdCnd", "and u.unionGroupId = '%s'".formatted(unionGroupId));
}
//基层工会参加体检人数汇总
List<NutMap> healthCheckupList = listMap(sql);
//该体检项目下的套餐
@@ -101,6 +103,7 @@ public class HealthCheckupSingleServiceImpl extends ViServiceImpl<HealthCheckupP
});
labelList.add(NutMap.NEW().addv("label", "参加人数").addv("prop", "totalCount"));
labelList.add(NutMap.NEW().addv("label", "未选人数").addv("prop", "unselectedTeacherSum"));
labelList.add(NutMap.NEW().addv("label", "是否核对").addv("prop", "isAudit"));
return NutMap.NEW().addv("tableList", healthCheckupList).addv("tableColumn", labelList);
}
@@ -145,7 +148,7 @@ public class HealthCheckupSingleServiceImpl extends ViServiceImpl<HealthCheckupP
labelList.add(NutMap.NEW().addv("label", "身份证").addv("prop", "idCard").addv("width", 20));
labelList.add(NutMap.NEW().addv("label", "工会").addv("prop", "unionName"));
labelList.add(NutMap.NEW().addv("label", "单位").addv("prop", "unitName"));
labelList.add(NutMap.NEW().addv("label", "部门").addv("prop", "threeUnitName"));
// labelList.add(NutMap.NEW().addv("label", "部门").addv("prop", "threeUnitName"));
// labelList.add(NutMap.NEW().addv("label", "实名签领").addv("prop", "userSign"));
// labelList.add(NutMap.NEW().addv("label", "所选福利").addv("prop", "optionName"));
return labelList;
@@ -190,7 +193,6 @@ public class HealthCheckupSingleServiceImpl extends ViServiceImpl<HealthCheckupP
cnd.and("hcus.projectId", "=", projectId);
cnd.desc("hcus.subjectId");
}else if("1".equals(isSelected)){//查看未选择体检
HealthCheckupProject project = healthCheckupProjectService.findOne(projectId);
sql = Sqls.create("""
SELECT
u.id,
@@ -265,7 +267,6 @@ public class HealthCheckupSingleServiceImpl extends ViServiceImpl<HealthCheckupP
cnd.and("hcus.projectId", "=", projectId);
cnd.desc("hcus.subjectId");
}else if("1".equals(isSelected)){//查看未选择体检
HealthCheckupProject project = healthCheckupProjectService.findOne(projectId);
sql = Sqls.create("""
SELECT
u.id,
@@ -0,0 +1,21 @@
package io.v.nutz.zhgh.healthCheckup.template;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
@Data
public class HealthCheckupImportTemp {
@Excel(name = "工号")
private String loginName;
@Excel(name = "姓名")
private String userName;
@Excel(name = "工会")
private String unionName;
@Excel(name = "单位")
private String unitName;
}
@@ -106,10 +106,12 @@ public class MHealthCheckupListController {
p.name,
p.choiceTimeStart,
p.choiceTimeEnd,
p.cover
p.cover,
s.optionName
FROM
health_checkup_user_selection us
LEFT JOIN health_checkup_project p ON us.projectId = p.id
LEFT JOIN health_checkup_project_subject s ON s.id = us.subjectId
$condition
""");
Cnd cnd = Cnd.NEW();