Browse Source

一户一档单个二维码下载;及批量打包zip下载

feature/teamB_zz_wgh
Jackwang 3 years ago
parent
commit
62b84a208c
  1. 40
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/HouseQrcodeEnum.java
  2. 19
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseQrcodeFormDTO.java
  3. 5
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcHouseListResultDTO.java
  4. 72
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  5. 8
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java
  6. 5
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcHouseEntity.java
  7. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java
  8. 82
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java
  9. 16
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

40
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/HouseQrcodeEnum.java

@ -0,0 +1,40 @@
package com.epmet.commons.tools.enums;
/**
* @describe: 一户一档二维码信息
* @author wangtong
* @date 2022/6/1 13:34
* @params
* @return
*/
public enum HouseQrcodeEnum {
SUFFIX(".png", "二维码格式的后缀"),
PREFIX("http://localhost:8080/epmet-oper-gov", "二维码地址的前缀");
private String code;
private String name;
HouseQrcodeEnum(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

19
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseQrcodeFormDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @program: epmet-cloud
* @description:
* @author: wangtong
* @create: 2022-06-01 13:44
**/
@Data
public class HouseQrcodeFormDTO implements Serializable {
@NotNull(message = "id不可为空")
private String id;
}

5
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/IcHouseListResultDTO.java

@ -81,5 +81,10 @@ public class IcHouseListResultDTO implements Serializable {
private Double sort;
/**
* 房屋编码
*/
private String houseCode;
}

72
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java

@ -30,13 +30,16 @@ import com.epmet.commons.tools.annotation.MaskResponse;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.form.IcHouseFormDTO;
import com.epmet.commons.tools.enums.HouseQrcodeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.bean.HouseInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.BarcodeUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
@ -44,6 +47,7 @@ import com.epmet.commons.tools.utils.poi.excel.handler.ExcelFillRowMergeStrategy
import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.IcHouseDao;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
@ -61,9 +65,12 @@ import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.PrintWriter;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -90,6 +97,9 @@ public class HouseController implements ResultDataResolver {
@Autowired
private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient;
@Autowired
private IcHouseDao icHouseDao;
@PostMapping("houselist")
@MaskResponse(fieldNames = {"ownerIdCard", "ownerPhone"},
fieldsMaskType = { MaskResponse.MASK_TYPE_ID_CARD, MaskResponse.MASK_TYPE_MOBILE })
@ -415,4 +425,62 @@ public class HouseController implements ResultDataResolver {
}
}
/**
* Desc: 生成某类型下的二维码
* @param formDTO
* @author zxc
* @date 2022/3/2 10:32 上午
*/
@PostMapping("createHouseQrcode")
public void createQrCode(@RequestBody HouseQrcodeFormDTO formDTO, HttpServletResponse response){
ValidatorUtils.validateEntity(formDTO);
try {
IcHouseListResultDTO house = icHouseDao.selectHouseQrcodeById(formDTO.getId());
if(null == house){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到房屋信息","未查到房屋信息");
}
//url组成:小程序地址?房屋编码
String url = HouseQrcodeEnum.PREFIX.getCode()+"?houseCode="+house.getHouseCode();
BufferedImage image = BarcodeUtils.drawQRImage(house.getNeighborHoodName() + house.getBuildingName() +house.getUnitNum()+ house.getDoorName(), url);
//BufferedImage 转 InputStream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageOutputStream imageOutput = ImageIO.createImageOutputStream(byteArrayOutputStream);
ImageIO.write(image, "png", imageOutput);
InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
long length = imageOutput.length();
String fileName = house.getNeighborHoodName() + house.getBuildingName() +house.getUnitNum()+ house.getDoorName()+".png";
response.setContentType("application/octet-stream");
response.setContentLength((int)length);
response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName, StrConstant.UTF_8));
//输出流
byte[] bytes = new byte[1024];
OutputStream outputStream = response.getOutputStream();
long count = 0;
while(count < length){
int len = inputStream.read(bytes, 0, 1024);
count +=len;
outputStream.write(bytes, 0, len);
}
outputStream.flush();
} catch (Exception e) {
log.error("method exception", e);
}
}
/**
* @describe: 批量下载一户一档的二维码
* @author wangtong
* @date 2022/5/31 17:58
* @params [loginUser, formDTO, response]
* @return void
*/
@PostMapping(value = "/downloadZip")
public void downloadZip(@LoginUser TokenDto loginUser, @RequestBody IcHouseListFormDTO formDTO, HttpServletResponse response) throws Exception {
//效验数据
LoginUserDetailsResultDTO loginUserDetail = getLoginUserDetailsResultDTO(loginUser, "【查询房屋】查询当前staff所在组织信息失败");
formDTO.setAgencyId(loginUserDetail.getAgencyId());
ValidatorUtils.validateEntity(formDTO);
houseService.downloadZip(response,formDTO);
}
}

8
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java

@ -102,4 +102,12 @@ public interface IcHouseDao extends BaseDao<IcHouseEntity> {
*/
HouseAgencyInfoResultDTO getHouseAgencyInfo(@Param("houseId") String houseId);
/**
* @describe: 通过id查询房屋信息
* @author wangtong
* @date 2022/6/1 13:56
* @params [id]
* @return com.epmet.dto.result.IcHouseListResultDTO
*/
IcHouseListResultDTO selectHouseQrcodeById(@Param("id") String id);
}

5
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcHouseEntity.java

@ -112,4 +112,9 @@ public class IcHouseEntity extends BaseEpmetEntity {
*/
private String remark;
/**
* 房屋编码
*/
private String houseCode;
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java

@ -117,4 +117,13 @@ public interface HouseService {
* @return
*/
PageData<HouseMemberResultDTO> getHouseUser(TokenDto tokenDto, IcHouseListFormDTO formDTO, Cache<String, Boolean> haveSearchCache);
/**
* @describe: 批量下载一户一档的二维码
* @author wangtong
* @date 2022/5/31 18:00
* @params [formDTO]
* @return void
*/
void downloadZip(HttpServletResponse response,IcHouseListFormDTO formDTO) throws Exception;
}

82
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java

@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.HouseQrcodeEnum;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
@ -18,6 +19,7 @@ import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.BarcodeUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.CustomerGridConstant;
@ -52,14 +54,19 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
import java.text.NumberFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
@Service
@ -760,4 +767,77 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
return list;
}
@Override
public void downloadZip(HttpServletResponse response,IcHouseListFormDTO formDTO) throws Exception {
// 查询pids
String pids = null;
if (StringUtils.isNotBlank(formDTO.getAgencyId())) {
pids = getPids(formDTO.getAgencyId());
}
if (StringUtils.isNotBlank(formDTO.getLevel()) && OrgTypeEnum.AGENCY.getCode().equals(formDTO.getLevel())){
pids = getPids(formDTO.getAgencyId());
}
formDTO.setPids(pids);
//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<IcHouseListResultDTO> houseList = icHouseDao.searchHouseByPage(formDTO);
for(IcHouseListResultDTO house : houseList){
BufferedImage image = BarcodeUtils.drawQRImage(house.getNeighborHoodName() + house.getBuildingName() +house.getUnitNum()+ house.getDoorName(),
HouseQrcodeEnum.PREFIX.getCode()+"?houseCode="+house.getHouseCode());
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 EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "组装zip信息有误","组装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(IcHouseListResultDTO house) {
return house.getNeighborHoodName() + File.separator +house.getBuildingName() + File.separator +house.getUnitNum() + File.separator + house.getDoorName() + HouseQrcodeEnum.SUFFIX.getCode();
}
}

16
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

@ -100,6 +100,7 @@
a.OWNER_NAME as ownerName,
a.OWNER_PHONE as ownerPhone,
a.OWNER_ID_CARD as ownerIdCard,
a.HOUSE_CODE,
a.ID as houseId,
c.ID as neighborHoodId,
@ -373,5 +374,20 @@
INNER JOIN ic_neighbor_hood nh ON (nh.ID = h.NEIGHBOR_HOOD_ID AND nh.DEL_FLAG = '0')
WHERE h.ID = #{houseId}
</select>
<select id="selectHouseQrcodeById" resultType="com.epmet.dto.result.IcHouseListResultDTO">
select
concat(b.BUILDING_NAME,'-',d.UNIT_NUM,'-',a.DOOR_NAME) as houseName,
c.NEIGHBOR_HOOD_NAME as neighborHoodName,
b.BUILDING_NAME as buildingName,
CONCAT(d.UNIT_NUM,'单元') as unitNum,
a.DOOR_NAME as doorName,
a.HOUSE_CODE
from ic_house a
LEFT JOIN ic_building b on a.BUILDING_ID = b.ID and b.DEL_FLAG = '0'
LEFT JOIN ic_neighbor_hood c on a.NEIGHBOR_HOOD_ID = c.ID and c.DEL_FLAG = '0'
LEFT JOIN ic_building_unit d on a.BUILDING_UNIT_ID = d.ID and d.DEL_FLAG = '0'
where a.id=#{id}
and a.del_flag = '0'
</select>
</mapper>

Loading…
Cancel
Save