Trick vor 5 Jahren
Ursprung
Commit
8270a459c0

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

@ -20,15 +20,21 @@ public class DoctorWorkTimeExcelReader extends AExcelReader {
    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(sheet.getLastRowNum()>202){
                    setCode("-1");
                    setMes("目前仅支持200位医生同时导入");
                    return;
                }
                if ((rows = sheet.getLastRowNum()) == 0) {
                    continue;
                }
                for (int i = 2; i <= rows; i++) {
                for (int i = 3; i <= rows; i++) {
                    //1.获取医生信息
                    String idCard = replaceBlank(getCellCont(sheet, i, 0));
                    String name = replaceBlank(getCellCont(sheet, i, 1));
@ -143,11 +149,11 @@ public class DoctorWorkTimeExcelReader extends AExcelReader {
        String idCard = main.getIdCard();
        String name = main.getName();
        if(StringUtils.isBlank(idCard)){
            main.setErrorMes("第"+(main.getRow()+1)+"身份证号为空!\n");
            main.setErrorMes("第"+(main.getRow()+1)+"行,身份证号为空!\n");
            return "0";
        }
        if(StringUtils.isBlank(name)){
            main.setErrorMes("第"+(main.getRow()+1)+"姓名为空!\n");
            main.setErrorMes("第"+(main.getRow()+1)+"行,姓名为空!\n");
            return "0";
        }
        return "1";

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

@ -21,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * Created by Trick on 2020/3/24.
@ -111,12 +108,14 @@ public class WorkTimeService {
        return false;
    }
    public String saveWorkInfo(List<DoctorWorkTimeMainExcelDO> list,String date,String hospital){
        Map<String,Object> rs = new HashedMap();
    public Map<String,Object> getExcelWorkInfo(List<DoctorWorkTimeMainExcelDO> list,String date,String hospital){
        Map<String,Object> rs = new HashedMap();
        List<DoctorWorkTimeMainExcelDO> error =new ArrayList<>();
        List<DoctorWorkTimeMainExcelDO> succ = new ArrayList<>();
        List<WlyyDoctorWorkTimeDO> succ = new ArrayList<>();
        Integer total = 0;
        Integer errorTotal = 0;
        Integer succTotal =0;
        if(list!=null&&list.size()>0){
            for(DoctorWorkTimeMainExcelDO excelDO:list){
                List<BaseDoctorDO> doctorDOs = baseDoctorDao.findByIdcard(excelDO.getIdCard());
@ -133,62 +132,166 @@ public class WorkTimeService {
                //判断是否为本月
                String dm = DateUtil.dateToStr(new Date(),"yyyy-MM");
                if(dm.equals(date)){
                    //本月
                    Calendar calendar = Calendar.getInstance();
                    Date today = new Date();
                    calendar.setTime(today);
                    // 获取一月中第几天
                    int monthDay = calendar.get(Calendar.DAY_OF_MONTH);
                    //获取该月份一共几天
                    int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                    calendar.add(1,Calendar.DATE);
                    //更新时间范围
                    //开始时间
                    String st = DateUtil.dateToStr(calendar.getTime(),"yyyy-MM-dd");
                    Date startDate = DateUtil.strToDate(st+" 00:00:00");
                    //结束时间
                    String et = date+":"+maxDay+" 23:59:59";
                    Date endDate = DateUtil.strToDate(et);
                    //删除明天开始的排班记录
                    List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTimeByTime(doctorDO.getId(),startDate,endDate);
                    if(timeDOs!=null&&timeDOs.size()>0){
                        doctorWorkTimeDao.delete(timeDOs);
                    }
                    //解析具体排班
                    List<DoctorWorkTimeExcelDO> worktimes = excelDO.getWorkTime();
                    if(worktimes!=null&&worktimes.size()>0){
                        for(DoctorWorkTimeExcelDO worktime:worktimes){
                            //要排班的日期
                            String day = worktime.getDateOfMonth();
                            Integer dfm = Integer.parseInt(day);
                            //排班从明天开始
                            if(dfm >= (monthDay+1)){
                                WlyyDoctorWorkTimeDO workTimeDO = getWorkTimeDO(date,worktime,ruleDO,orgDO,doctorDO);
                                succ.add(workTimeDO);
                            }
                        }
                    }
                }else{
                    //判断日期是否大于本月
                    Date now = DateUtil.strToDate(dm,"yyyy-MM");
                    Date work = DateUtil.strToDate(date,"yyyy-MM");
                    if(now.before(work)){
                        //
                        //导入的月份大于当前月份,删除导入月份所有历史排班记录
                        List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTimeByMonth(doctorDO.getId(),"%"+date+"%");
                        if(timeDOs!=null&&timeDOs.size()>0){
                            doctorWorkTimeDao.delete(timeDOs);
                        }
                        //解析具体排班
                        List<DoctorWorkTimeExcelDO> worktimes = excelDO.getWorkTime();
                        if(worktimes!=null&&worktimes.size()>0){
                            for(DoctorWorkTimeExcelDO worktime:worktimes){
                                WlyyDoctorWorkTimeDO workTimeDO = new WlyyDoctorWorkTimeDO();
                                workTimeDO.setDoctor(doctorDO.getId());
                                //上午
                                if("1".equals(worktime.getType())){
                                }
//                                workTimeDO.setSourceNumber(ruleDO.);
                                WlyyDoctorWorkTimeDO workTimeDO = getWorkTimeDO(date,worktime,ruleDO,orgDO,doctorDO);
                                succ.add(workTimeDO);
                            }
                        }
                    }
                }
            }
            total = list.size();
            if(error!=null&&error.size()>0){
                errorTotal = error.size();
            }
            succTotal = total-errorTotal;
            if(succ!=null&&succ.size()>0){
                //保存排班
                doctorWorkTimeDao.save(succ);
            }
        }
        return null;
        rs.put("error",error);
        rs.put("succ",succ);
        rs.put("total",total);
        rs.put("errorTotal",errorTotal);
        rs.put("succTotal",succTotal);
        return rs;
    }
    public WlyyDoctorWorkTimeDO getWorkTimeDO(String date,DoctorWorkTimeExcelDO worktime,WlyyHospitalWorkRuleDO ruleDO,BaseOrgDO orgDO,BaseDoctorDO doctorDO){
        WlyyDoctorWorkTimeDO workTimeDO = new WlyyDoctorWorkTimeDO();
        workTimeDO.setDoctor(doctorDO.getId());
        workTimeDO.setDoctorName(doctorDO.getName());
        workTimeDO.setHospital(orgDO.getCode());
        workTimeDO.setHospitalName(orgDO.getName());
        String day = worktime.getDateOfMonth();
        if(day.length()<2){
            day ="0"+day;
        }
        String workDate = date+"-"+day;
        logger.info("workDate:"+workDate);
        workTimeDO.setDate(workDate);
        workTimeDO.setCreateTime(new Date());
        //上午
        if("1".equals(worktime.getType())){
            workTimeDO.setTimeType("1");
            workTimeDO.setType("1");
            workTimeDO.setSourceNumber(ruleDO.getSwSourceNum());
            workTimeDO.setStartTime(DateUtil.strToDate(workDate+" "+ruleDO.getSwStartTime()+":00"));
            workTimeDO.setEndTime(DateUtil.strToDate(workDate+" "+ruleDO.getSwEndTime()+" :00"));
        }else if("2".equals(worktime.getType())){
            workTimeDO.setTimeType("2");
            workTimeDO.setType("1");
            workTimeDO.setSourceNumber(ruleDO.getXwSourceNum());
            workTimeDO.setStartTime(DateUtil.strToDate(workDate+" "+ruleDO.getXwStartTime()+":00"));
            workTimeDO.setEndTime(DateUtil.strToDate(workDate+" "+ruleDO.getXwEndTime()+" :00"));
        }else if("3".equals(worktime.getType())){
            workTimeDO.setTimeType("3");
            workTimeDO.setType("1");
            workTimeDO.setSourceNumber(ruleDO.getWsSourceNum());
            workTimeDO.setStartTime(DateUtil.strToDate(workDate+" "+ruleDO.getWsStartTime()+":00"));
            workTimeDO.setEndTime(DateUtil.strToDate(workDate+" "+ruleDO.getWsEndTime()+":00"));
        }
        return workTimeDO;
    }
//    public String saveDoctorWorkTime(List<WlyyDoctorWorkTimeDO> workTimeDOs){
//
//    }
    public static void main(String ag[]){
//        Date start = DateUtil.stringToDate("2020-03-24 08:00:00","yyyy-MM-dd HH:mm:ss");
//    public static void main(String ag[]){
//
//        Date end = DateUtil.stringToDate("2020-03-24 12:00:00","yyyy-MM-dd HH:mm:ss");
////        Date start = DateUtil.stringToDate("2020-03-24 08:00:00","yyyy-MM-dd HH:mm:ss");
////
////        Date end = DateUtil.stringToDate("2020-03-24 12:00:00","yyyy-MM-dd HH:mm:ss");
////
////        Long total =end.getTime()-start.getTime();
////
////        Long jg = total/100;
////
////        start.setTime(start.getTime()+jg);
//
//        Long total =end.getTime()-start.getTime();
////        Date now = DateUtil.strToDate("2020-04","yyyy-MM");
////        Date work = DateUtil.strToDate("2020-04","yyyy-MM");
//
//        Long jg = total/100;
//        Calendar calendar = Calendar.getInstance();
//        Date today = new Date();
//        calendar.setTime(today);// 此处可换为具体某一时间
//        int monthDay = calendar.get(Calendar.DAY_OF_MONTH);
//        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//
//        start.setTime(start.getTime()+jg);
        Date now = DateUtil.strToDate("2020-04","yyyy-MM");
        Date work = DateUtil.strToDate("2020-04","yyyy-MM");
        System.out.println(now.before(work));
    }
//        System.out.println(monthDay);
//    }
}

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

@ -364,6 +364,9 @@ public class BaseHospitalRequestMapping {
        public static final String saveWorkTimeRule = "/saveWorkTimeRule";
        public static final String checkDoctorWork = "/checkDoctorWork";
        public static final String importDoctorWork = "/importDoctorWork";
    }

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

@ -11,6 +11,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class AExcelReader {
    protected String code="200";//-1行数超过限制
    protected String mes;
    protected List errorLs = new ArrayList<>();
    protected List correctLs = new ArrayList<>();
    protected Map<String, Set> repeat = new HashMap<>();
@ -63,4 +65,19 @@ public abstract class AExcelReader {
        this.repeat = repeat;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getMes() {
        return mes;
    }
    public void setMes(String mes) {
        this.mes = mes;
    }
}

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

@ -1,6 +1,7 @@
package com.yihu.jw.hospital.endpoint.prescription;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.doctor.service.excel.DoctorWorkTimeExcelReader;
import com.yihu.jw.doctor.service.excel.DoctorWorkTimeMainExcelDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionDiagnosisDO;
@ -12,10 +13,6 @@ import com.yihu.jw.hospital.prescription.service.WorkTimeService;
import com.yihu.jw.hospital.prescription.service.entrance.DoctorPreSignService;
import com.yihu.jw.hospital.service.SystemMessage.HospitalSystemMessageService;
import com.yihu.jw.im.service.ImService;
import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
import com.yihu.jw.restmodel.base.org.BaseOrgVO;
import com.yihu.jw.restmodel.hospital.consult.WlyyHospitalSysDictVO;
import com.yihu.jw.restmodel.hospital.doctor.WlyyDoctorWorkTimeVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyOutpatientVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPrescriptionVO;
import com.yihu.jw.restmodel.im.ConsultVO;
@ -30,9 +27,6 @@ import com.yihu.jw.wlyy.service.WlyyBusinessService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import oracle.jdbc.proxy.annotation.Post;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -1028,12 +1022,54 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
                                      @RequestParam(value = "doctor",required = true)String doctor) throws Exception{
        return success(workTimeService.checkDoctorWork(doctor));
    }
//    @PostMapping(value= BaseHospitalRequestMapping.Prescription.checkDoctorWork)
//    @ApiOperation(value = "判断医生是否在班")
//    public Envelop importData(
//            @ApiParam(name = "file", value = "文件", required = true)
//            @RequestPart(value = "file") MultipartFile file,
//            HttpServletRequest request)throws Exception{
//
//    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.importDoctorWork)
    @ApiOperation(value = "导入排班信息")
    public ListEnvelop importDoctorWork(@ApiParam(name = "file", value = "文件", required = true)
                                        @RequestPart(value = "file") MultipartFile file,
                                        @ApiParam(name = "hospital", value = "医院编码")
                                        @RequestParam(value = "hospital",required = true)String hospital,
                                        @ApiParam(name = "dateMoth", value = "年-月,格式:2020-03")
                                        @RequestParam(value = "dateMoth",required = true)String dateMoth,
                                        HttpServletRequest request)throws Exception{
        request.setCharacterEncoding("UTF-8");
        DoctorWorkTimeExcelReader reader = new DoctorWorkTimeExcelReader();
        reader.read(file);
        if("-1".equals(reader.getCode())) {
            ListEnvelop envelop = new ListEnvelop();
            envelop.setStatus(-1);
            envelop.setMessage("目前仅支持200位医生同时导入!");
            return envelop;
        }
        List<DoctorWorkTimeMainExcelDO> errorLs = reader.getErrorLs();
        List<DoctorWorkTimeMainExcelDO> correctLs = reader.getCorrectLs();
        if(errorLs!=null&&errorLs.size()>0){
            ListEnvelop envelop = new ListEnvelop();
            envelop.setStatus(-1);
            envelop.setMessage("格式错误!");
            envelop.setDetailModelList(errorLs);
            return envelop;
        }
        Map<String,Object> rs = workTimeService.getExcelWorkInfo(correctLs,dateMoth,hospital);
        List<DoctorWorkTimeMainExcelDO> error = (List<DoctorWorkTimeMainExcelDO>)rs.get("error");
        Integer errorTotal = (Integer) rs.get("errorTotal");
        Integer succTotal = (Integer) rs.get("succTotal");
        if(error!=null&&error.size()>0){
            ListEnvelop envelop = new ListEnvelop();
            envelop.setStatus(-1);
            envelop.setMessage(succTotal+"位医生,更新成功!"+","+errorTotal+"位医生,身份信息错误!更新失败!");
            envelop.setDetailModelList(error);
            return envelop;
        }
        ListEnvelop envelop = new ListEnvelop();
        envelop.setStatus(200);
        envelop.setMessage("导入成功!"+succTotal+"位医生排班数据!");
        envelop.setDetailModelList(error);
        return envelop;
    }
}