From 0d8bdbb11bf3025cb5e074cce134e06b3ca86652 Mon Sep 17 00:00:00 2001 From: Paidax Date: Wed, 28 May 2025 11:30:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=93=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HealthCheckupListController.java | 124 +++++++++- .../HealthCheckupProjectMangeController.java | 30 ++- .../model/HealthCheckupUnionConfirm.java | 56 +++++ .../impl/HealthCheckupSingleServiceImpl.java | 29 +-- .../template/HealthCheckupImportTemp.java | 21 ++ .../MHealthCheckupListController.java | 4 +- .../views/mobile/healthCheckup/checkUp.html | 12 +- .../views/mobile/healthCheckup/mine.html | 4 + .../platform/healthCheckup/listMange.html | 224 +++++++++++++++++- .../healthCheckup/statisticsSingle.html | 22 +- src/test/aaa.html | 60 +++-- 11 files changed, 505 insertions(+), 81 deletions(-) create mode 100644 src/main/java/io/v/nutz/zhgh/healthCheckup/model/HealthCheckupUnionConfirm.java create mode 100644 src/main/java/io/v/nutz/zhgh/healthCheckup/template/HealthCheckupImportTemp.java diff --git a/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupListController.java b/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupListController.java index 655a03a..ed96b5b 100644 --- a/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupListController.java +++ b/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupListController.java @@ -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 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 healthCheckupImportTemps = ExcelImportUtil.importExcel(file.getFile(), HealthCheckupImportTemp.class, new ImportParams()); + List 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 allUserLoginNames = (List) Daos.query(dao, sql.toString(), Sqls.callback.strList()); + + List userList = dao.query(Sys_user.class, Cnd.where("loginname", "in", loginNames)); + String errMsg = "系统中没有该用户的信息"; + + //导入数据不在全部user中的人员 + List 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 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 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(); + } + } } diff --git a/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupProjectMangeController.java b/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupProjectMangeController.java index 50f77c6..9317441 100644 --- a/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupProjectMangeController.java +++ b/src/main/java/io/v/nutz/zhgh/healthCheckup/controller/HealthCheckupProjectMangeController.java @@ -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 unionList = healthCheckupProjectService.dao().query(Sys_union.class, Cnd.NEW()); + List 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 userSelectionIds = list.stream().map(v->v.getString("id")).collect(Collectors.toList()); List 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; } diff --git a/src/main/java/io/v/nutz/zhgh/healthCheckup/model/HealthCheckupUnionConfirm.java b/src/main/java/io/v/nutz/zhgh/healthCheckup/model/HealthCheckupUnionConfirm.java new file mode 100644 index 0000000..adfb3b1 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/healthCheckup/model/HealthCheckupUnionConfirm.java @@ -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; + +} diff --git a/src/main/java/io/v/nutz/zhgh/healthCheckup/service/impl/HealthCheckupSingleServiceImpl.java b/src/main/java/io/v/nutz/zhgh/healthCheckup/service/impl/HealthCheckupSingleServiceImpl.java index 0c069d3..eca5258 100644 --- a/src/main/java/io/v/nutz/zhgh/healthCheckup/service/impl/HealthCheckupSingleServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/healthCheckup/service/impl/HealthCheckupSingleServiceImpl.java @@ -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 healthCheckupList = listMap(sql); //该体检项目下的套餐 @@ -101,6 +103,7 @@ public class HealthCheckupSingleServiceImpl extends ViServiceImpl
基础信息
- + >--> - + @@ -531,8 +531,8 @@ layout("/mobile/platform.html"){ async getSelectInfo() { const resp = await $.post("/mobile/healthCheckup/getSelectInfo", { id: this.selectId }) this.formData = resp.data - const o = this.campusList.find((o) => o.id === this.formData.campus) - this.formData.campusName = o.campusName + // const o = this.campusList.find((o) => o.id === this.formData.campus) + // this.formData.campusName = o.campusName }, async getUserInfo() { const resp = await $.post("/mobile/healthCheckup/getUserInfo") diff --git a/src/main/resources/views/mobile/healthCheckup/mine.html b/src/main/resources/views/mobile/healthCheckup/mine.html index 42e5749..69e5e9b 100644 --- a/src/main/resources/views/mobile/healthCheckup/mine.html +++ b/src/main/resources/views/mobile/healthCheckup/mine.html @@ -94,6 +94,10 @@ layout("/mobile/platform.html"){ {{o.name}}
+
+ 所选套餐: + {{o.optionName}} +
开始时间: {{moment(o.choiceTimeStart).format('YYYY/MM/DD HH:mm')}} diff --git a/src/main/resources/views/platform/healthCheckup/listMange.html b/src/main/resources/views/platform/healthCheckup/listMange.html index c44d208..e80f51f 100644 --- a/src/main/resources/views/platform/healthCheckup/listMange.html +++ b/src/main/resources/views/platform/healthCheckup/listMange.html @@ -108,7 +108,12 @@ layout("/layouts/platform.html"){ - + - -