From 9a103d3ea960cfd801963876451ee0c141876dcb Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Fri, 26 Aug 2022 15:51:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E3=80=90=E4=B9=A6?= =?UTF-8?q?=E8=AE=B0=E6=97=A5=E5=BF=97=E3=80=91=E5=AF=BC=E5=85=A5-?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BA=AB=E4=BB=BD=E8=AF=81=E5=8F=B7=E3=80=82?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=97=B6=E9=97=B4=EF=BC=8C=E6=94=B9=E4=B8=BA?= =?UTF-8?q?datetime=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkdiaryServiceQueryFormDTO.java | 12 ++++ .../dto/result/WorkdiaryServiceRecordDTO.java | 10 ++- .../WorkdiaryServiceController.java | 11 ++- .../entity/WorkdiaryServiceRecordEntity.java | 7 +- .../excel/WorkdiaryServiceRecordExcel.java | 35 +++++++--- .../WorkdiaryServiceRecordService.java | 6 +- .../WorkdiaryServiceRecordServiceImpl.java | 64 ++++++++++++++---- .../mapper/WorkdiaryServiceRecordDao.xml | 1 + .../templates/workdiary_service_import.xlsx | Bin 8961 -> 8951 bytes 9 files changed, 116 insertions(+), 30 deletions(-) diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/workdiaryservice/WorkdiaryServiceQueryFormDTO.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/workdiaryservice/WorkdiaryServiceQueryFormDTO.java index 2f5a628916..3d581924a3 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/workdiaryservice/WorkdiaryServiceQueryFormDTO.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/workdiaryservice/WorkdiaryServiceQueryFormDTO.java @@ -1,7 +1,11 @@ package com.epmet.dto.form.workdiaryservice; import com.epmet.commons.tools.dto.form.PageFormDTO; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; /** * 工作日志-服务 @@ -23,4 +27,12 @@ public class WorkdiaryServiceQueryFormDTO extends PageFormDTO { //private Date serviceTime; private String remark; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date serviceTimeStart; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date serviceTimeEnd; + } diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/WorkdiaryServiceRecordDTO.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/WorkdiaryServiceRecordDTO.java index 98d4eacb1e..8e75f55c34 100755 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/WorkdiaryServiceRecordDTO.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/result/WorkdiaryServiceRecordDTO.java @@ -4,7 +4,9 @@ import java.io.Serializable; import java.util.Date; import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -65,6 +67,8 @@ public class WorkdiaryServiceRecordDTO implements Serializable { @NotBlank(message = "申请人为必填项", groups = { Save.class }) private String applicantId; + private String applicantIdCard; + /** * 申请人姓名 */ @@ -91,8 +95,10 @@ public class WorkdiaryServiceRecordDTO implements Serializable { /** * 服务时间 */ - @NotBlank(message = "服务时间为必填项", groups = { Save.class }) - private String serviceTime; + @NotNull(message = "服务时间为必填项", groups = { Save.class }) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date serviceTime; /** * 负责人姓名 diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkdiaryServiceController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkdiaryServiceController.java index ab69929616..230e3617ee 100755 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkdiaryServiceController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/WorkdiaryServiceController.java @@ -43,6 +43,7 @@ import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.file.Path; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -83,9 +84,11 @@ public class WorkdiaryServiceController implements ResultDataResolver { String applicantMobile = query.getApplicantMobile(); Integer pageNo = query.getPageNo(); Integer pageSize = query.getPageSize(); + Date startTime = query.getServiceTimeStart(); + Date endTime = query.getServiceTimeEnd(); PageData page = workdiaryServiceRecordService.page( - gridId, serviceType, applicantName, applicantAddress, serviceContent, applicantMobile, pageNo, pageSize); + gridId, serviceType, applicantName, applicantAddress, serviceContent, applicantMobile, startTime, endTime, pageNo, pageSize); return new Result>().ok(page); } @@ -151,7 +154,11 @@ public class WorkdiaryServiceController implements ResultDataResolver { String applicantAddress = query.getApplicantAddress(); String serviceContent = query.getServiceContent(); String applicantMobile = query.getApplicantMobile(); - workdiaryServiceRecordService.export(gridId, serviceType, applicantName, applicantAddress, serviceContent, applicantMobile, response); + Date serviceTimeStart = query.getServiceTimeStart(); + Date serviceTimeEnd = query.getServiceTimeEnd(); + + workdiaryServiceRecordService.export(gridId, serviceType, applicantName, applicantAddress, serviceContent, + applicantMobile, serviceTimeStart, serviceTimeEnd, response); } /** diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceRecordEntity.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceRecordEntity.java index 16db6c8bc5..a72064b8cd 100755 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceRecordEntity.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/entity/WorkdiaryServiceRecordEntity.java @@ -55,6 +55,11 @@ public class WorkdiaryServiceRecordEntity extends BaseEpmetEntity { */ private String applicantId; + /** + * 证件号 + */ + private String applicantIdCard; + /** * 申请人姓名 */ @@ -78,7 +83,7 @@ public class WorkdiaryServiceRecordEntity extends BaseEpmetEntity { /** * 服务时间 */ - private String serviceTime; + private Date serviceTime; /** * 负责人姓名 diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/WorkdiaryServiceRecordExcel.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/WorkdiaryServiceRecordExcel.java index 631c3ed943..07b2b19797 100755 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/WorkdiaryServiceRecordExcel.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/WorkdiaryServiceRecordExcel.java @@ -1,12 +1,18 @@ package com.epmet.excel; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.dto.result.WorkdiaryServiceRecordDTO; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; /** * 工作日志(服务)-记录 excel @@ -33,6 +39,10 @@ public class WorkdiaryServiceRecordExcel { @ExcelProperty(value = "申请人") private String applicantName; + @ColumnWidth(10) + @ExcelProperty(value = "证件号") + private String applicantIdCard; + @ColumnWidth(25) @ExcelProperty(value = "住址") private String applicantAddress; @@ -50,24 +60,27 @@ public class WorkdiaryServiceRecordExcel { @ExcelProperty(value = "负责人") private String principal; - @NotBlank(message = "服务时间必填") + @NotNull(message = "服务时间必填") @ColumnWidth(10) @ExcelProperty(value = "服务时间") - private String serviceTime; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date serviceTime; @ColumnWidth(20) @ExcelProperty(value = "备注") private String remark; public WorkdiaryServiceRecordExcel(WorkdiaryServiceRecordDTO dto) { - this.gridName = dto.getGridName(); - this.serviceTypeName = dto.getServiceTypeName(); - this.applicantName = dto.getApplicantName(); - this.applicantAddress = dto.getApplicantAddress(); - this.serviceContent = dto.getServiceContent(); - this.applicantMobile = dto.getApplicantMobile(); - this.principal = dto.getPrincipalName(); - this.serviceTime = dto.getServiceTime(); - this.remark = dto.getRemark(); + BeanUtil.copyProperties(dto, this); + //this.gridName = dto.getGridName(); + //this.serviceTypeName = dto.getServiceTypeName(); + //this.applicantName = dto.getApplicantName(); + //this.applicantAddress = dto.getApplicantAddress(); + //this.serviceContent = dto.getServiceContent(); + //this.applicantMobile = dto.getApplicantMobile(); + //this.principal = dto.getPrincipalName(); + //this.serviceTime = dto.getServiceTime(); + //this.remark = dto.getRemark(); } } \ No newline at end of file diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceRecordService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceRecordService.java index 4dfc2f3cb5..f574f47f17 100755 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceRecordService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/WorkdiaryServiceRecordService.java @@ -9,6 +9,7 @@ import com.epmet.excel.WorkdiaryServiceRecordExcel; import javax.servlet.http.HttpServletResponse; import java.nio.file.Path; +import java.util.Date; import java.util.List; import java.util.Map; @@ -31,7 +32,8 @@ public interface WorkdiaryServiceRecordService extends BaseService page(Map params); PageData page(String gridId, Short serviceType, String applicantName, String applicantAddress, - String serviceContent, String applicantMobile, Integer pageNo, Integer pageSize); + String serviceContent, String applicantMobile, Date serviceTimeStart, Date serviceTimeEnd, + Integer pageNo, Integer pageSize); /** * 默认查询 @@ -84,7 +86,7 @@ public interface WorkdiaryServiceRecordService extends BaseService page(String gridId, Short serviceType, String applicantName, String applicantAddress, - String serviceContent, String applicantMobile, Integer pageNo, Integer pageSize) { + String serviceContent, String applicantMobile, Date serviceTimeStart, Date serviceTimeEnd, + Integer pageNo, Integer pageSize) { LoginUserDetailsResultDTO currentStaff = getResultDataOrThrowsException(userOpenFeignClient.getLoginUserDetails(new LoginUserDetailsFormDTO( EpmetRequestHolder.getLoginUserApp(), EpmetRequestHolder.getLoginUserClient(), EpmetRequestHolder.getLoginUserId() @@ -142,6 +144,13 @@ public class WorkdiaryServiceRecordServiceImpl extends BaseServiceImpl stList = SpringContextUtils.getBean(WorkdiaryServiceTypeService.class).list(null, 1, 100); Map stMap = stList.stream().collect(Collectors.toMap(WorkdiaryServiceTypeDTO::getServiceType, WorkdiaryServiceTypeDTO::getServiceTypeName)); @@ -182,12 +191,28 @@ public class WorkdiaryServiceRecordServiceImpl extends BaseServiceImpl { - entity.setOrgIdPath(gi.getPids().concat(":").concat(gi.getId())); - entity.setAgencyId(gi.getPid()); - }); + LoginUserDetailsResultDTO currentStaff = getResultDataOrThrowsException(userOpenFeignClient.getLoginUserDetails(new LoginUserDetailsFormDTO( + EpmetRequestHolder.getLoginUserApp(), EpmetRequestHolder.getLoginUserClient(), EpmetRequestHolder.getLoginUserId() + )), ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "查询工作人员信息失败", "查询工作人员信息失败"); + + String staffOrgIdPath = currentStaff.getOrgIdPath(); + + GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(dto.getGridId()); + + if (gridInfo == null) { + // 说明网格是其他组织下的 + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "网格未找到", "网格未找到"); + } + + String gridOrgIdPath = gridInfo.getPids().concat(":").concat(gridInfo.getId()); + + if (!gridOrgIdPath.contains(staffOrgIdPath)) { + // 说明网格是其他组织下的 + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "所选网格不在您所属组织下", "所选网格不在您所属组织下"); + } + + entity.setOrgIdPath(gridOrgIdPath); + entity.setAgencyId(gridInfo.getPid()); IcResiUserDTO applicant = getResultDataOrThrowsException(userOpenFeignClient.getIcResiUserDTO(dto.getApplicantId()), ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "未找到申请人信息"); @@ -215,6 +240,7 @@ public class WorkdiaryServiceRecordServiceImpl extends BaseServiceImpl page = this.page(gridId, serviceType, applicantName, applicantAddress, serviceContent, applicantMobile, pageNo, pageSize); + PageData page = this.page(gridId, serviceType, applicantName, applicantAddress, serviceContent, + applicantMobile, serviceTimeStart, serviceTimeEnd, pageNo, pageSize); + List list = page.getList(); if (CollectionUtils.isEmpty(list)) { // 空的,导出结束 @@ -437,9 +465,21 @@ public class WorkdiaryServiceRecordServiceImpl extends BaseServiceImpl + diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/workdiary_service_import.xlsx b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/workdiary_service_import.xlsx index 06bf284e8b4126ca92f7360d17ab57001bbc1e49..0938c354cfd89f0ea9a8469f8c6c10544e664500 100644 GIT binary patch delta 4212 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 K2HG9~0001T#RkOy delta 4232 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