diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/controller/EpidemicUserErrorController.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/controller/EpidemicUserErrorController.java index 9300cd2..d3a961b 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/controller/EpidemicUserErrorController.java +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/controller/EpidemicUserErrorController.java @@ -88,4 +88,12 @@ public class EpidemicUserErrorController { ExcelUtils.exportExcelToTarget(response, null, list, EpidemicUserErrorExcel.class); } + @GetMapping("export4Room") + @LogOperation("导出") + public void export4Room(@RequestParam Map params, HttpServletResponse response) throws Exception { + List list = epidemicUserErrorService.getErrorInfoByMax(); + + ExcelUtils.exportExcelToTarget(response, null, list, EpidemicUserErrorExcel.class); + } + } diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/excel/EpidemicUserError4RoomExcel.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/excel/EpidemicUserError4RoomExcel.java new file mode 100644 index 0000000..bd701c8 --- /dev/null +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/excel/EpidemicUserError4RoomExcel.java @@ -0,0 +1,42 @@ +package com.elink.esua.epdc.vaccine.epidemic.excel; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +/** + * 错误人员信息表 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 2021-03-02 + */ +@Data +public class EpidemicUserError4RoomExcel { + + @Excel(name = "错误信息") + private String errorInfo; + + @Excel(name = "姓名") + private String userName; + + @Excel(name = "身份证号码") + private String selfIdentityNo; + + @Excel(name = "联系电话") + private String mobile; + + @Excel(name = "小区") + private String plot; + + @Excel(name = "楼号") + private String buildingNo; + + @Excel(name = "单元") + private String unit; + + @Excel(name = "房号") + private String roomNo; + + @Excel(name = "与户主关系") + private String relation; + +} diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java index 702c463..01399fd 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/epidemic/service/impl/EpidemicUserInfoServiceImpl.java @@ -777,6 +777,8 @@ public class EpidemicUserInfoServiceImpl extends CrudServiceImpl + * @author work@yujt.net.cn + * @date 2019/9/19 10:15 + */ + @PostMapping(value = "oss/file/uploadFile", consumes = MediaType.APPLICATION_JSON_VALUE) + Result uploadFile(UploadToOssDTO dto); + +} diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/feign/fallback/VimOssFeignClientFallback.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/feign/fallback/VimOssFeignClientFallback.java new file mode 100644 index 0000000..39c0817 --- /dev/null +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/feign/fallback/VimOssFeignClientFallback.java @@ -0,0 +1,22 @@ +package com.elink.esua.epdc.vaccine.feign.fallback; + +import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; +import com.elink.esua.epdc.commons.tools.utils.ModuleUtils; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.UploadToOssDTO; +import com.elink.esua.epdc.vaccine.feign.VimOssFeignClient; +import org.springframework.stereotype.Component; + +/** + * @author work@yujt.net.cn + * @date 19/9/19 10:12 + */ +@Component +public class VimOssFeignClientFallback implements VimOssFeignClient { + + @Override + public Result uploadFile(UploadToOssDTO dto) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_OSS_SERVER, "uploadFile", dto.getFileName()); + } + +} diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/controller/BuildingUnitController.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/controller/BuildingUnitController.java index ac0143b..1c6e857 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/controller/BuildingUnitController.java +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/controller/BuildingUnitController.java @@ -31,7 +31,6 @@ import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; import com.elink.esua.epdc.config.QrCodeProperties; import com.elink.esua.epdc.dto.epidemic.DictOptionDTO; import com.elink.esua.epdc.dto.personroom.EpidemicBuildingUnitDTO; -import com.elink.esua.epdc.dto.personroom.EpidemicPlotBuildingDTO; import com.elink.esua.epdc.dto.personroom.form.HouseQrcodeFormDTO; import com.elink.esua.epdc.dto.personroom.result.EpidemicBuildingUnitDetailResultDTO; import com.elink.esua.epdc.vaccine.epidemic.utils.HouseQRcodeUtils; @@ -199,4 +198,29 @@ public class BuildingUnitController { return new Result>().ok(list); } + /** + * @return java.lang.String + * @describe: 批量生成房屋的房屋编码和一户一档二维码 + * @author wangtong + * @date 2022/6/6 14:39 + * @params [] + */ + @PostMapping("createBatchHouseCodeAndUrl") + public Result createBatchHouseCodeAndUrl() { + return epidemicBuildingUnitService.createBatchHouseCodeAndUrl(); + } + + /** + * @return void + * @describe: 批量下载一户一档的二维码 + * @author wangtong + * @date 2022/5/31 17:58 + * @params [loginUser, formDTO, response] + */ + @PostMapping(value = "/downloadZip") + public void downloadZip(HttpServletResponse response) throws Exception { + epidemicBuildingUnitService.downloadZip(response); + + } + } diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/dao/EpidemicBuildingUnitDao.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/dao/EpidemicBuildingUnitDao.java index c8fda15..7f58b42 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/dao/EpidemicBuildingUnitDao.java +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/dao/EpidemicBuildingUnitDao.java @@ -61,6 +61,26 @@ public interface EpidemicBuildingUnitDao extends BaseDao getUnitPage(Map params); + /** + * 展示所有没有二维码的房屋 + * + * @param + * @return java.util.List + * @author zhy + * @date 2022/4/6 17:22 + */ + List listUnitHasNotUrl(); + + /** + * 展示所有没有二维码的房屋 + * + * @param + * @return java.util.List + * @author zhy + * @date 2022/4/6 17:22 + */ + List listUnitHasUrl(); + /** * 获取详情 * diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/entity/EpidemicBuildingUnitEntity.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/entity/EpidemicBuildingUnitEntity.java index 802b555..85b0219 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/entity/EpidemicBuildingUnitEntity.java +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/entity/EpidemicBuildingUnitEntity.java @@ -180,4 +180,9 @@ public class EpidemicBuildingUnitEntity extends BasePingyinEntity { * 房屋码(5位数字自增) */ private Integer roomMaCode; + + /** + * 二维码 + */ + private String maUrl; } diff --git a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/service/EpidemicBuildingUnitService.java b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/service/EpidemicBuildingUnitService.java index 7cb5b86..9f55df7 100644 --- a/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/service/EpidemicBuildingUnitService.java +++ b/epdc-cloud-vim-yushan/src/main/java/com/elink/esua/epdc/vaccine/personroom/service/EpidemicBuildingUnitService.java @@ -29,6 +29,7 @@ import com.elink.esua.epdc.dto.personroom.result.EpidemicUnitInfoResultDTO; import com.elink.esua.epdc.vaccine.personroom.entity.EpidemicBuildingUnitEntity; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -129,6 +130,7 @@ public interface EpidemicBuildingUnitService extends CrudService page(Map params) { IPage page = getPage(params); @@ -317,6 +335,88 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl list = baseDao.listUnitHasNotUrl(); + if (!list.isEmpty()) { + list.forEach(item -> { + String url = ""; + try { + url = createHouseQrcodeUrl(item); + } catch (Exception e) { + throw new RenException("房屋码上传失败"); + } + item.setMaUrl(url); + }); + List updateList = ConvertUtils.sourceToTarget(list, EpidemicBuildingUnitEntity.class); + updateBatchById(updateList); + } + return new Result().ok("批量生成成功"); + } + + @Override + public void downloadZip(HttpServletResponse response) throws Exception { + //response + response.reset(); + //文件的名称 + String downloadFilename = "二维码压缩包.zip"; + //转换中文否则可能会产生乱码 + downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8"); + // 指明response的返回对象是文件流 + response.setContentType("application/octet-stream; charset=UTF-8"); + //设置下载格式和名称 + response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename); + ZipOutputStream zip = new ZipOutputStream(response.getOutputStream()); + + List houseList = baseDao.listUnitHasUrl(); + + for (EpidemicBuildingUnitDTO house : houseList) { + + BufferedImage image = HouseQRcodeUtils.drawHouseQRImage(house.getBuildingName() + house.getUnit() + house.getRoomNo(), + qrCodeProperties.getPre() + house.getRoomCode()); + + try { + byte[] buf = new byte[8192]; + int len; + //添加到zip + zip.putNextEntry(new ZipEntry(getFileName(house))); + InputStream inputStream = bufferedImageToInputStream(image); + //输出压缩包 + while ((len = inputStream.read(buf)) > 0) { + zip.write(buf, 0, len); + } + inputStream.close(); + } catch (IOException e) { + throw new RenException("组装zip失败"); + } + } + zip.close(); + } + + /** + * 将BufferedImage转换为InputStream + * + * @param image: 图片流 + * @date 2022/4/8 15:29 + * @author YD + */ + public static InputStream bufferedImageToInputStream(BufferedImage image) throws IOException { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + ImageIO.write(image, "png", os); + try (InputStream input = new ByteArrayInputStream(os.toByteArray())) { + return input; + } + } + + /** + * 获取文件名 + */ + public static String getFileName(EpidemicBuildingUnitDTO house) { + return house.getPlotName() + File.separator + house.getBuildingName() + File.separator + house.getUnit() + File.separator + house.getRoomNo() + ".png"; + } + private void saveOrUpdateOwners(List owners, Long unitId) { List dtoList = owners.stream().filter(item -> StringUtils.isNotBlank(item.getIdCard())).collect(Collectors.toList()); List list = ConvertUtils.sourceToTarget(dtoList, EpidemicUnitOwnerEntity.class); @@ -435,19 +535,14 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl>>>>>>>>>>>>>>>>>>>>>>>>>>A"); // 补充人房关系 int roomCode = getMaxCode(); - log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>B" + roomCode); List unitList = listAllUnitInfo(parentAndAllDeptDTO.getGrid()); List addOwner = new ArrayList<>(); for (EpidemicUserInfoEntity item : addList) { - log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>C"); // 只有信息完整的才进行匹配 - Optional unitOptional = unitList.stream().filter(unit -> unit.getPlotName().equals(item.getPlot()) && unit.getBuildingName().equals(item.getBuildingNo()) && unit.getUnit().equals(item.getUnit()) && unit.getRoomNo().equals(item.getRoomNo())).findFirst(); if (unitOptional.isPresent()) { - log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>D"); EpidemicUnitOwnerEntity entity = new EpidemicUnitOwnerEntity(); entity.setIdCard(item.getIdCard()); entity.setUnitId(unitOptional.get().getUnitId()); @@ -455,10 +550,8 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl>>>>>>>>>>>>>>>>>>>>>>>>>>E" + buildingList.toString()); Optional buildingOptional = buildingList.stream().filter(build -> build.getPlotName().equals(item.getPlot()) && build.getBuildingName().equals(item.getBuildingNo())).findFirst(); if (buildingOptional.isPresent()) { - log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>F" + buildingOptional.get()); EpidemicBuildingUnitEntity unitEntity = new EpidemicBuildingUnitEntity(); unitEntity.setBuildingId(buildingOptional.get().getId()); unitEntity.setUnit(item.getUnit().trim().toUpperCase()); @@ -560,4 +653,26 @@ public class EpidemicBuildingUnitServiceImpl extends CrudServiceImpl().ok(houseInfoResultDTO); } + public String createHouseQrcodeUrl(EpidemicBuildingUnitDTO house) throws Exception { + //url组成:小程序地址?房屋编码 + String url = qrCodeProperties.getPre() + house.getRoomCode(); + String fileName = house.getBuildingName() + house.getUnit() + house.getRoomNo() + ".png"; + BufferedImage image = HouseQRcodeUtils.drawHouseQRImage(house.getBuildingName() + house.getUnit() + house.getRoomNo(), url); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + ImageIO.write(image, "png", out); + UploadToOssDTO dto = new UploadToOssDTO(); + dto.setFileName(fileName); + dto.setFileByte(out.toByteArray()); + Result ossResult = ossFeignClient.uploadFile(dto); + if (null == ossResult || !ossResult.success() || null == ossResult.getData()) { + throw new RenException("房屋码上传失败"); + } else { + return ossResult.getData(); + } + } catch (IOException e) { + throw new RenException("上传一户一档二维码失败"); + } + } + } diff --git a/epdc-cloud-vim-yushan/src/main/resources/mapper/personroom/EpidemicBuildingUnitDao.xml b/epdc-cloud-vim-yushan/src/main/resources/mapper/personroom/EpidemicBuildingUnitDao.xml index 6cf3af6..06ab4d6 100644 --- a/epdc-cloud-vim-yushan/src/main/resources/mapper/personroom/EpidemicBuildingUnitDao.xml +++ b/epdc-cloud-vim-yushan/src/main/resources/mapper/personroom/EpidemicBuildingUnitDao.xml @@ -90,6 +90,34 @@ ORDER BY u.CREATED_TIME DESC + + + +