From 06fc4b5c76ef5898a1f0b3217bd6e22dc5746c3d Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 24 Aug 2022 10:03:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A4=BE=E4=BC=9A=E7=BB=84=E7=BB=87=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E6=A8=A1=E6=9D=BF=E3=80=81=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/IcSocietyOrgController.java | 82 ++++++++++++++++-- .../com/epmet/excel/IcSocietyOrgExcel.java | 27 ++---- .../epmet/excel/IcSocietyOrgExportExcel.java | 42 +++++++++ .../service/impl/IcSocietyOrgServiceImpl.java | 72 ++++++++------- .../templates/societyorg_import_template.xlsx | Bin 0 -> 8953 bytes 5 files changed, 164 insertions(+), 59 deletions(-) create mode 100644 epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExportExcel.java create mode 100644 epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java index 2b07959e33..ca877fda19 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java @@ -18,13 +18,17 @@ package com.epmet.controller; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.security.dto.TokenDto; -import com.epmet.commons.tools.utils.ExcelPoiUtils; -import com.epmet.commons.tools.utils.ExcelUtils; -import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.*; +import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.form.AddSocietyOrgFormDTO; import com.epmet.dto.form.EditSocietyOrgFormDTO; @@ -33,18 +37,26 @@ import com.epmet.dto.form.demand.ServiceQueryFormDTO; import com.epmet.dto.result.GetListSocietyOrgResultDTO; import com.epmet.dto.result.demand.OptionDTO; import com.epmet.excel.IcSocietyOrgExcel; +import com.epmet.excel.IcSocietyOrgExportExcel; import com.epmet.service.IcSocietyOrgService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.net.URLEncoder; import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -129,11 +141,46 @@ public class IcSocietyOrgController { **/ @PostMapping("export") public void export(@LoginUser TokenDto tokenDto, @RequestBody GetListSocietyOrgFormDTO formDTO, HttpServletResponse response) throws Exception { + //废弃原来的导出 + // formDTO.setCustomerId(tokenDto.getCustomerId()); + // formDTO.setStaffId(tokenDto.getUserId()); + // formDTO.setIsPage(false); + // GetListSocietyOrgResultDTO list = societyOrgService.getList(formDTO); + // ExcelUtils.exportExcelToTarget(response, null, list.getList(), IcSocietyOrgExportExcel.class); + formDTO.setCustomerId(tokenDto.getCustomerId()); formDTO.setStaffId(tokenDto.getUserId()); formDTO.setIsPage(false); - GetListSocietyOrgResultDTO list = societyOrgService.getList(formDTO); - ExcelUtils.exportExcelToTarget(response, null, list.getList(), IcSocietyOrgExcel.class); + ExcelWriter excelWriter = null; + formDTO.setPageNo(NumConstant.ONE); + formDTO.setPageSize(NumConstant.TEN_THOUSAND); + try { + String fileName = "社会组织" + DateUtils.format(new Date()) + ".xlsx"; + excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcSocietyOrgExportExcel.class).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); + GetListSocietyOrgResultDTO data = null; + List list = null; + do { + data = societyOrgService.getList(formDTO); + list = ConvertUtils.sourceToTarget(data.getList(), IcSocietyOrgExportExcel.class); + formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE); + excelWriter.write(list, writeSheet); + } while (org.apache.commons.collections4.CollectionUtils.isNotEmpty(list) && list.size() == formDTO.getPageSize()); + } catch (EpmetException e) { + response.reset(); + response.setCharacterEncoding("UTF-8"); + response.setHeader("content-type", "application/json; charset=UTF-8"); + PrintWriter printWriter = response.getWriter(); + Result result = new Result<>().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),e.getMsg()); + printWriter.write(JSON.toJSONString(result)); + printWriter.close(); + } catch (Exception e) { + log.error("社会组织export exception", e); + } finally { + if (excelWriter != null) { + excelWriter.finish(); + } + } } /** @@ -168,4 +215,29 @@ public class IcSocietyOrgController { return new Result().ok(str); } + + /** + * 下载社会组织导入模板 + * @param response + * @throws IOException + */ + @RequestMapping(value = "import-template-download", method = {RequestMethod.GET, RequestMethod.POST}) + public void downloadTemplate(HttpServletResponse response) throws IOException { + response.setCharacterEncoding("UTF-8"); + response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition"); + response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("社区组织导入模板", "UTF-8") + ".xlsx"); + + InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/societyorg_import_template.xlsx"); + try { + ServletOutputStream os = response.getOutputStream(); + IOUtils.copy(is, os); + } finally { + if (is != null) { + is.close(); + } + } + } + + } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExcel.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExcel.java index c4392b5e5a..e48c6cb6d6 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExcel.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExcel.java @@ -34,37 +34,28 @@ import java.io.Serializable; @Data public class IcSocietyOrgExcel extends ExcelVerifyInfo implements Serializable { - @Excel(name = "组织名称") + @Excel(name = "所属组织") @NotBlank(message = "不能为空") private String agencyName; - @Excel(name = "社会组织名称") + @Excel(name = "组织名称") @NotBlank(message = "不能为空") @Length(max=50,message = "不能超过50个字") private String societyName; - @Excel(name = "服务事项") + @Excel(name = "服务内容") @NotBlank(message = "不能为空") @Length(max=1000,message = "不能超过1000个字") private String serviceMatters; - @Excel(name = "负责人") - @NotBlank(message = "不能为空") - @Length(max=20,message = "不能超过20个字") - private String personInCharge; - - @Excel(name = "负责人电话") + @Excel(name = "服务电话") @NotBlank(message = "不能为空") @Length(max=11,message = "不能超过11个字") private String mobile; - @Excel(name = "起始服务时间") + @Excel(name = "服务时间") @NotBlank(message = "不能为空") - private String serviceStartTime; - - @Excel(name = "终止服务时间") - @NotBlank(message = "不能为空") - private String serviceEndTime; + private String serviceTimeStr; @Excel(name = "管理员姓名") private String adminStaffName; @@ -72,10 +63,4 @@ public class IcSocietyOrgExcel extends ExcelVerifyInfo implements Serializable { @Excel(name = "地址") private String address; - @Excel(name = "经度") - private String longitude; - - @Excel(name = "维度") - private String latitude; - } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExportExcel.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExportExcel.java new file mode 100644 index 0000000000..bf914d42d6 --- /dev/null +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgExportExcel.java @@ -0,0 +1,42 @@ +package com.epmet.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * @Description + * @Author yzm + * @Date 2022/8/24 8:41 + */ +@Data +public class IcSocietyOrgExportExcel { + @ExcelProperty(value = "所属组织") + @ColumnWidth(30) + private String agencyName; + + @ExcelProperty(value = "组织名称") + @ColumnWidth(30) + private String societyName; + + @ColumnWidth(50) + @ExcelProperty(value = "服务内容") + private String serviceMatters; + + @ColumnWidth(20) + @ExcelProperty(value = "服务电话") + private String mobile; + + @ColumnWidth(20) + @ExcelProperty(value = "服务时间") + private String serviceTimeStr; + + @ColumnWidth(20) + @ExcelProperty(value = "管理员姓名") + private String adminStaffName; + + @ColumnWidth(30) + @ExcelProperty(value = "地址") + private String address; +} + diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java index 800d2e447c..16e1cee8f4 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java @@ -43,6 +43,7 @@ import com.epmet.service.IcSocietyOrgService; import com.epmet.service.IcUserDemandRecService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +53,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -232,53 +232,59 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl map=new HashMap<>(); //2.查询绑定的管理员信息 - Set staffNames = list.stream().map(item -> item.getAdminStaffName().trim()).collect(Collectors.toSet()); - GetByRealNamesFormDTO dto = new GetByRealNamesFormDTO(); - dto.setCustomerId(customerId); - dto.setRealNames(staffNames); - Result> staffResult = epmetUserOpenFeignClient.getByRealNames(dto); - if (!staffResult.success()) { - throw new RenException("获取工作人员基础信息失败......"); - } - if (null == staffResult.getData()) { - Iterator iter = list.iterator(); - while (iter.hasNext()) { - IcSocietyOrgExcel obj = iter.next(); - numList.add(obj.getRowNum()); - iterator.remove(); + Set staffNames = list.stream().filter(t -> StringUtils.isNotBlank(t.getAdminStaffName())).map(item -> item.getAdminStaffName().trim()).collect(Collectors.toSet()); + if(!CollectionUtils.isEmpty(staffNames)){ + GetByRealNamesFormDTO dto = new GetByRealNamesFormDTO(); + dto.setCustomerId(customerId); + dto.setRealNames(staffNames); + Result> staffResult = epmetUserOpenFeignClient.getByRealNames(dto); + if (!staffResult.success()) { + throw new RenException("获取工作人员基础信息失败......"); } - return numList; + if (null == staffResult.getData()) { + Iterator iter = list.iterator(); + while (iter.hasNext()) { + IcSocietyOrgExcel obj = iter.next(); + numList.add(obj.getRowNum()); + iterator.remove(); + } + return numList; + } + map= staffResult.getData().stream().collect(Collectors.toMap(CustomerStaffDTO::getRealName, CustomerStaffDTO::getUserId)); } - Map map = staffResult.getData().stream().collect(Collectors.toMap(CustomerStaffDTO::getRealName, CustomerStaffDTO::getUserId)); //3.遍历封装有效数据 List houseEntityList = new ArrayList<>(); Iterator iterator1 = list.iterator(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (iterator1.hasNext()) { - IcSocietyOrgExcel icHouseExcel = iterator1.next(); + IcSocietyOrgExcel icSocietyOrgExcel = iterator1.next(); IcSocietyOrgEntity entity = new IcSocietyOrgEntity(); entity.setCustomerId(customerId); entity.setAgencyId(staffInfoCache.getAgencyId()); entity.setPids(staffInfoCache.getAgencyPIds()); - entity.setSocietyName(icHouseExcel.getSocietyName()); - entity.setServiceMatters(icHouseExcel.getServiceMatters()); - entity.setPersonInCharge(icHouseExcel.getPersonInCharge()); - entity.setMobile(icHouseExcel.getMobile()); - entity.setServiceStartTime(sdf.parse(icHouseExcel.getServiceStartTime())); - entity.setServiceEndTime(sdf.parse(icHouseExcel.getServiceEndTime())); - entity.setAdminStaffId(map.containsKey(icHouseExcel.getAdminStaffName().trim()) ? map.get(icHouseExcel.getAdminStaffName().trim()) : ""); - if ("".equals(entity.getAdminStaffId())) { - numList.add(icHouseExcel.getRowNum()); - log.warn(String.format("绑定的管理员不存在,管理员名称->%s,行号->%s", icHouseExcel.getAdminStaffName(), icHouseExcel.getRowNum())); + entity.setSocietyName(icSocietyOrgExcel.getSocietyName()); + entity.setServiceMatters(icSocietyOrgExcel.getServiceMatters()); + //负责人去掉 + // entity.setPersonInCharge(icSocietyOrgExcel.getPersonInCharge()); + entity.setMobile(icSocietyOrgExcel.getMobile()); + //服务时间手动输入 + entity.setServiceTimeStr(icSocietyOrgExcel.getServiceTimeStr()); + // entity.setServiceStartTime(sdf.parse(icHouseExcel.getServiceStartTime())); + // entity.setServiceEndTime(sdf.parse(icHouseExcel.getServiceEndTime())); + entity.setAdminStaffId(MapUtils.isNotEmpty(map)&&map.containsKey(icSocietyOrgExcel.getAdminStaffName().trim()) ? map.get(icSocietyOrgExcel.getAdminStaffName().trim()) : ""); + if (StringUtils.isBlank(entity.getAdminStaffId())) { + numList.add(icSocietyOrgExcel.getRowNum()); + log.warn(String.format("绑定的管理员不存在,管理员名称->%s,行号->%s", icSocietyOrgExcel.getAdminStaffName(), icSocietyOrgExcel.getRowNum())); iterator1.remove(); continue; } - entity.setAddress(icHouseExcel.getAddress()); - entity.setLongitude(icHouseExcel.getLongitude()); - entity.setLatitude(icHouseExcel.getLatitude()); + entity.setAddress(icSocietyOrgExcel.getAddress()); + //经纬度不能导入 + // entity.setLongitude(icHouseExcel.getLongitude()); + // entity.setLatitude(icHouseExcel.getLatitude()); houseEntityList.add(entity); } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5d02dae502b5326319fb9578a340a4d624c0fea2 GIT binary patch literal 8953 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 literal 0 HcmV?d00001