Trick 5 anos atrás
pai
commit
022877930b
15 arquivos alterados com 1088 adições e 119 exclusões
  1. 67 2
      business/base-service/src/main/java/com/yihu/jw/doctor/service/excel/DoctorWorkTimeExcelDO.java
  2. 107 2
      business/base-service/src/main/java/com/yihu/jw/doctor/service/excel/DoctorWorkTimeExcelReader.java
  3. 57 0
      business/base-service/src/main/java/com/yihu/jw/doctor/service/excel/DoctorWorkTimeMainExcelDO.java
  4. 3 0
      business/base-service/src/main/java/com/yihu/jw/hospital/doctor/dao/DoctorWorkTimeDao.java
  5. 11 5
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java
  6. 24 1
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/WorkTimeService.java
  7. 2 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java
  8. 15 0
      common/common-util/pom.xml
  9. 67 67
      common/common-util/src/main/java/com/yihu/jw/util/excel/AExcelReader.java
  10. 40 40
      common/common-util/src/main/java/com/yihu/jw/util/excel/AExcelWriter.java
  11. 66 0
      common/common-util/src/main/java/com/yihu/jw/util/excel/poi/AExcelReader.java
  12. 71 0
      common/common-util/src/main/java/com/yihu/jw/util/excel/poi/AExcelWriter.java
  13. 546 0
      common/common-util/src/main/java/com/yihu/jw/util/excel/poi/ExcelUtils.java
  14. 1 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/common/populationBatchImport/PopulationMsg.java
  15. 11 2
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java

+ 67 - 2
business/base-service/src/main/java/com/yihu/jw/doctor/service/excel/DoctorWorkTimeExcelDO.java

@ -1,11 +1,76 @@
package com.yihu.jw.doctor.service.excel;
import java.util.List;
import java.util.Map;
/**
 * Created by Trick on 2020/3/26.
 */
public class DoctorWorkTimeExcelDO {
    private String hospital;
    private String dateMonth;
    private String idCard;
    private String name;
    private String type;//1.早上,2.下午,3.晚上
    private String dateOfMonth;//月中的第几天
    private Integer row;
    private Integer col;
    private String errorMes;
    public String getIdCard() {
        return idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getDateOfMonth() {
        return dateOfMonth;
    }
    public void setDateOfMonth(String dateOfMonth) {
        this.dateOfMonth = dateOfMonth;
    }
    public Integer getRow() {
        return row;
    }
    public void setRow(Integer row) {
        this.row = row;
    }
    public Integer getCol() {
        return col;
    }
    public void setCol(Integer col) {
        this.col = col;
    }
    public String getErrorMes() {
        return errorMes;
    }
    public void setErrorMes(String errorMes) {
        this.errorMes = errorMes;
    }
}

+ 107 - 2
business/base-service/src/main/java/com/yihu/jw/doctor/service/excel/DoctorWorkTimeExcelReader.java

@ -1,9 +1,12 @@
package com.yihu.jw.doctor.service.excel;
import com.yihu.jw.util.excel.AExcelReader;
import jxl.Workbook;
import com.yihu.jw.util.excel.poi.AExcelReader;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.stereotype.Component;
import java.util.*;
/**
 * Created by Trick on 2020/3/26.
 */
@ -13,6 +16,108 @@ public class DoctorWorkTimeExcelReader extends AExcelReader {
    @Override
    public void read(Workbook rwb) throws Exception {
        try{
            Iterator<Sheet> sheets = rwb.sheetIterator();
            int j = 0, rows;
            while (sheets.hasNext()){
                Sheet sheet = sheets.next();
                if ((rows = sheet.getLastRowNum()) == 0) {
                    continue;
                }
                for (int i = 2; i <= rows; i++) {
                    //1.获取医生信息
                    String idCard = replaceBlank(getCellCont(sheet, i, 0));
                    String name = replaceBlank(getCellCont(sheet, i, 1));
                    DoctorWorkTimeMainExcelDO main = new DoctorWorkTimeMainExcelDO();
                    main.setName(name);
                    main.setIdCard(idCard);
                    main.setRow(i);
                    List<DoctorWorkTimeExcelDO> list = new ArrayList<>();
                    //2.构造每天排班记录
                    //遍历上午排班信息
                    int sw = 2;
                    while (sw<=92){
//                        System.out.println("col:"+sw);
//                        System.out.println("day:"+(sw+1)/3);
                        String workflag =  replaceBlank(getCellCont(sheet,i,sw));
                        //判断是否有排班
                        if("1".equals(workflag)){
                            //如果有排班,生成当天排班记录
                            DoctorWorkTimeExcelDO excelDO = new DoctorWorkTimeExcelDO();
                            excelDO.setName(name);
                            excelDO.setIdCard(idCard);
                            //标记行列
                            excelDO.setRow(i);
                            excelDO.setCol(sw);
                            Integer day = (sw+1)/3;
                            excelDO.setDateOfMonth(day+"");
                            list.add(excelDO);
                        }
                        sw = sw+3;
                    }
                    //遍历下午排班信息
                    int xw = 3;
                    while (xw<=93){
                        //
                        System.out.println("col:"+xw);
                        System.out.println("day:"+(xw)/3);
                        xw = xw+3;
                    }
                    //遍历晚上排班信息
                    int ws = 4;
                    while (ws<=94){
                        //
                        System.out.println("col:"+ws);
                        System.out.println("day:"+(ws-1)/3);
                        ws = ws+3;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            throw e;
        }finally {
            if (rwb != null) {
                rwb.close();
            }
        }
    }
    public static void main(String ag[]){
        int sw = 2;
        while (sw<=92){
            //
            System.out.println("col:"+sw);
            System.out.println("day:"+(sw+1)/3);
            sw = sw+3;
        }
        int xw = 3;
        while (xw<=93){
            //
            System.out.println("col:"+xw);
            System.out.println("day:"+(xw)/3);
            xw = xw+3;
        }
        int ws = 4;
        while (ws<=94){
            //
            System.out.println("col:"+ws);
            System.out.println("day:"+(ws-1)/3);
            ws = ws+3;
        }
    }
}

+ 57 - 0
business/base-service/src/main/java/com/yihu/jw/doctor/service/excel/DoctorWorkTimeMainExcelDO.java

@ -0,0 +1,57 @@
package com.yihu.jw.doctor.service.excel;
import java.util.List;
/**
 * Created by Trick on 2020/3/27.
 */
public class DoctorWorkTimeMainExcelDO {
    private String idCard;
    private String name;
    private List<DoctorWorkTimeExcelDO> workTime;
    private String errorMes;
    private Integer row;//行标识
    public String getIdCard() {
        return idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<DoctorWorkTimeExcelDO> getWorkTime() {
        return workTime;
    }
    public void setWorkTime(List<DoctorWorkTimeExcelDO> workTime) {
        this.workTime = workTime;
    }
    public String getErrorMes() {
        return errorMes;
    }
    public void setErrorMes(String errorMes) {
        this.errorMes = errorMes;
    }
    public Integer getRow() {
        return row;
    }
    public void setRow(Integer row) {
        this.row = row;
    }
}

+ 3 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/doctor/dao/DoctorWorkTimeDao.java

@ -21,4 +21,7 @@ public interface DoctorWorkTimeDao extends PagingAndSortingRepository<WlyyDoctor
    @Query("from WlyyDoctorWorkTimeDO a where a.doctor = ?1 and a.startTime >= ?2 and a.startTime <= ?3 order by a.startTime asc")
    List<WlyyDoctorWorkTimeDO> findDoctorWorkTimeByTime(String doctor, Date startDate,Date endDate);
    @Query("from WlyyDoctorWorkTimeDO a where a.doctor = ?1 and a.startTime <= ?2 and a.endDate >= ?2")
    List<WlyyDoctorWorkTimeDO> checkDoctorWork(String doctor, Date Date);
}

+ 11 - 5
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -1101,6 +1101,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                    " )";
        }
        sql += " AND d.del='1' AND d.outpatient_type is not null LIMIT " + (page - 1) * size + "," + size + "";
        logger.info("withwork sql:" +sql);
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        if (list != null && list.size() > 0) {
            //获取排班
@ -1144,11 +1145,12 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            Date endDate = DateUtil.stringToDate(maxDateString, "yyyy-MM-dd HH:mm:ss");
            List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
            List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTime(doctor, new Date(), endDate);
            convertToModels(timeDOs, timeVOs, WlyyDoctorWorkTimeVO.class);
            if (timeVOs != null && timeVOs.size() > 0) {
                for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
                    timeVO.setCount(findWorkTimeInfoCout(timeVO.getId()));
            if(timeDOs!=null&&timeDOs.size()>0){
                convertToModels(timeDOs, timeVOs, WlyyDoctorWorkTimeVO.class);
                if (timeVOs != null && timeVOs.size() > 0) {
                    for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
                        timeVO.setCount(findWorkTimeInfoCout(timeVO.getId()));
                    }
                }
            }
            return timeVOs;
@ -2491,6 +2493,10 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    public Integer findWorkTimeInfoCout(String id){
        WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
        if(timeDO.getSourceNumber()==null||timeDO.getStartTime()==null||timeDO.getEndTime()==null){
            return 0;
        }
        Long ss = timeDO.getEndTime().getTime()-timeDO.getStartTime().getTime();
        Long s = ss/timeDO.getSourceNumber();

+ 24 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/WorkTimeService.java

@ -1,7 +1,9 @@
package com.yihu.jw.hospital.prescription.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.entity.hospital.doctor.WlyyDoctorWorkTimeDO;
import com.yihu.jw.entity.hospital.prescription.WlyyHospitalWorkRuleDO;
import com.yihu.jw.hospital.doctor.dao.DoctorWorkTimeDao;
import com.yihu.jw.hospital.prescription.dao.WlyyHospitalWorkRuleDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -9,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
@ -26,6 +29,9 @@ public class WorkTimeService {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private DoctorWorkTimeDao doctorWorkTimeDao;
    /**
     * 保存排班规则
     * @param workTimeRuleJson
@ -49,7 +55,24 @@ public class WorkTimeService {
     */
    public WlyyHospitalWorkRuleDO findWorkTimeRule(String hospital){
        List<WlyyHospitalWorkRuleDO> orgRules = wlyyHospitalWorkRuleDao.findByHospital(hospital);
        return orgRules.get(0);
        if(orgRules!=null&&orgRules.size()>0){
            return orgRules.get(0);
        }
        return null;
    }
    /**
     * 判断医生是否在班
     * @param doctor
     * @return
     */
    public Boolean checkDoctorWork(String doctor){
        List<WlyyDoctorWorkTimeDO> list = doctorWorkTimeDao.checkDoctorWork(doctor,new Date());
        if(list!=null&&list.size()>0){
            return true;
        }
        return false;
    }

+ 2 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -362,6 +362,8 @@ public class BaseHospitalRequestMapping {
        public static final String findWorkTimeRule = "/findWorkTimeRule";
        public static final String saveWorkTimeRule = "/saveWorkTimeRule";
        public static final String checkDoctorWork = "/checkDoctorWork";
    }

+ 15 - 0
common/common-util/pom.xml

@ -87,5 +87,20 @@
            <artifactId>spring-web</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>
        <!--   poi xml导入导出工具 start-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
        </dependency>
        <!-- xlsx  依赖这个包 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </dependency>
    </dependencies>
</project>

+ 67 - 67
common/common-util/src/main/java/com/yihu/jw/util/excel/AExcelReader.java

@ -1,67 +1,67 @@
package com.yihu.jw.util.excel;
import jxl.Sheet;
import jxl.Workbook;
import java.io.File;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class AExcelReader {
    protected List errorLs = new ArrayList<>();
    protected List correctLs = new ArrayList<>();
    protected Map<String, Set> repeat = new HashMap<>();
    public abstract void read(Workbook rwb) throws Exception;
    public void read(File file) throws Exception {
        read(Workbook.getWorkbook(file));
    }
    public void read(InputStream is) throws Exception {
        read(Workbook.getWorkbook(is));
    }
    public static String replaceBlank(String str) {
        String dest = "";
        if (str!=null) {
            str = str.replaceAll("\\u00A0" ," ");
            //去除字符串中的空格、回车、换行符、制表符
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
    protected String getCellCont(Sheet sheet, int row, int col){
        return sheet.getCell(col, row).getContents();
    }
    public List getErrorLs() {
        return errorLs;
    }
    public void setErrorLs(List errorLs) {
        this.errorLs = errorLs;
    }
    public List getCorrectLs() {
        return correctLs;
    }
    public void setCorrectLs(List correctLs) {
        this.correctLs = correctLs;
    }
    public Map<String, Set> getRepeat() {
        return repeat;
    }
    public void setRepeat(Map<String, Set> repeat) {
        this.repeat = repeat;
    }
}
//package com.yihu.jw.util.excel;
//
//import jxl.Sheet;
//import jxl.Workbook;
//
//import java.io.File;
//import java.io.InputStream;
//import java.util.*;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//public abstract class AExcelReader {
//    protected List errorLs = new ArrayList<>();
//    protected List correctLs = new ArrayList<>();
//    protected Map<String, Set> repeat = new HashMap<>();
//
//    public abstract void read(Workbook rwb) throws Exception;
//
//    public void read(File file) throws Exception {
//        read(Workbook.getWorkbook(file));
//    }
//
//    public void read(InputStream is) throws Exception {
//        read(Workbook.getWorkbook(is));
//    }
//
//    public static String replaceBlank(String str) {
//        String dest = "";
//        if (str!=null) {
//            str = str.replaceAll("\\u00A0" ," ");
//            //去除字符串中的空格、回车、换行符、制表符
//            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
//            Matcher m = p.matcher(str);
//            dest = m.replaceAll("");
//        }
//        return dest;
//    }
//
//    protected String getCellCont(Sheet sheet, int row, int col){
//        return sheet.getCell(col, row).getContents();
//    }
//
//    public List getErrorLs() {
//        return errorLs;
//    }
//
//    public void setErrorLs(List errorLs) {
//        this.errorLs = errorLs;
//    }
//
//    public List getCorrectLs() {
//        return correctLs;
//    }
//
//    public void setCorrectLs(List correctLs) {
//        this.correctLs = correctLs;
//    }
//
//    public Map<String, Set> getRepeat() {
//        return repeat;
//    }
//
//    public void setRepeat(Map<String, Set> repeat) {
//        this.repeat = repeat;
//    }
//
//}

+ 40 - 40
common/common-util/src/main/java/com/yihu/jw/util/excel/AExcelWriter.java

@ -1,40 +1,40 @@
package com.yihu.jw.util.excel;
import jxl.Workbook;
import jxl.write.*;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.OutputStream;
import java.util.List;
public abstract class AExcelWriter {
    public abstract void write(WritableWorkbook wwb, List ls) throws Exception;
    public void write(OutputStream os, List ls) throws Exception{
        write(Workbook.createWorkbook(os), ls);
    };
    public void write(File file, List ls) throws Exception{
        write(Workbook.createWorkbook(file), ls);
    };
    //添加单元格内容
    public void addCell(WritableSheet ws, int row, int column, String data) throws WriteException {
        Label label = new Label(column ,row, data);
        ws.addCell(label);
    }
    //添加单元格内容
    public void addCell(WritableSheet ws, int row, int column, String data, String memo) throws WriteException {
        Label label = new Label(column ,row, data);
        if(!StringUtils.isEmpty(memo)){
            WritableCellFeatures cellFeatures = new WritableCellFeatures();
            cellFeatures.setComment(memo);
            label.setCellFeatures(cellFeatures);
        }
        ws.addCell(label);
    }
}
//package com.yihu.jw.util.excel;
//
//import jxl.Workbook;
//import jxl.write.*;
//import org.apache.commons.lang3.StringUtils;
//
//import java.io.File;
//import java.io.OutputStream;
//import java.util.List;
//
//public abstract class AExcelWriter {
//
//    public abstract void write(WritableWorkbook wwb, List ls) throws Exception;
//
//    public void write(OutputStream os, List ls) throws Exception{
//        write(Workbook.createWorkbook(os), ls);
//    };
//
//    public void write(File file, List ls) throws Exception{
//        write(Workbook.createWorkbook(file), ls);
//    };
//
//    //添加单元格内容
//    public void addCell(WritableSheet ws, int row, int column, String data) throws WriteException {
//        Label label = new Label(column ,row, data);
//        ws.addCell(label);
//    }
//
//    //添加单元格内容
//    public void addCell(WritableSheet ws, int row, int column, String data, String memo) throws WriteException {
//
//        Label label = new Label(column ,row, data);
//        if(!StringUtils.isEmpty(memo)){
//            WritableCellFeatures cellFeatures = new WritableCellFeatures();
//            cellFeatures.setComment(memo);
//            label.setCellFeatures(cellFeatures);
//        }
//        ws.addCell(label);
//    }
//}

+ 66 - 0
common/common-util/src/main/java/com/yihu/jw/util/excel/poi/AExcelReader.java

@ -0,0 +1,66 @@
package com.yihu.jw.util.excel.poi;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class AExcelReader {
    protected List errorLs = new ArrayList<>();
    protected List correctLs = new ArrayList<>();
    protected Map<String, Set> repeat = new HashMap<>();
    public abstract void read(Workbook rwb) throws Exception;
    public void read(MultipartFile file) throws Exception {
        read(ExcelUtils.getWorkBook(file));
    }
    public static String replaceBlank(String str) {
        String dest = "";
        if (str!=null) {
            str = str.replaceAll("\\u00A0" ," ");
            //去除字符串中的空格、回车、换行符、制表符
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
    protected String getCellCont(Sheet sheet, int row, int col){
        Cell cell = sheet.getRow(row).getCell(col);
        return ExcelUtils.getCellValue(cell);
    }
    public List getErrorLs() {
        return errorLs;
    }
    public void setErrorLs(List errorLs) {
        this.errorLs = errorLs;
    }
    public List getCorrectLs() {
        return correctLs;
    }
    public void setCorrectLs(List correctLs) {
        this.correctLs = correctLs;
    }
    public Map<String, Set> getRepeat() {
        return repeat;
    }
    public void setRepeat(Map<String, Set> repeat) {
        this.repeat = repeat;
    }
}

+ 71 - 0
common/common-util/src/main/java/com/yihu/jw/util/excel/poi/AExcelWriter.java

@ -0,0 +1,71 @@
package com.yihu.jw.util.excel.poi;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.util.List;
public abstract class AExcelWriter {
    public abstract void write(Workbook wwb, List ls, File file) throws Exception;
//    public void write(OutputStream os, List ls) throws Exception{
//        write(Workbook.createWorkbook(os), ls);
//    };
    public void write( File file, List ls) throws Exception{
        write(ExcelUtils.getWorkBook(file),ls,file);
    };
    //添加单元格内容
    public void addCell(Sheet ws, int row, int column, String data )  {
        Row row1 = ws.getRow(row) ;
        row1 = row1==null? ws.createRow(row) : row1;
        Cell cell = row1.createCell(column);
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell.setCellValue(data);
    }
    //添加单元格内容
    public  void addCell(Sheet ws, int row, int column, String data , String memo)  {
        Row row1 = ws.getRow(row) ;
        row1 = row1==null? ws.createRow(row) : row1;
        Cell cell = row1.createCell(column);
        cell.setCellValue(data);
    }
    //添加单元格内容
    public void addCell(Workbook wb,Sheet ws, int row, int column, String data, String memo)  {
        //1.得到一个POI的工具类
        CreationHelper factory = wb.getCreationHelper();
        //2 得到一个换图的对象
        Drawing drawing = ws.createDrawingPatriarch();
        //3. ClientAnchor是附属在WorkSheet上的一个对象,  其固定在一个单元格的左上角和右下角.
        ClientAnchor anchor = factory.createClientAnchor();
        //4  获取行
        Row row1 = ws.getRow(row) ;
        row1 = row1==null? ws.createRow(row) : row1;
        Cell cell = row1.createCell(column);
        cell.setCellValue(data);
        //5 设置注释
        anchor.setCol1(cell.getColumnIndex());
        anchor.setCol2(cell.getColumnIndex() + 2);
        anchor.setRow1(row1.getRowNum());
        anchor.setRow2(row1.getRowNum() + 3);
        if(!StringUtils.isEmpty(memo)){
            Comment comment0 = drawing.createCellComment(anchor);
            RichTextString richTextString = factory.createRichTextString(memo);
            comment0.setString(richTextString);
            cell.setCellComment(comment0);
        }
    }
}

+ 546 - 0
common/common-util/src/main/java/com/yihu/jw/util/excel/poi/ExcelUtils.java

@ -0,0 +1,546 @@
package com.yihu.jw.util.excel.poi;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * excel 工具类
 *
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/3/2.
 */
public class ExcelUtils extends AExcelWriter {
    private static Logger logger = LoggerFactory.getLogger(ExcelUtils.class);
    private final static String xls = "xls";
    private final static String xlsx = "xlsx";
    /**
     * 总行数
     */
    private int totalRows = 0;
    /**
     * 总列数
     */
    private int totalCells = 0;
    public int getTotalRows() {
        return totalRows;
    }
    public int getTotalCells() {
        return totalCells;
    }
    /**
     * 创建Excel文档
     *
     * @return
     */
    public static HSSFWorkbook createWorkBook() {
        return new HSSFWorkbook();
    }
    /**
     * 创建sheet
     *
     * @param wb
     * @param sheetName
     * @return
     */
    public static HSSFSheet createSheet(HSSFWorkbook wb, String sheetName) {
        return wb.createSheet(sheetName);
    }
    /**
     * 创建一行多列
     *
     * @param sheet
     * @param rowNum
     * @param columnNum
     * @param cellStyle
     * @return
     */
    public static HSSFRow createRow(HSSFSheet sheet, int rowNum, int columnNum, HSSFCellStyle cellStyle) {
        HSSFRow row = sheet.createRow(rowNum);
        if (columnNum > 0) {
            for (int i = 0; i < columnNum; i++) {
                HSSFCell cell = row.createCell(i);
                if (cellStyle != null) {
                    cell.setCellStyle(cellStyle);
                }
            }
        }
        return row;
    }
    /**
     * 创建多行多列
     *
     * @param sheet`
     * @param rowNum
     * @param rowCount
     * @param columnNum
     * @param cellStyle
     * @return
     */
    public static boolean createRows(HSSFSheet sheet, int rowNum, int rowCount, int columnNum, HSSFCellStyle cellStyle) {
        for (int i = 0; i < rowCount; i++) {
            HSSFRow row = sheet.createRow(rowNum + i);
            if (columnNum > 0) {
                for (int j = 0; j < columnNum; j++) {
                    HSSFCell cell = row.createCell(j);
                    if (cellStyle != null) {
                        cell.setCellStyle(cellStyle);
                    }
                }
            }
        }
        return true;
    }
    /**
     * 合并单元格
     *
     * @param sheet
     * @param firstRow
     * @param lastRow
     * @param firstCol
     * @param lastCol
     * @return
     */
    public static int mergeRegion(HSSFSheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {
        int num = sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
        return num;
    }
    /**
     * 创建单元格样式
     *
     * @param wb
     * @param align
     * @param bold
     * @param border
     * @param backColor
     * @return
     */
    public static HSSFCellStyle createCellStyle(HSSFWorkbook wb, short align, boolean bold, boolean border, short backColor) {
        HSSFCellStyle style = wb.createCellStyle();
        //字体
        HSSFFont font = wb.createFont();
        font.setBold(bold);
        font.setFontName("宋体");
        font.setFontHeight((short) 220);
        style.setFont(font);
        //设置对齐
//        style.setAlignment(align);
//        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        if (border) {
            // 设置边框
//            style.setBottomBorderColor(HSSFColor.BLACK.index);
//            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
//            style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        }
        if (backColor > 0) {
            style.setFillBackgroundColor((short) backColor);
        }
        return style;
    }
    /* **************************************** Excel 读取 *************************************************************** */
    /**
     * 读取Excel内容
     *
     * @param is       Excel文件流
     * @param fileName excel文件名,包括后缀
     * @return
     * @throws IOException
     */
    public static List<Map<Object, Object>> readExcel(InputStream is, String fileName) throws IOException {
        List<Map<Object, Object>> list = null;
        boolean isExcel2007 = isExcel2007(fileName);
        if (isExcel2007) {
            list = readExcel2007(is);
        } else {
            list = readExcel2003(is);
        }
        return list;
    }
    /**
     *  读取Excel2003内容
     * @param is  Excel文件流
     * @return
     * @throws IOException
     */
    public static List<Map<Object, Object>> readExcel2003(InputStream is) throws IOException {
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
        Map<Object, Object> student = null;
        List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
        // 循环工作表Sheet
        for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            //获取表头字段
            HSSFRow columnName = hssfSheet.getRow(0);
            // 循环行Row
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow != null) {
                    student = setCellVal(columnName, hssfRow);
                    list.add(student);
                }
            }
        }
        return list;
    }
    /**
     * 获取Excel单元格的值
     * @param hssfCell  单元格对象
     * @return
     */
    @SuppressWarnings("static-access")
    public static Object getExcelValue(HSSFCell hssfCell) {
        if(hssfCell==null){
            return null;
        }else  if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return hssfCell.getBooleanCellValue();
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
            // 返回数值类型的值
            return (int)hssfCell.getNumericCellValue();
        } else {
            // 返回字符串类型的值
            return hssfCell.getStringCellValue();
        }
    }
    /**
     * 获取Excel2007的内容
     * @param is    输入流
     * @return
     */
    public static List<Map<Object, Object>> readExcel2007(InputStream is) {
        XSSFWorkbook hssfWorkbook = null;
        List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
        try {
            hssfWorkbook = new XSSFWorkbook(is);
            Map<Object, Object> result = null;
            // 循环工作表Sheet
            for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
                XSSFSheet xssfSheet = hssfWorkbook.getSheetAt(numSheet);
                if (xssfSheet == null) {
                    continue;
                }
                //获取表头字段
                XSSFRow columnName = xssfSheet.getRow(0);
                // 循环行Row
                for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
                    XSSFRow hssfRow = xssfSheet.getRow(rowNum);
                    if (hssfRow != null) {
                        result = setCellVal(columnName, hssfRow);
                        list.add(result);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
    @SuppressWarnings("static-access")
    public static Object getExcelValue(XSSFCell xssfCell) {
        if(xssfCell==null){
            return null;
        }else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return xssfCell.getBooleanCellValue();
        } else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {
            // 返回数值类型的值
            return (int)xssfCell.getNumericCellValue();
        } else {
            // 返回字符串类型的值
            return xssfCell.getStringCellValue();
        }
    }
    public static Map<Object, Object> setCellVal(XSSFRow names, XSSFRow values) {
        Map<Object, Object> map = new HashMap<>();
        Object name = null;
        Object value = null;
        for (int i = 0; i < names.getLastCellNum(); i++) {
            name = getExcelValue(names.getCell(i));
            value = getExcelValue(values.getCell(i));
            map.put(name, value);
        }
        return map;
    }
    public static Map<Object, Object> setCellVal(HSSFRow names, HSSFRow values) {
        Map<Object, Object> map = new HashMap<>();
        Object name = null;
        Object value = null;
        for (int i = 0; i < names.getLastCellNum(); i++) {
            name = getExcelValue(names.getCell(i));
            value = getExcelValue(values.getCell(i));
            map.put(name, value);
        }
        return map;
    }
    public static boolean isExcel2007(String filePath) {
        return filePath.matches("^.+\\.(?i)(xlsx)$");
    }
    /* ********************************  重写poi,2018-05-16 by hzy   ******************************************* */
    /**
     * 获取excel对象
     * @param file
     * @return
     */
    public static Workbook getWorkBook(MultipartFile file) {
        //获得文件名
        String fileName = file.getOriginalFilename();
        //创建Workbook工作薄对象,表示整个excel
        Workbook workbook = null;
        try {
            //获取excel文件的io流
            InputStream is = file.getInputStream();
            //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
            if(fileName.toLowerCase().endsWith(xls)){
                //2003
                workbook = new HSSFWorkbook(is);
            }else if(fileName.toLowerCase().endsWith(xlsx)){
                //2007
                workbook = new XSSFWorkbook(is);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.info(e.getMessage());
        }
        return workbook;
    }
    /**
     * 获取Excel的内容
     * @param file    上传的文件
     * @return
     */
    public static List<Map<Object, Object>> readExcel (File file) {
        Workbook workBook = null;
        List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
        try {
            workBook = getWorkBook(file);
            Map<Object, Object> result = null;
            // 循环工作表Sheet
            for (int numSheet = 0; numSheet < workBook.getNumberOfSheets(); numSheet++) {
                Sheet sheet = workBook.getSheetAt(numSheet);
                if (sheet == null) {
                    continue;
                }
                //获取表头字段
                Row columnName = sheet.getRow(0);
                // 循环行Row
                for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
                    Row hssfRow = sheet.getRow(rowNum);
                    if (hssfRow != null) {
                        result = setCellVal(columnName, hssfRow);
                        list.add(result);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 设置单元格值
     * @param names
     * @param values
     * @return
     */
    public static Map<Object, Object> setCellVal(Row names, Row values) {
        Map<Object, Object> map = new HashMap<>();
        Object name = null;
        Object value = null;
        for (int i = 0; i < names.getLastCellNum(); i++) {
            name = getCellValue(names.getCell(i));
            value = getCellValue(values.getCell(i));
            map.put(name, value);
        }
        return map;
    }
    /**
     * 获取excel对象
     * @param file
     * @return
     */
    public static Workbook getWorkBook(File file) throws IOException {
        //创建Workbook工作薄对象,表示整个excel
        Workbook workbook = null;
        FileOutputStream fileOut = null;
        try {
            //获得文件名
            String fileName = file.getName();
            //创建excel文件的out流
             fileOut = new FileOutputStream(file);
            //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
            if(fileName.toLowerCase().endsWith(xls)){
                //2003
                workbook = new HSSFWorkbook();
            }else if(fileName.toLowerCase().endsWith(xlsx)){
                //2007
                workbook = new XSSFWorkbook();
            }
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
            logger.info(e.getMessage());
        }finally {
            if (fileOut!=null){
                fileOut.flush();
                fileOut.close();
            }
        }
        return workbook;
    }
    /**
     * 获取excel对象
     * @param is
     * @return
     */
    public static Workbook getWorkBook(String fileName,InputStream is) {
        //创建Workbook工作薄对象,表示整个excel
        Workbook workbook = null;
        try {
            //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
            if(fileName.toLowerCase().endsWith(xls)){
                //2003
                workbook = new HSSFWorkbook(is);
            }else if(fileName.toLowerCase().endsWith(xlsx)){
                //2007
                workbook = new XSSFWorkbook(is);
            }
        } catch (IOException e) {
            logger.info(e.getMessage());
        }
        return workbook;
    }
    /**
     *   获取单元格值
     * @param cell     excel单元格对象
     * @return
     */
    public static String getCellValue(Cell cell){
        String cellValue = "";
        if(cell == null){
            return cellValue;
        }
        //把数字当成String来读,避免出现1读成1.0的情况
        if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
            cell.setCellType(Cell.CELL_TYPE_STRING);
        }
        //判断数据的类型
        switch (cell.getCellType()){
            case Cell.CELL_TYPE_NUMERIC: //数字
                cellValue = String.valueOf(cell.getNumericCellValue());
                break;
            case Cell.CELL_TYPE_STRING: //字符串
                cellValue = String.valueOf(cell.getStringCellValue());
                break;
            case Cell.CELL_TYPE_BOOLEAN: //Boolean
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA: //公式
                cellValue = String.valueOf(cell.getCellFormula());
                break;
            case Cell.CELL_TYPE_BLANK: //空值
                cellValue = "";
                break;
            case Cell.CELL_TYPE_ERROR: //故障
                cellValue = "非法字符";
                break;
            default:
                cellValue = "未知类型";
                break;
        }
        return cellValue;
    }
    public void addCell(Sheet ws, int row, int column, String data )  {
        Row row1 = ws.createRow(row);
        Cell cell = row1.createCell(column);
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell.setCellValue(data);
    }
    //添加单元格内容
    public static void addCellData(Sheet sheet, int column, int row, String data){
        Row sheetRow = sheet.getRow(row);
        if(sheetRow==null){
            sheetRow = sheet.createRow(row);
        }
        Cell cell= sheetRow.createCell(column);
        cell.setCellValue(data);
    }
    //添加单元格内容带样式
    public static void addCellData(Sheet sheet, int column, int row, String data, CellStyle cellStyle){
        Row sheetRow = sheet.getRow(row);
        if(sheetRow==null){
            sheetRow = sheet.createRow(row);
        }
        Cell cell= sheetRow.createCell(column);
        cell.setCellValue(data);
        cell.setCellStyle(cellStyle);
    }
    @Override
    public void write(Workbook wwb, List ls, File file) throws Exception {
    }
}

+ 1 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/common/populationBatchImport/PopulationMsg.java

@ -8,6 +8,7 @@ import com.yihu.jw.util.excel.annotation.Location;
import com.yihu.jw.util.excel.annotation.Row;
import com.yihu.jw.util.excel.annotation.Title;
import com.yihu.jw.util.excel.annotation.ValidRepeat;
import org.apache.commons.lang3.StringUtils;
import javax.persistence.Column;

+ 11 - 2
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java

@ -1008,14 +1008,23 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.findWorkTimeRule)
    @ApiOperation(value = "查询排班规则")
    public ObjEnvelop findWorkTimeRule(@ApiParam(name = "hospital", value = "医院code")
                                       @RequestParam(value = "hospital",required = false)String hospital) {
                                       @RequestParam(value = "hospital",required = true)String hospital) {
        return success(workTimeService.findWorkTimeRule(hospital));
    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.saveWorkTimeRule)
    @ApiOperation(value = "保存排班规则")
    public ObjEnvelop saveWorkTimeRule(@ApiParam(name = "workTimeRuleJson", value = "保存排班规则")
                                           @RequestParam(value = "workTimeRuleJson",required = false)String workTimeRuleJson) throws Exception{
                                           @RequestParam(value = "workTimeRuleJson",required = true)String workTimeRuleJson) throws Exception{
        return success(workTimeService.saveWorkTimeRule(workTimeRuleJson));
    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.checkDoctorWork)
    @ApiOperation(value = "判断医生是否在班")
    public ObjEnvelop checkDoctorWork(@ApiParam(name = "doctor", value = "判断医生是否在班")
                                      @RequestParam(value = "doctor",required = true)String doctor) throws Exception{
        return success(workTimeService.checkDoctorWork(doctor));
    }
}