|
@@ -271,90 +271,196 @@ public class PersonService {
|
|
public void importWithExcel(MultipartFile file) throws BDException {
|
|
public void importWithExcel(MultipartFile file) throws BDException {
|
|
try {
|
|
try {
|
|
|
|
|
|
- //上传的目录
|
|
|
|
- String uploadSubDir = "data/final/person/image/";
|
|
|
|
-
|
|
|
|
//图片对应的行和图片数据
|
|
//图片对应的行和图片数据
|
|
- Map<Integer, PictureData> sheetIndexPicMap = new HashMap<>();
|
|
|
|
-
|
|
|
|
- //图片对应的行和存放路径
|
|
|
|
- Map<Integer, String> path = new HashMap<>();
|
|
|
|
-
|
|
|
|
- Sheet sheet = null;
|
|
|
|
- if (file.getName().substring(file.getName().length() - 4).equals("xlsx")) {
|
|
|
|
- XSSFWorkbook workBook = new XSSFWorkbook(file.getInputStream());
|
|
|
|
- sheet = workBook.getSheetAt(0);
|
|
|
|
-
|
|
|
|
- //读取sheet的图片放入Map
|
|
|
|
- for (POIXMLDocumentPart dr : ((XSSFSheet) sheet).getRelations()) {
|
|
|
|
- if (dr instanceof XSSFDrawing) {
|
|
|
|
- XSSFDrawing drawing = (XSSFDrawing) dr;
|
|
|
|
- List<XSSFShape> shapes = drawing.getShapes();
|
|
|
|
- for (XSSFShape shape : shapes) {
|
|
|
|
- XSSFPicture pic = (XSSFPicture) shape;
|
|
|
|
- XSSFClientAnchor anchor = pic.getPreferredSize();
|
|
|
|
- CTMarker ctMarker = anchor.getFrom();
|
|
|
|
- sheetIndexPicMap.put(ctMarker.getRow(), pic.getPictureData());
|
|
|
|
-
|
|
|
|
- //获取图片格式
|
|
|
|
- String ext = pic.getPictureData().suggestFileExtension();
|
|
|
|
- if(!"jpg".equalsIgnoreCase(ext)){
|
|
|
|
- throw new BDException("Excel中只能放jpg格式图像");
|
|
|
|
- }
|
|
|
|
- //保存的文件名
|
|
|
|
- String fileName = UUID.randomUUID().toString() + "." + ext;
|
|
|
|
-
|
|
|
|
- path.put(ctMarker.getRow(), uploadSubDir + "/" + fileName);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- throw new BDException("导入Excel只支持xlsx格式");
|
|
|
|
|
|
+ // Map<Integer, PictureData> sheetIndexPicMap = new HashMap<>();
|
|
|
|
+ if (!file.getName().substring(file.getName().length() - 4).equals("xlsx")) {
|
|
|
|
+ throw new BDException("导入Excel只支持xlsx格式");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ XSSFWorkbook workBook = new XSSFWorkbook(file.getInputStream());
|
|
|
|
+ Sheet sheet = workBook.getSheetAt(0);
|
|
|
|
+
|
|
if (sheet.getLastRowNum() == 0) {
|
|
if (sheet.getLastRowNum() == 0) {
|
|
logger.error("表中无数据!");
|
|
logger.error("表中无数据!");
|
|
throw new BDException("表中无数据");
|
|
throw new BDException("表中无数据");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //图片对应的行和图片数据
|
|
|
|
+ Map<Integer, PictureData> picMap = new HashMap<>();
|
|
|
|
+
|
|
|
|
+ //读取sheet的图片放入Map
|
|
|
|
+ for (POIXMLDocumentPart dr : ((XSSFSheet) sheet).getRelations()) {
|
|
|
|
+ if (dr instanceof XSSFDrawing) {
|
|
|
|
+ XSSFDrawing drawing = (XSSFDrawing) dr;
|
|
|
|
+ List<XSSFShape> shapes = drawing.getShapes();
|
|
|
|
+ for (XSSFShape shape : shapes) {
|
|
|
|
+ XSSFPicture pic = (XSSFPicture) shape;
|
|
|
|
+ //获取图片格式
|
|
|
|
+ String ext = pic.getPictureData().suggestFileExtension();
|
|
|
|
+ if(!"jpg".equalsIgnoreCase(ext)){
|
|
|
|
+ throw new BDException("Excel中只能放jpg格式图像");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ XSSFClientAnchor anchor = pic.getPreferredSize();
|
|
|
|
+ CTMarker ctMarker = anchor.getFrom();
|
|
|
|
+ int row = ctMarker.getRow();
|
|
|
|
+ picMap.put(row, pic.getPictureData());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
//定义数据集合存放excel所有数据
|
|
//定义数据集合存放excel所有数据
|
|
- List<IdenPerson> idenPersonList = new ArrayList<>();
|
|
|
|
|
|
+ List<PersonVO> personVOList = new ArrayList<>();
|
|
|
|
|
|
|
|
+ //遍历行
|
|
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
|
|
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
|
|
-
|
|
|
|
//错误提示消息
|
|
//错误提示消息
|
|
StringBuffer msg = new StringBuffer();
|
|
StringBuffer msg = new StringBuffer();
|
|
-
|
|
|
|
Row row = sheet.getRow(i);
|
|
Row row = sheet.getRow(i);
|
|
-
|
|
|
|
if (null == row)
|
|
if (null == row)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- IdenPerson idenPerson = new IdenPerson();
|
|
|
|
-
|
|
|
|
- idenPerson.setImage(path.get(i));
|
|
|
|
-
|
|
|
|
|
|
+ PersonVO personVO = new PersonVO();
|
|
|
|
+ IdenCommunity idenCommunity = null;
|
|
|
|
+ // 遍历列
|
|
for (int j = 0; j < 23; j++) {
|
|
for (int j = 0; j < 23; j++) {
|
|
Cell cell = row.getCell(j);
|
|
Cell cell = row.getCell(j);
|
|
|
|
|
|
String value = null;
|
|
String value = null;
|
|
-
|
|
|
|
if (null != cell) {
|
|
if (null != cell) {
|
|
//全部作为文本处理
|
|
//全部作为文本处理
|
|
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
-
|
|
|
|
value = cell.getStringCellValue();
|
|
value = cell.getStringCellValue();
|
|
}
|
|
}
|
|
|
|
|
|
- if (1 == j) {//姓名
|
|
|
|
|
|
+ if (0 == j) {//人员编码
|
|
if (StringUtils.isNotBlank(value)){
|
|
if (StringUtils.isNotBlank(value)){
|
|
- idenPerson.setName(value);
|
|
|
|
|
|
+ personVO.setCode(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (1 == j) {//姓名
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setName(value);
|
|
}else {
|
|
}else {
|
|
msg.append("请填写姓名!\n");
|
|
msg.append("请填写姓名!\n");
|
|
}
|
|
}
|
|
- } else if (2 == j) {//备注
|
|
|
|
- idenPerson.setRemark(value);
|
|
|
|
|
|
+ } else if (3 == j) {//性别
|
|
|
|
+ if (StringUtils.isNotBlank(value)) {
|
|
|
|
+ personVO.setGender(GenderEnum.getNameToValue(value));
|
|
|
|
+ }
|
|
|
|
+ } else if (4 == j) {//证件类型
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setCredentialsType(CredentialsTypeEnum.getNameToValue(value));
|
|
|
|
+ }
|
|
|
|
+ } else if (5 == j) {//证件号码
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setCredentialsCode(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (6 == j) {//手机号码
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setPhone(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (7 == j) {//人口类型
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setPopulationType(PopulationTypeEnum.getNameToValue(value));
|
|
|
|
+ }
|
|
|
|
+ } else if (8 == j) {//民族
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setNation(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (9 == j) {//政治面貌
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setPolicitalStatus(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (10 == j) {//婚姻
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setMarriage(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (11 == j) {//口音
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setVoice(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (12 == j) {//所属区域
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setDistrict(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (13 == j) {//所属街道
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setSubdistrict(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (14== j) {//所属小区
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ QueryWrapper<IdenCommunity> queryWrapper = new QueryWrapper<>();
|
|
|
|
+ queryWrapper.lambda().eq(IdenCommunity::getName,value);
|
|
|
|
+ idenCommunity = this.idenCommunityService.getOne(queryWrapper);
|
|
|
|
+ if(idenCommunity != null){
|
|
|
|
+ personVO.setCommunityId(idenCommunity.getId());
|
|
|
|
+ } else {
|
|
|
|
+ msg.append("填写所属小区名称不存在!\n");
|
|
|
|
+ }
|
|
|
|
+ }else {
|
|
|
|
+ msg.append("请填写所属小区!\n");
|
|
|
|
+ }
|
|
|
|
+ } else if (15 == j) {//地址
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setAddress(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (16 == j) {//工作单位
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setWorkPlace(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (17 == j) {//单位地址
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setWorkAddress(value);
|
|
|
|
+ }
|
|
|
|
+ } else if (18 == j) {//类型
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ String type = PersonTypeEnum.getNameToValue(value);
|
|
|
|
+ if(StringUtils.isEmpty(type)){
|
|
|
|
+ msg.append("请填写类型(重点人员或小区人员,多个用英文逗号分隔)!\n");
|
|
|
|
+ } else {
|
|
|
|
+ personVO.setType(type);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ msg.append("请填写类型(重点人员或小区人员,多个用英文逗号分隔)!\n");
|
|
|
|
+ }
|
|
|
|
+ } else if (19 == j) {//人群类型
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ String[] crowdNames = value.split(",");
|
|
|
|
+ List<Long> idenCrowdIds = new ArrayList<>();
|
|
|
|
+ for (String crowdName : crowdNames) {
|
|
|
|
+ QueryWrapper<IdenCrowd> queryWrapper = new QueryWrapper<>();
|
|
|
|
+ queryWrapper.lambda().eq(IdenCrowd::getName,crowdName);
|
|
|
|
+ IdenCrowd idenCrowd = this.idenCrowdService.getOne(queryWrapper);
|
|
|
|
+
|
|
|
|
+ if(idenCrowd == null){
|
|
|
|
+ msg.append("填写人群类型错误(多个用英文逗号分隔)!\n");
|
|
|
|
+ idenCrowdIds.clear();
|
|
|
|
+ break;
|
|
|
|
+ } else{
|
|
|
|
+ idenCrowdIds.add(idenCrowd.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(CollUtil.isNotEmpty(idenCrowdIds)){
|
|
|
|
+ personVO.setCrowdIds(idenCrowdIds);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (20 == j) {//备注
|
|
|
|
+ if (StringUtils.isNotBlank(value)){
|
|
|
|
+ personVO.setRemark(value);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ PictureData picData = picMap.get(i);
|
|
|
|
+ if(picData != null){
|
|
|
|
+ //保存的文件名
|
|
|
|
+ String fileName = DateUtils.getCurrYyyyMMddHHmmssDate() + "_" + UUID.randomUUID().toString() + ".jpg";
|
|
|
|
+ String savePath = idenRoot + "data/final/person/image/" + idenCommunity.getCode() + "/" + fileName;
|
|
|
|
+ // 保存图片
|
|
|
|
+ savePic(picData,savePath);
|
|
|
|
+ personVO.setImage(fileUrl + "person/image/" + idenCommunity.getCode() +"/" + fileName);
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
if (!StringUtils.isBlank(msg.toString())) {
|
|
if (!StringUtils.isBlank(msg.toString())) {
|
|
@@ -362,33 +468,32 @@ public class PersonService {
|
|
throw new BDException("第\\t" + i + "行: " + msg.toString());
|
|
throw new BDException("第\\t" + i + "行: " + msg.toString());
|
|
}
|
|
}
|
|
|
|
|
|
- idenPersonList.add(idenPerson);
|
|
|
|
|
|
+ personVOList.add(personVO);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if (!idenPersonList.isEmpty()) {
|
|
|
|
|
|
+ if (CollUtil.isNotEmpty(personVOList)) {
|
|
|
|
+ List<IdenPersonCrowdRef> idenPersonCrowdRefList = new ArrayList<>();
|
|
|
|
+ personVOList.forEach(item->{
|
|
|
|
+ IdenPerson idenPerson = new IdenPerson();
|
|
|
|
+ BeanUtil.copyProperties(item,idenPerson);
|
|
|
|
+ idenPersonService.save(idenPerson);
|
|
|
|
+
|
|
|
|
+ List<Long> crowdIds = item.getCrowdIds();
|
|
|
|
+ if(CollUtil.isNotEmpty(crowdIds)){
|
|
|
|
+ crowdIds.forEach(item1 ->{
|
|
|
|
+ IdenPersonCrowdRef idenPersonCrowdRef = new IdenPersonCrowdRef();
|
|
|
|
+ idenPersonCrowdRef.setCrowdId(item1);
|
|
|
|
+ idenPersonCrowdRef.setPersonId(idenPerson.getId());
|
|
|
|
+ idenPersonCrowdRefList.add(idenPersonCrowdRef);
|
|
|
|
+ });
|
|
|
|
|
|
- if (!sheetIndexPicMap.isEmpty()) {
|
|
|
|
-
|
|
|
|
- for (Map.Entry<Integer, PictureData> map : sheetIndexPicMap.entrySet()) {
|
|
|
|
-
|
|
|
|
- // 获取图片流
|
|
|
|
- PictureData pic = map.getValue();
|
|
|
|
-
|
|
|
|
- byte[] data = pic.getData();
|
|
|
|
-
|
|
|
|
- //输出全路径
|
|
|
|
- String outPath = idenRoot + path.get(map.getKey());
|
|
|
|
-
|
|
|
|
- FileOutputStream out = new FileOutputStream(outPath);
|
|
|
|
- out.write(data);
|
|
|
|
- out.close();
|
|
|
|
}
|
|
}
|
|
|
|
+ });
|
|
|
|
+ if(CollUtil.isNotEmpty(idenPersonCrowdRefList)){
|
|
|
|
+ //批量保存
|
|
|
|
+ this.idenPersonCrowdRefService.saveBatch(idenPersonCrowdRefList);
|
|
}
|
|
}
|
|
-
|
|
|
|
- //批量保存
|
|
|
|
- this.idenPersonService.saveBatch(idenPersonList);
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -399,6 +504,12 @@ public class PersonService {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void savePic( PictureData picData,String savePath) throws Exception {
|
|
|
|
+ byte[] data = picData.getData();
|
|
|
|
+ FileOutputStream out = new FileOutputStream(savePath);
|
|
|
|
+ out.write(data);
|
|
|
|
+ out.close();
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* 删除人员
|
|
* 删除人员
|