소스 검색

导入带图像

suntianwu 3 년 전
부모
커밋
9db2d0a588

+ 184 - 73
src/main/java/com/iden/bms/service/PersonService.java

@@ -271,90 +271,196 @@ public class PersonService {
     public void importWithExcel(MultipartFile file) throws BDException {
             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) {
                     logger.error("表中无数据!");
                     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所有数据
-                List<IdenPerson> idenPersonList = new ArrayList<>();
+                List<PersonVO> personVOList = new ArrayList<>();
 
+                //遍历行
                 for (int i = 1; i <= sheet.getLastRowNum(); i++) {
-
                     //错误提示消息
                     StringBuffer msg = new StringBuffer();
-
                     Row row = sheet.getRow(i);
-
                     if (null == row)
                         continue;
 
-                    IdenPerson idenPerson = new IdenPerson();
-
-                    idenPerson.setImage(path.get(i));
-
+                    PersonVO personVO = new PersonVO();
+                    IdenCommunity idenCommunity = null;
+                    // 遍历列
                     for (int j = 0; j < 23; j++) {
                         Cell cell = row.getCell(j);
 
                         String value = null;
-
                         if (null != cell) {
                             //全部作为文本处理
                             cell.setCellType(HSSFCell.CELL_TYPE_STRING);
-
                             value = cell.getStringCellValue();
                         }
 
-                        if (1 == j) {//姓名
+                        if (0 == j) {//人员编码
                             if (StringUtils.isNotBlank(value)){
-                                idenPerson.setName(value);
+                                personVO.setCode(value);
+                            }
+                        } else if (1 == j) {//姓名
+                            if (StringUtils.isNotBlank(value)){
+                                personVO.setName(value);
                             }else {
                                 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())) {
@@ -362,33 +468,32 @@ public class PersonService {
                         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) {
@@ -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();
+    }
 
     /**
      * 删除人员

+ 18 - 3
src/main/java/com/iden/common/enums/CredentialsTypeEnum.java

@@ -23,6 +23,9 @@ public enum CredentialsTypeEnum {
     public String getValue() {
         return value;
     }
+    public String getName() {
+        return name;
+    }
 
     public static String getValueToName(String value){
         if (StrUtil.isEmpty(value)){
@@ -32,10 +35,22 @@ public enum CredentialsTypeEnum {
             return  IDCARD.name;
         } else if (PASSPORT.getValue().equals(value)){
             return  PASSPORT.name;
-        } else if (OL.getValue().equals(value)){
-        return  OL.name;
+        } else if (OL.getValue().equals(value)) {
+            return OL.name;
+        }
+        return null;
     }
-
+    public static String getNameToValue(String name){
+        if (StrUtil.isEmpty(name)){
+            return null;
+        }
+        if (IDCARD.getName().equals(name)){
+            return  IDCARD.value;
+        } else if (PASSPORT.getName().equals(name)){
+            return  PASSPORT.value;
+        } else if (OL.getName().equals(name)){
+            return  OL.value;
+        }
         return null;
     }
 }

+ 17 - 0
src/main/java/com/iden/common/enums/GenderEnum.java

@@ -23,6 +23,10 @@ public enum GenderEnum {
         return value;
     }
 
+    public String getName() {
+        return name;
+    }
+
     public static String getValueToName(String value){
         if (StrUtil.isEmpty(value)){
             return null;
@@ -35,4 +39,17 @@ public enum GenderEnum {
 
         return null;
     }
+
+    public static String getNameToValue(String name){
+        if (StrUtil.isEmpty(name)){
+            return null;
+        }
+        if (MAN.getName().equals(name)){
+            return  MAN.value;
+        }else if (WOMAN.getName().equals(name)){
+            return  WOMAN.value;
+        }
+
+        return null;
+    }
 }

+ 30 - 0
src/main/java/com/iden/common/enums/PersonTypeEnum.java

@@ -25,6 +25,10 @@ public enum PersonTypeEnum {
         return value;
     }
 
+    public String getName() {
+        return name;
+    }
+
     public static String getValueToName(String value){
         if (StrUtil.isEmpty(value)){
             return null;
@@ -51,4 +55,30 @@ public enum PersonTypeEnum {
       return names;
 
     }
+
+    public static String getNameToValue(String name){
+        if (StrUtil.isEmpty(name)){
+            return null;
+        }
+        String values = "";
+        String[] types = name.split(",");
+        if (types.length > 0){
+            for(String type : types){
+                if (STRANGER.getValue().equals(type)){
+                    values += STRANGER.value + ",";
+                } else if (KEYNOTE.getValue().equals(type)){
+                    values += KEYNOTE.value + ",";
+                } else if (COMMUNITY.getValue().equals(type)){
+                    values += COMMUNITY.value + ",";
+                } else if (EVENING_COMMING.getValue().equals(type)){
+                    values += EVENING_COMMING.value + ",";
+                }
+            }
+        }
+        if(values.endsWith(",")) {
+            values = values.substring(0,values.length() - 1);
+        }
+        return values;
+
+    }
 }

+ 26 - 1
src/main/java/com/iden/common/enums/PopulationTypeEnum.java

@@ -27,7 +27,9 @@ public enum PopulationTypeEnum {
     public String getValue() {
         return value;
     }
-
+    public String getName() {
+        return name;
+    }
     public static String getValueToName(String value){
         if (StrUtil.isEmpty(value)){
             return null;
@@ -50,4 +52,27 @@ public enum PopulationTypeEnum {
 
         return null;
     }
+
+    public static String getNameToValue(String name){
+        if (StrUtil.isEmpty(name)){
+            return null;
+        }
+        if (CHANGZHU.getName().equals(name)){
+            return  CHANGZHU.value;
+        } else if (ZANZHU.getName().equals(name)){
+            return  ZANZHU.value;
+        } else if (JINGWAICHANGZHU.getName().equals(name)){
+            return  JINGWAICHANGZHU.value;
+        } else if (LIUDONG.getName().equals(name)){
+            return  LIUDONG.value;
+        } else if (JIZHU.getName().equals(name)){
+            return  JIZHU.value;
+        } else if (LINSHIZHUSU.getName().equals(name)){
+            return  LINSHIZHUSU.value;
+        } else if (OTHER.getName().equals(name)){
+            return  OTHER.value;
+        }
+
+        return null;
+    }
 }

+ 3 - 1
src/main/java/com/iden/common/vo/PersonVO.java

@@ -9,6 +9,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 人员表(IdenPerson)实体类
@@ -128,5 +129,6 @@ public class PersonVO implements Serializable {
     @ApiModelProperty("modifyTime")
     private Date modifyTime;
 
-
+    @ApiModelProperty("人群ID列表")
+    private List<Long> crowdIds;
 }