Sfoglia il codice sorgente

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

 Conflicts:
	common/common-entity/sql记录
wsl 2 anni fa
parent
commit
f20feebd72
18 ha cambiato i file con 1887 aggiunte e 205 eliminazioni
  1. 675 0
      How-To-Ask-Questions-The-Smart-Way.md
  2. 4 1
      business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportUploadDao.java
  3. 788 116
      business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java
  4. 14 0
      common/common-entity/sql记录
  5. 32 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java
  6. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportItemDO.java
  7. 41 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportItemMembersDO.java
  8. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java
  9. 33 0
      common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java
  10. 56 0
      common/common-util/src/main/java/com/yihu/jw/util/file/FileUtil.java
  11. 1 0
      gateway/ag-basic/src/main/java/com/yihu/jw/gateway/filter/PostFilter.java
  12. 8 0
      gateway/ag-basic/src/main/resources/application.yml
  13. 3 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/YsConfig.java
  14. 20 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/YsDeviceController.java
  15. 22 34
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java
  16. 27 6
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/YsDeviceService.java
  17. 98 40
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/dailyReport/DailyReportUploadPoint.java
  18. 47 1
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/rehabilitation/RehabilitationPlanController.java

File diff suppressed because it is too large
+ 675 - 0
How-To-Ask-Questions-The-Smart-Way.md


+ 4 - 1
business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportUploadDao.java

@ -32,5 +32,8 @@ public interface BaseDailyReportUploadDao extends PagingAndSortingRepository<Bas
    List<BaseDailyReportUploadDO> selectDailyReportByDoctorAndDate(String doctor, String startDate, String endDate);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 order by a.reportDate desc")
    Page<BaseDailyReportUploadDO> selectDailyReportByDoctor(String doctor, Pageable pageRequest);
    Page<BaseDailyReportUploadDO> selectDailyReportByDoctorAndPage(String doctor, Pageable pageRequest);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 order by a.reportDate desc")
    List<BaseDailyReportUploadDO> selectDailyReportByDoctor(String doctor);
}

+ 788 - 116
business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java

@ -22,6 +22,7 @@ import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.PwdUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.file.FileUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.utils.StringUtil;
@ -30,8 +31,13 @@ import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.enterprise.EnterpriseService;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseUserDao;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import jxl.Workbook;
import jxl.write.*;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.util.WorkbookUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@ -44,9 +50,13 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Created by Bing on 2022/7/25.
@ -360,6 +370,29 @@ public class DailyReportUploadService {
        dailyReportUploadDO = dailyReportUploadDao.save(dailyReportUploadDO);
        for (BaseDailyReportDetailDO tmp :detailDOList){
            tmp.setReportId(dailyReportUploadDO.getId());
            if (tmp.isReportItemFlag()==true){//新则自建关联项目
                String title = tmp.getReportItemTitle();
                BaseDailyReportItemDO reportItemDO = new BaseDailyReportItemDO();
                reportItemDO.setState(0);
                reportItemDO.setDel(1);
                reportItemDO.setTitle(title);
                reportItemDO.setContent(tmp.getReportContent());
                reportItemDO.setBeginTime(null);
                reportItemDO.setEndTime(null);
                reportItemDO.setCreateTime(new Date());
                reportItemDO.setCreateUser(doctorId);
                reportItemDO.setCreateUserName(doctorDO.getName());
                reportItemDO = reportItemDao.save(reportItemDO);
                BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
                membersDOTmp.setReportItemId(reportItemDO.getId());
                membersDOTmp.setUserId(doctorId);
                membersDOTmp.setUserName(doctorDO.getName());
                membersDOTmp.setDel(1);
                reportItemMembersDao.save(membersDOTmp);
                tmp.setReportItemId(reportItemDO.getId());
                tmp.setReportItemName(title);
            }
        }
        if (detailDOList.size()>0){
            reportDetailDao.save(detailDOList);
@ -376,22 +409,29 @@ public class DailyReportUploadService {
        if (boosSenderIds.size()>0){
            boosID=boosSenderIds.get(0);
        }
        List<BaseDoctorRoleDO> roleDOS = doctorRoleDao.findByDoctorCode(doctorId);
        if (roleDOS.size()==0){//普通员工 需要查询对应上级人员
            if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
                BaseDoctorHospitalDO doctorHospitalDO = doctorHospitalDOS.get(0);
                sql = " select role.doctor_code from base_doctor_role role INNER JOIN base_doctor_hospital dh  " +
                        "on role.doctor_code = dh.doctor_code and dh.dept_code='"+doctorHospitalDO.getDeptCode()+"'  " +
                        "where role.role_code='deptAdmin' ";
                List<String> deptAdmins = jdbcTemplate.queryForList(sql,String.class);
                if (deptAdmins.size()>0){
                    senderID = deptAdmins.get(0);
                }else {
                    senderID=boosID;
        //优先查询核实人指定表无记录再按默认逻辑
        sql = " select verify_user from base_daily_report_verify where upload_user='"+doctorId+"' and del=1 ";
        List<String> verifyList = jdbcTemplate.queryForList(sql,String.class);
        if (verifyList.size()>0){
            senderID = verifyList.get(0);
        }else {
            List<BaseDoctorRoleDO> roleDOS = doctorRoleDao.findByDoctorCode(doctorId);
            if (roleDOS.size()==0){//普通员工 需要查询对应上级人员
                if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
                    BaseDoctorHospitalDO doctorHospitalDO = doctorHospitalDOS.get(0);
                    sql = " select role.doctor_code from base_doctor_role role INNER JOIN base_doctor_hospital dh  " +
                            "on role.doctor_code = dh.doctor_code and dh.dept_code='"+doctorHospitalDO.getDeptCode()+"'  " +
                            "where role.role_code='deptAdmin' ";
                    List<String> deptAdmins = jdbcTemplate.queryForList(sql,String.class);
                    if (deptAdmins.size()>0){
                        senderID = deptAdmins.get(0);
                    }else {
                        senderID=boosID;
                    }
                }
            }else {//部门管理员 发送对象为老板
                senderID = boosID;
            }
        }else {//部门管理员 发送对象为老板
            senderID = boosID;
        }
        if (StringUtils.isNotBlank(senderID)){
            BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(senderID);
@ -433,6 +473,7 @@ public class DailyReportUploadService {
    @Transactional(rollbackFor = Exception.class)
    public BaseDailyReportUploadDO verifiedItem(String doctorId,String reportId,List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        String nowDate = DateUtil.getStringDateShort();
        if (null==doctorDO){
            throw  new Exception("无权限审核");
        }
@ -441,10 +482,13 @@ public class DailyReportUploadService {
        if (null==dailyReportUploadDO){
            throw  new Exception("核实记录未查询到");
        }
        if (DateUtil.getDays(nowDate,dailyReportUploadDO.getReportDate())>7){
            throw  new Exception("上传记录已超过7天无法再次操作");
        }
        if(detailDOList.size()>0){//无完成事项内容
            boolean doubt  =false;
            for (BaseDailyReportDetailDO tmp:detailDOList){
                if (1==tmp.getDoubt()){
                if (1==tmp.getDoubt()&&(null==tmp.getDoubtState()||0==tmp.getDoubtState())){
                    doubt = true;
                }
                tmp.setVerificationTime(new Date());
@ -583,27 +627,38 @@ public class DailyReportUploadService {
    /**
     * 查询成员的日报上传记录
     * @param doctorId
     * @param startDate
     * @param endDate
     * @param page
     * @param pageSize
     * @param startDateStr
     * @param endDateStr
     * @return
     */
    public Page<BaseDailyReportUploadDO> selectReportByDoctorId(String doctorId,String startDate,String endDate,Integer page,Integer pageSize){
        PageRequest pageRequest = new PageRequest(page - 1, pageSize);
        Page<BaseDailyReportUploadDO> list = null;
        if (StringUtils.isNoneBlank(startDate)) {
            list = dailyReportUploadDao.selectDailyReportByDoctorAndDateAndPage(doctorId, startDate, endDate, pageRequest);
        }else {
            list = dailyReportUploadDao.selectDailyReportByDoctor(doctorId, pageRequest);
        }
    public List<Map<String,List<BaseDailyReportUploadDO>>> selectReportByDoctorId(String doctorId,String startDateStr,String endDateStr){
        List<BaseDailyReportUploadDO> list = null;
        list = dailyReportUploadDao.selectDailyReportByDoctorAndDate(doctorId, startDateStr, endDateStr);
        for (BaseDailyReportUploadDO tmp:list){
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(tmp.getId());
            tmp.setDetailDOList(detailDOS);
            List<BaseDailyReportLogDO> dailyReportLogDOList = dailyReportLogDao.findByReportId(tmp.getId());
            tmp.setDailyReportLogDOList(dailyReportLogDOList);
        }
        return list;
        Map<String,List<BaseDailyReportUploadDO>> reportList = list.stream().collect(Collectors.groupingBy(BaseDailyReportUploadDO::getReportDate));
        Date endDate =DateUtil.strToDate(endDateStr);
        Date startDate =DateUtil.strToDate(startDateStr);
        List<Map<String,List<BaseDailyReportUploadDO>>> result = new ArrayList<>();
        for (;;){
            Map<String,List<BaseDailyReportUploadDO>> tmp = new HashMap<>();
            String timeStr = DateUtil.dateToStrShort(endDate);
            if (reportList.get(timeStr)!=null){
                tmp.put(timeStr,reportList.get(timeStr));
            }else {
                tmp.put(timeStr,new ArrayList<>());
            }
            result.add(tmp);
            if (!startDate.before(endDate)){
                break;
            }
            endDate = DateUtil.getPreDays(endDate,-1);
        }
        return result;
    }
    /**
@ -613,6 +668,7 @@ public class DailyReportUploadService {
     * @throws Exception
     */
    public BaseDailyReportUploadDO selectReportById(String reportId) throws Exception {
        String nowDate = DateUtil.getStringDateShort();
        BaseDailyReportUploadDO reportUploadDO = dailyReportUploadDao.findOne(reportId);
        if (null==reportUploadDO){
            throw new Exception("未找到日报记录");
@ -622,6 +678,11 @@ public class DailyReportUploadService {
            List<BaseDailyReportLogDO> dailyReportLogDOList = dailyReportLogDao.findByReportId(reportUploadDO.getId());
            reportUploadDO.setDailyReportLogDOList(dailyReportLogDOList);
        }
        if (DateUtil.getDays(nowDate,reportUploadDO.getReportDate())>7){
            reportUploadDO.setVerifiedRepeatFlag(false);
        }else {
            reportUploadDO.setVerifiedRepeatFlag(true);
        }
        return reportUploadDO;
    }
@ -941,7 +1002,7 @@ public class DailyReportUploadService {
     * @param endDate
     * @return
     */
    public JSONArray selectListByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
    public JSONArray selectListByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name,Integer doubtType) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
@ -977,6 +1038,9 @@ public class DailyReportUploadService {
                    doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                }
            }
            if (null!=doubtType){
                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 inner join base_daily_report_detail rd on d1.id = rd.report_id and rd.doubt_type='"+doubtType+"' where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
            }
            if (StringUtils.isNoneBlank(state)) {//核实状态
                doctorSql +=" and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date +"' and d1.state='"+state+"' ) ";
            }
@ -1010,7 +1074,8 @@ public class DailyReportUploadService {
     * @param name      total
     * @return
     */
    public JSONArray selectListInfoByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
    public JSONArray selectListInfoByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name,
                                           Integer doubtType) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
@ -1046,6 +1111,9 @@ public class DailyReportUploadService {
                    doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                }
            }
            if (null!=doubtType){
                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 inner join base_daily_report_detail rd on d1.id = rd.report_id and rd.doubt_type='"+doubtType+"' where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
            }
            if (StringUtils.isNoneBlank(state)) {//核实状态
                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' and d1.state='" + state + "' ) ";
            }
@ -1094,48 +1162,163 @@ public class DailyReportUploadService {
        return array;
    }
//    /**
//     * 报表导出
//     *
//     * @param startDate
//     * @param endDate
//     * @return
//     */
//    public JSONArray pushListWriteDailyReport(OutputStream os, String startDate, String endDate, String dept) throws Exception {
//        List<String> list = new ArrayList<>();
//        Date startTime = DateUtil.strToDateShort(startDate);
//        Date endDateTime = DateUtil.strToDateShort(endDate);
//        int i=0;
//        do{
//            startTime = DateUtil.getPreDays(startTime, i);
//            String str = DateUtil.dateToStrShort(startTime);
//            list.add(str);
//            i++;
//        }while (startTime.before(endDateTime));
//        JSONArray array = new JSONArray();
//        for (i = 0; i < list.size(); i++) {
//            String date = list.get(i);
//            String doctorSql = " select id,name,job_title_name from base_doctor d where d.del=1 ";
//            if (StringUtils.isNoneBlank(dept)) {
//                doctorSql += " and d.id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
//            }
//            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(doctorSql);
//
//            for (Map<String, Object> map : mapList) {
//                String id = map.get("id").toString();
//                List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(id);
//                if (baseDoctorHospitalDOS != null && baseDoctorHospitalDOS.size() != 0) {
//                    map.put("deptName", baseDoctorHospitalDOS.get(0).getDeptName());
//                }
//            }
//            JSONObject object = new JSONObject();
//            object.put("time", date);
//            object.put("list", mapList);
//            array.add(object);
//        }
//        pushListWritePriceTotal(os, array, startDate, endDate);
//        return array;
//    }
    /**
     * 获取存疑列表列表的时间及数量
     * @param dept
     * @param idType
     * @param startDate
     * @param endDate
     * @param name
     * @param doubtType
     * @return
     */
    public JSONArray selectListByTotalDoubt(String dept, String idType, String startDate, String endDate, String name,Integer doubtType) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
        do{
            startTime = DateUtil.getPreDays(startTime, i);
            String str = DateUtil.dateToStrShort(startTime);
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        JSONArray array = new JSONArray();
        for ( i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doubtSql = " select count(distinct rd.id) as 'total' from base_doctor_daily_report_upload up " +
                    " inner join base_doctor d on up.doctor_id = d.id and d.del=1 and d.identity=0 " +
                    " inner join base_daily_report_detail rd on up.id = rd.report_id  " +
                    "  where rd.doubt=1 and up.report_date >='" + date + "' and up.report_date<='" + date + "' and up.state=1  ";
            String deptCondition = "";
            if (StringUtils.isNoneBlank(dept)) {
                deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            }
            if (StringUtils.isNoneBlank(idType)) {
                doubtSql += " and  d.id_type = '" + idType + "' ";
            }
            if (StringUtils.isNoneBlank(deptCondition)) {
                doubtSql += " and d.id IN " + deptCondition;
            }
            if (null!=doubtType){
                if (0==doubtType){
                    doubtSql += " and rd.doubt_type is not null ";
                }else{
                    doubtSql += " and rd.doubt_type='"+doubtType+"' ";
                }
            }
            if (StringUtils.isNoneBlank(name)) {
                doubtSql += " and d.name LIKE  '%" + name + "%' ";
            }
            Map<String, Object> map = jdbcTemplate.queryForMap(doubtSql);
            Integer total = 0;
            if (map != null) {
                if (map.get("total") != null) {
                    total = Integer.parseInt(map.get("total").toString());
                }
            }
            JSONObject object = new JSONObject();
            object.put("time", date);
            object.put("total", total);
            array.add(object);
        }
        return array;
    }
    /**
     * 获取存疑列表的具体人员信息
     *
     * @param dept
     * @param idType
     * @param startDate
     * @param endDate
     * @param name
     * @return
     */
    public JSONArray selectListInfoByTotalDoubt(String dept, String idType, String startDate, String endDate, String name,
                                           Integer doubtType) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
        do{
            startTime = DateUtil.getPreDays(startTime, i);
            String str = DateUtil.dateToStrShort(startTime);
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        JSONArray array = new JSONArray();
        for (i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doubtSql = " select up.doctor_id,up.doctor_name,rd.id detailId,rd.report_id uploadId,rd.sort,rd.report_content, " +
                    " rd.completion_schedule,rd.actual_completion_hour,rd.completion_hour, " +
                    " rd.state,DATE_FORMAT(rd.verification_time,'%Y-%m-%d %H:%i:%S') verification_time,rd.remark,rd.doubt,rd.doubt_state, " +
                    " rd.doubt_remark,rd.report_item_id,rd.report_item_name,rd.verification_user_name,rd.doubt_type " +
                    " from base_doctor_daily_report_upload up " +
                    " inner join base_doctor d on up.doctor_id = d.id and d.del=1 and d.identity=0 " +
                    " inner join base_daily_report_detail rd on up.id = rd.report_id  " +
                    "  where rd.doubt=1 and up.report_date >='" + date + "' and up.report_date<='" + date + "' and up.state=1  ";
            String deptCondition = "";
            if (StringUtils.isNoneBlank(dept)) {
                deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            }
            if (StringUtils.isNoneBlank(idType)) {
                doubtSql += "   and d.id_type = '" + idType + "')";
            }
            if (StringUtils.isNoneBlank(deptCondition)) {
                doubtSql += " and d.id IN " + deptCondition;
            }
            if (null!=doubtType){
                if(0==doubtType){
                    doubtSql += " and rd.doubt_type is not null ";
                }else {
                    doubtSql += " and rd.doubt_type='"+doubtType+"' ";
                }
            }
            if (StringUtils.isNoneBlank(name)) {
                doubtSql += " and d.name LIKE  '%" + name + "%' ";
            }
            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(doubtSql);
            for (Map<String, Object> map : mapList) {
                String id = map.get("doctor_id").toString();
                List<BaseDoctorHospitalDO> hospitalDOList = baseDoctorHospitalDao.findByDoctorCode(id);
                map.put("deptInfo", hospitalDOList);
                String stateMap = map.get("state").toString();
                String doubtState = map.get("doubt_state")==null?"":map.get("doubt_state").toString();
                String doubt_type = map.get("doubt_type")==null?"":map.get("doubt_type").toString();
                if("1".equals(stateMap)){
                    map.put("verifiedState", "已核实");
                } else {
                    map.put("verifiedState", "未核实");
                }
                map.put("doubt_state", "");
                if (StringUtils.isNotBlank(doubtState)){
                    if("1".equals(doubtState)){
                        map.put("doubt_state", "存疑已核实");
                    } else {
                        map.put("doubt_state", "存疑未核实");
                    }
                }
                map.put("doubt_type", "");
                if (StringUtils.isNotBlank(doubt_type)){
                    if("1".equals(doubt_type)){
                        map.put("doubt_type", "不饱和存疑");
                    } else if ("2".equals(doubt_type)){
                        map.put("doubt_type", "效率存疑");
                    }else {
                        map.put("doubt_type", "");
                    }
                }
            }
            JSONObject object = new JSONObject();
            object.put("time", date);
            object.put("list", mapList);
            array.add(object);
        }
        return array;
    }
    /**
@ -1389,6 +1572,8 @@ public class DailyReportUploadService {
        Integer weishangbaoTotal = 0;
        Integer verifiedTotal = 0;
        Integer notVerifiedTotal = 0;
        Integer baoheDoubt = 0;
        Integer xiaolvDoubt = 0;
        //已上传
        Map<String, Object> yishangchaungMap = jdbcTemplate.queryForMap(sql);
        if (yishangchaungMap != null) {
@ -1443,19 +1628,54 @@ public class DailyReportUploadService {
        if (level==2){
            notVerifiedTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        //正常
        Map<String, Object> yichangMap = jdbcTemplate.queryForMap(notVerifiedTotalSql);
        if (yichangMap != null) {
            if (yichangMap.get("total") != null) {
                notVerifiedTotal = Integer.parseInt(yichangMap.get("total").toString());
            }
        }
        //不饱和存疑
        String baoheTotalSql = "select COUNT(de.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on de.report_id = d.id  where  de.doubt_type=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            baoheTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            baoheTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Map<String, Object> baoheMap = jdbcTemplate.queryForMap(baoheTotalSql);
        if (baoheMap != null) {
            if (baoheMap.get("total") != null) {
                baoheDoubt = Integer.parseInt(baoheMap.get("total").toString());
            }
        }
        //效率存疑
        String xiaolvTotalSql = "select COUNT(de.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on de.report_id = d.id  where  de.doubt_type=2  ";
        if (StringUtils.isNoneBlank(startDate)) {
            xiaolvTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            xiaolvTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Map<String, Object> xiaolvMap = jdbcTemplate.queryForMap(xiaolvTotalSql);
        if (xiaolvMap != null) {
            if (xiaolvMap.get("total") != null) {
                xiaolvDoubt = Integer.parseInt(xiaolvMap.get("total").toString());
            }
        }
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
        object.put("verifiedTotal", verifiedTotal);//已核实
        object.put("notVerifiedTotal", notVerifiedTotal);//未核实
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        object.put("baoheDoubt", baoheDoubt);//不饱和存疑数量
        object.put("xiaolvDoubt", xiaolvDoubt);//效率存疑数量
        object.put("doubtTotal", baoheDoubt+xiaolvDoubt);//存疑总数
        return object;
    }
@ -1517,6 +1737,8 @@ public class DailyReportUploadService {
        Integer notVerified=0;//未核实
        Integer verified=0;//已核实
        Integer shangchuanTotal=0;//上传总次数
        Integer baoheDoubt=0;//饱和度存疑次数
        Integer xiaolvDoubt=0;//效益存疑数量
        if (StringUtils.isNoneBlank(startDate)) {
            sql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
@ -1560,24 +1782,41 @@ public class DailyReportUploadService {
        //已核实数量
        String verifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=1 ";
        //不饱和存疑
        String bubaoheSql = "select COUNT(DISTINCT de.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=1 and de.doubt_type=1 ";
        //效率存疑
        String xiaolvSql = "select COUNT(DISTINCT de.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=1 and de.doubt_type=2 ";
        if (StringUtils.isNoneBlank(startDate)) {
            notVerifiedSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
            verifiedSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
            bubaoheSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
            xiaolvSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            notVerifiedSql += " and d.doctor_id IN " + deptCondition;
            verifiedSql += " and d.doctor_id IN " + deptCondition;
            bubaoheSql += " and d.doctor_id IN " + deptCondition;
            xiaolvSql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            notVerifiedSql += " and d.doctor_id IN " + idTypeCondition;
            verifiedSql += " and d.doctor_id IN " + idTypeCondition;
            bubaoheSql += " and d.doctor_id IN " + idTypeCondition;
            xiaolvSql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            notVerifiedSql += " and d.doctor_name like '%" + name + "%'";
            verifiedSql += " and d.doctor_name like '%" + name + "%'";
            bubaoheSql += " and d.doctor_name like '%" + name + "%'";
            xiaolvSql += " and d.doctor_name like '%" + name + "%'";
        }
        notVerified = jdbcTemplate.queryForObject(notVerifiedSql,Integer.class);
        verified = jdbcTemplate.queryForObject(verifiedSql,Integer.class);
        baoheDoubt = jdbcTemplate.queryForObject(bubaoheSql,Integer.class);
        xiaolvDoubt = jdbcTemplate.queryForObject(xiaolvSql,Integer.class);
        //上传总次数
        shangchuanTotal = jdbcTemplate.queryForObject(shangchuanTotalSql,Integer.class);
@ -1588,6 +1827,9 @@ public class DailyReportUploadService {
        object.put("notVerified", notVerified);//未核实数量
        object.put("verified", verified);//已核实数量
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        object.put("baoheDoubt", baoheDoubt);//饱和度存疑次数
        object.put("xiaolvDoubt", xiaolvDoubt);//效率存疑次数
        object.put("doubtTotal", baoheDoubt+xiaolvDoubt);//存疑总数
        return object;
    }
@ -1622,23 +1864,30 @@ public class DailyReportUploadService {
        if (1==member_type){//指定成员
            List<String> membersList = Arrays.asList(members.split(","));
            for (String tmp:membersList){
                BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
                membersDOTmp.setReportItemId(reportItemDO.getId());
                membersDOTmp.setUserId(tmp);
                membersDOTmp.setDel(1);
                membersDOS.add(membersDOTmp);
                BaseDoctorDO docMemberTmp = baseDoctorDao.findById(tmp);
                if (null!=docMemberTmp){
                    BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
                    membersDOTmp.setReportItemId(reportItemDO.getId());
                    membersDOTmp.setUserId(tmp);
                    membersDOTmp.setUserName(docMemberTmp.getName());
                    membersDOTmp.setDel(1);
                    membersDOS.add(membersDOTmp);
                }
            }
        }else if (2==member_type){
            List<String> depts = Arrays.asList(members.split(","));
            for (String dept:depts){
                sql =  " select distinct doc.id from base_doctor doc inner join base_doctor_hospital dh  " +
                sql =  " select distinct doc.id,doc.name from base_doctor doc inner join base_doctor_hospital dh  " +
                        "on doc.id = dh.doctor_code and doc.del=1 and dh.del=1  " +
                        "where dh.dept_code='"+dept+"' ";
                List<String> membersList = jdbcTemplate.queryForList(sql,String.class);
                for (String tmp:membersList){
                List<Map<String,Object>> membersList = jdbcTemplate.queryForList(sql);
                for (Map<String,Object> tmp:membersList){
                    String docTmp = tmp.get("id").toString();
                    String docNameTmp = tmp.get("name").toString();
                    BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
                    membersDOTmp.setReportItemId(reportItemDO.getId());
                    membersDOTmp.setUserId(tmp);
                    membersDOTmp.setUserId(docTmp);
                    membersDOTmp.setUserName(docNameTmp);
                    membersDOTmp.setDel(1);
                    membersDOS.add(membersDOTmp);
                }
@ -1688,11 +1937,15 @@ public class DailyReportUploadService {
        reportItemMembersDao.deleteAllByReportItemId(reportItemDO.getId());
        List<String> membersList = Arrays.asList(members.split(","));
        for (String tmp:membersList){
            BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
            membersDOTmp.setReportItemId(reportItemDO.getId());
            membersDOTmp.setUserId(tmp);
            membersDOTmp.setDel(1);
            membersDOS.add(membersDOTmp);
            BaseDoctorDO docMemberTmp = baseDoctorDao.findById(tmp);
            if (null!=docMemberTmp){
                BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
                membersDOTmp.setReportItemId(reportItemDO.getId());
                membersDOTmp.setUserId(tmp);
                membersDOTmp.setUserName(docMemberTmp.getName());
                membersDOTmp.setDel(1);
                membersDOS.add(membersDOTmp);
            }
        }
        if (membersDOS.size()>0){
            reportItemMembersDao.save(membersDOS);
@ -1722,13 +1975,22 @@ public class DailyReportUploadService {
        }
        reportItemDO.setState(1);
        if (StringUtils.isNoneBlank(completionUser)){
            reportItemDO.setCompletionUser(completionUser);
            BaseDoctorDO completionUserDO = baseDoctorDao.findById(completionUser);
            if (null!=completionUserDO){
                reportItemDO.setCompletionUser(completionUser);
                reportItemDO.setCompletionUserName(completionUserDO.getName());
            }else {
                throw new Exception("完成人不存在");
            }
        }else {
            reportItemDO.setCompletionUser(user);
            reportItemDO.setCompletionUserName(doctorDO.getName());
        }
        if (StringUtils.isNoneBlank(completionHour)){
            reportItemDO.setCompletionHour(completionHour);
        }else {
            //查询出关联的日报详情,计算完成时间
            sql = " select IFNULL(sum(actual_completion_hour),'0') from base_daily_report_detail " +
            sql = " select sum(IFNULL(actual_completion_hour,IFNULL(completion_hour,'0'))) from base_daily_report_detail " +
                    " where report_item_id='"+item_id+"' ";
            String completionHoursql = jdbcTemplate.queryForObject(sql,String.class);
            reportItemDO.setCompletionHour(completionHoursql);
@ -1780,7 +2042,14 @@ public class DailyReportUploadService {
        if (null==reportItemDO){
            throw new Exception("日报项目不存在");
        }
        List<BaseDailyReportItemMembersDO> membersDOS = reportItemMembersDao.findMembersByItemId(reportItemDO.getId());
        String sql = " select m.*,IFNULL(A.completion_hour,0) completion_hour,dh.dept_code,dh.dept_name from base_daily_report_item_members m  " +
                "LEFT JOIN ( " +
                "select up.doctor_id,SUM(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0))) completion_hour " +
                " from base_doctor_daily_report_upload up " +
                "INNER JOIN base_daily_report_detail rd on up.id = rd.report_id and rd.report_item_id='"+item_id+"' )A on m.user_id = A.doctor_id " +
                "INNER JOIN base_doctor_hospital dh on m.user_id = dh.doctor_code and dh.del=1 " +
                " where m.del=1 and m.report_item_id='"+item_id+"' ";
        List<BaseDailyReportItemMembersDO> membersDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseDailyReportItemMembersDO.class));
        reportItemDO.setItemMembersDOList(membersDOS);
        return reportItemDO;
    }
@ -1795,7 +2064,7 @@ public class DailyReportUploadService {
            throw new Exception("您无权限操作");
        }
        List<BaseDailyReportItemDO> itemDOS = new ArrayList<>();
        sql = " select i.* from base_daily_report_item i where 1=1 ";
        sql = " select i.* from base_daily_report_item i where 1=1 and i.del=1 ";
        if (StringUtils.isNotBlank(title)){
            sql +=" and i.title like '%"+title+"%' ";
        }
@ -1876,9 +2145,9 @@ public class DailyReportUploadService {
        List<BaseDailyReportItemDO> itemDOS = new ArrayList<>();
        String sqlCondition = "  ";
        String sqlList = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName," +
                " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour " +
                " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,count(distinct up.doctor_id) as doctorTotal " +
                " from base_daily_report_item i  LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
                " where i.del=1 ";
                "  INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where i.del=1 ";
        String sqlCount = " select count(distinct i.id) from base_daily_report_item i where i.del=1 ";
        if (StringUtils.isNotBlank(title)){
            sqlCondition +=" and i.title like '%"+title+"%' ";
@ -1915,23 +2184,23 @@ public class DailyReportUploadService {
        }
        if(1==type){//天
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
                    " count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "group by i.id,DATE_FORMAT(de.create_time,'%Y-%m-%d') order by time asc ";
        }else if (2==type){//按周
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
                    " count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id  " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "group by i.id,DATE_FORMAT(de.create_time,'%Y%v') order by time asc ";
        }else if (3==type){//月
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m') as 'time' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m') as 'time', " +
                    " count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "group by i.id,DATE_FORMAT(de.create_time,'%Y-%m') order by time asc ";
        }else {
@ -1952,41 +2221,54 @@ public class DailyReportUploadService {
        return list;
    }
    public List<Map<String,Object>> statisticReportItemMembersById(String user,String item_id,Integer type) throws Exception {
    public List<Map<String,Object>> statisticReportItemMembersById(String user,String item_id,Integer type,String member) throws Exception {
        String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
        List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
        if (userRoles.size()==0){
            throw new Exception("您无权限操作");
        }
        String memberSql = " ";
        if (StringUtils.isNotBlank(member)){
            memberSql = " and up.doctor_id='"+member+"' ";
        }
        String searchTimeFormat = "";
        if(0==type){
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_name doctorName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time' " +
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time'," +
                    " DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'searchTime' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "where 1=1 and i.id='"+item_id+"' " +memberSql+
                    "group by i.id,up.doctor_id order by completionHour desc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
        }
        if(1==type){//天
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_name doctorName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time' " +
        else if(1==type){//天
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
                    "DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'searchTime' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "group by i.id,up.doctor_id,DATE_FORMAT(de.create_time,'%Y-%m-%d') order by time asc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
        }else if (2==type){//按周
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_name doctorName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time' " +
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
                    "DATE_FORMAT(de.create_time,'%Y%v') as 'searchTime' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "where 1=1 and i.id='"+item_id+"' " +memberSql+
                    "group by i.id,up.doctor_id,DATE_FORMAT(de.create_time,'%Y%v') order by time asc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
        }else if (3==type){//月
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_name doctorName, " +
                    " CAST(IFNULL(sum(de.actual_completion_hour),'0') as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m') as 'time' " +
            sql = " select i.id,i.title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m') as 'time', " +
                    "DATE_FORMAT(de.create_time,'%Y-%m') as 'searchTime' " +
                    "from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +
                    "where 1=1 and i.id='"+item_id+"' " +
                    "where 1=1 and i.id='"+item_id+"' " +memberSql+
                    "group by i.id,up.doctor_id,DATE_FORMAT(de.create_time,'%Y-%m') order by time asc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
        }else {
            throw new Exception("查询失败,请检查传入参数");
        }
@ -2000,11 +2282,392 @@ public class DailyReportUploadService {
                tmp.put("avgValue",avgValue);
                Double completionHour = Double.valueOf(tmp.get("completionHour").toString());
                tmp.put("timeRange",getRangeDouble(completionHour,totalHour));
                String searchTime =tmp.get("searchTime").toString();
                String doctorId = tmp.get("doctor_id").toString();
                sql = " select up.doctor_name,up.report_date,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour " +
                        " from base_daily_report_detail de  INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id  " +
                        "where  de.report_item_id='"+item_id+"' and up.doctor_id='"+doctorId+"'  " +
                        "and "+searchTimeFormat+"='"+searchTime+"' " +
                        "GROUP BY up.report_date ORDER BY up.report_date asc ";
                List<Map<String,Object>> timeUseList = jdbcTemplate.queryForList(sql);
                tmp.put("timeUseList",timeUseList);
            }
        }
        return list;
    }
    /**
     * 导出项目计划周报月报用时情况
     * @param user
     * @param type 1周报2月报
     * @param date
     * @return
     */
    public void getProjectItemReport(HttpServletResponse response, String user, Integer type, String date) throws Exception {
        //判断导出人权限
        String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
        List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
        boolean adminFlag = false;//true 为总管理员 false为部门管理员
        String startTime = "";
        String endTime = "";
        if (userRoles.size()==0){
            throw new Exception("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
                adminFlag = true;
            } else if ("deptAdmin".equals(role_code)) {
                adminFlag = false;
            }else {
                throw new Exception("您无权限操作");
            }
        }
        if(1==type){//周报
           //获取日期对应月、周范围
            startTime =  DateUtil.getMondayOfThisWeek(DateUtil.strToDate(date))+" 00:00:00";
            endTime =  DateUtil.getSundayOfThisWeek(DateUtil.strToDate(date))+" 23:59:59";
        }else if (2==type){//月报
            startTime =  DateUtil.getFristDayOfMonthThisDate(new Date())+" 00:00:00";
            endTime =  DateUtil.getLastDayOfMonthThisDate(new Date())+" 23:59:59";
        }else {
            throw new Exception("导出失败,请检查传入参数");
        }
        //项目耗时情况
        sql = " select it.title,it.content,sum(IFNULL(pd.actual_completion_hour,IFNULL(pd.completion_hour,0))) 'completion_hour' ," +
                " CASE it.state WHEN 1 THEN '已完成' ELSE '未完成' END as 'state',DATE_FORMAT(it.create_time,'%Y-%m-%d %H:%i:%S') create_time,it.create_user_name " +
                "from base_daily_report_item it LEFT JOIN base_daily_report_detail pd  " +
                "on it.id = pd.report_item_id " +
                " and it.del=1 and it.state>=0 and pd.create_time>='"+startTime+"' and pd.create_time<='"+endTime+"'  " +
                " where (it.completion_time is null or it.completion_time>='"+startTime+"') " ;
        if (!adminFlag){
            sql +=" and it.create_user='"+user+"' ";
        }
        sql +=  "GROUP BY it.id ORDER BY it.title,it.create_time desc ";
        List<Map<String,Object>> projectlist = jdbcTemplate.queryForList(sql);
        sql = " select up.doctor_id,up.doctor_name,doc.job_title_name,dh.dept_name,up.week_name,up.report_date, " +
                "CASE up.leave_state WHEN 1 THEN '请假' else '未请假' END as 'leave_state',IFNULL(up.leave_hour,0) leave_hour, " +
                "it.title,it.content,rd.sort,rd.report_content,IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) 'completion_hour', " +
                "DATE_FORMAT(rd.create_time,'%Y-%m-%d %H:%i:%S') create_time,DATE_FORMAT(rd.verification_time,'%Y-%m-%d %H:%i:%S') verification_time," +
                " CASE rd.state WHEN 1 THEN '已核实' ELSE '未核实' END as 'verification_state',rd.verification_user_name,CASE rd.doubt WHEN 1 THEN '存疑' ELSE '无存疑' END as 'doubt', " +
                " CASE rd.doubt WHEN 1 THEN '不饱和存疑' WHEN 2 THEN '效率存疑' ELSE null END as 'doubtType', rd.remark " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id  " +
                "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1 LEFT JOIN  " +
                "base_daily_report_detail rd on up.id = rd.report_id " +
                "LEFT JOIN base_daily_report_item it on rd.report_item_id = it.id " +
                "where 1=1 and rd.create_time>='"+startTime+"' and rd.create_time<='"+endTime+"' " ;
        if (!adminFlag){
            sql +=" and up.doctor_id in ( select distinct dh2.doctor_code from base_doctor_hospital dh " +
                    "INNER JOIN base_doctor_hospital dh2 on dh.dept_code = dh2.dept_code " +
                    "INNER JOIN base_doctor doc on dh2.doctor_code = doc.id   " +
                    "where dh.doctor_code='"+user+"' and dh.del=1 and dh2.del=1 and doc.del=1 ) ";
        }
        sql += "ORDER BY up.doctor_id, report_date,rd.sort asc ";
        List<Map<String,Object>> userCompleteList = jdbcTemplate.queryForList(sql);
        //项目对应员工完成情况
        projectItemReportToOutStream(response,type,projectlist,userCompleteList,DateUtil.dateToStrFormatShort(DateUtil.strToDate(startTime)),DateUtil.dateToStrFormatShort(DateUtil.strToDate(endTime)));
    }
    /**
     * 导出员工周报月报提交情况
     * @param user
     * @param type 1周报2月报
     * @param date
     * @return
     */
    public void getUserReportList(HttpServletResponse response,String user,Integer type,String date) throws Exception {
        //判断导出人权限
        String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
        List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
        boolean adminFlag = false;//true 为总管理员 false为部门管理员
        String startTime = "";
        String endTime = "";
        if (userRoles.size()==0){
            throw new Exception("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
                adminFlag = true;
            } else if ("deptAdmin".equals(role_code)) {
                adminFlag = false;
            }else {
                throw new Exception("您无权限操作");
            }
        }
        if(1==type){//周报
            //获取日期对应月、周范围
            startTime =  DateUtil.getMondayOfThisWeek(DateUtil.strToDate(date))+" 00:00:00";
            endTime =  DateUtil.getSundayOfThisWeek(DateUtil.strToDate(date))+" 23:59:59";
        }else if (2==type){//月报
            startTime =  DateUtil.getFristDayOfMonthThisDate(new Date())+" 00:00:00";
            endTime =  DateUtil.getLastDayOfMonthThisDate(new Date())+" 23:59:59";
        }else {
            throw new Exception("导出失败,请检查传入参数");
        }
        sql = " select up.doctor_id,up.doctor_name,doc.job_title_name,dh.dept_name,up.week_name,up.report_date, " +
                "CASE up.leave_state WHEN 1 THEN '请假' else '未请假' END as 'leave_state',IFNULL(up.leave_hour,0) leave_hour, " +
                "it.title,it.content,rd.sort,rd.report_content,IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) 'completion_hour', " +
                "DATE_FORMAT(rd.create_time,'%Y-%m-%d %H:%i:%S') create_time,DATE_FORMAT(rd.verification_time,'%Y-%m-%d %H:%i:%S') verification_time," +
                " CASE rd.state WHEN 1 THEN '已核实' ELSE '未核实' END as 'verification_state',rd.verification_user_name,CASE rd.doubt WHEN 1 THEN '存疑' ELSE '无存疑' END as 'doubt'," +
                " CASE rd.doubt WHEN 1 THEN '不饱和存疑' WHEN 2 THEN '效率存疑' ELSE null END as 'doubtType', rd.remark " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id  " +
                "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1 LEFT JOIN  " +
                "base_daily_report_detail rd on up.id = rd.report_id " +
                "LEFT JOIN base_daily_report_item it on rd.report_item_id = it.id " +
                "where 1=1 and rd.create_time>='"+startTime+"' and rd.create_time<='"+endTime+"' " ;
        if (!adminFlag){
            sql +=" and up.doctor_id in ( select distinct dh2.doctor_code from base_doctor_hospital dh " +
                    "INNER JOIN base_doctor_hospital dh2 on dh.dept_code = dh2.dept_code " +
                    "INNER JOIN base_doctor doc on dh2.doctor_code = doc.id   " +
                    "where dh.doctor_code='"+user+"' and dh.del=1 and dh2.del=1 and doc.del=1 ) ";
        }
        sql += "ORDER BY up.doctor_id, report_date,rd.sort asc ";
        List<Map<String,Object>> userCompleteList = jdbcTemplate.queryForList(sql);
        String typeName = 1==type?"周报":"月报";
        OutputStream os = response.getOutputStream();
        response.setContentType("octets/stream");
        response.setHeader("Content-Disposition", "attachment; filename=" + new String(URLEncoder.encode(typeName+"员工完成情况")+".xls"));
        UserReportListExcel(userCompleteList,os,DateUtil.dateToStrFormatShort(DateUtil.strToDate(startTime)),DateUtil.dateToStrFormatShort(DateUtil.strToDate(endTime)));
    }
   public void projectItemReportToOutStream(HttpServletResponse response,Integer type,List<Map<String,Object>> projectList,List<Map<String,Object>> userCompleteList,
                                            String startDate,String endDate) throws Exception {
       Map<String,List<Map<String,Object>>> projectMap = projectList.stream().collect(Collectors.groupingBy(e -> e.get("title").toString()));
       String typeName = 1==type?"周报":"月报";
       String zipFileName = "项目"+typeName+"完成情况"+startDate+"至"+endDate;
       long time = System.currentTimeMillis();
       String exportConclusionList = time+"exportList";
       String path = this.getClass().getResource("/").getPath() + exportConclusionList;
       File file = new File(path);
       // 删除文件夹、文件
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
       System.out.println("创建文件夹时间:"+sdf.format(new Date()));
       if (file.exists()) {
           if (file != null){
               FileUtil.deleteFolder(file);
               file.mkdir();
           }else {
               file.delete();
               file.mkdir();
           }
       }else {
           file.mkdir();
       }
       /**
        * 开始创建周报/月报耗时情况
        */
       try {
           String fileName = typeName+"完成情况"+".xls";;
           OutputStream os = new FileOutputStream(path+"/"+fileName);
           WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);
           WritableSheet sheet = wwb.createSheet("sheet", 1);
           String header[] = {typeName+"完成情况("+startDate+"至"+endDate+")", "", "","", "", ""};
           int i = 0;
           for (String h : header) {
               addCell(sheet, 0, i, h);
               i++;
           }
           /**
            * mergeCells(a,b,c,d) 单元格合并函数
            * a 单元格的列号
            * b 单元格的行号
            * c 从单元格[a,b]起,向“右”合并的列数 注意c不是合并列的数量,而是列的下标数
            * d 从单元格[a,b]起,向下合并到d行
            */
           sheet.mergeCells(0, 0, header.length-1, 0);
           header = new String[]{"项目", "内容", "用时", "是否完成", "创建人", "创建时间"};
           i = 0;
           for (String h : header) {
               addCell(sheet,1 , i, h);
               i++;
           }
           i=2;
           //记录所需要合并的信息(项目)
           int a=0,b=0,c=0,d=0;
           String titleMerge = null;
           for (Map<String,Object> projectTmp:projectList){
               String title = null==projectTmp.get("title")?"":projectTmp.get("title").toString();
               if (null==titleMerge){
                   titleMerge = title;
                   a = 0;
                   b=i;
                   d=0;
               }
               if (title.equals(titleMerge)){
                   d=i;
               }else {
                   titleMerge = title;
                   sheet.mergeCells(a, b, c, d);
                   a = 0;
                   b=i;
                   d=0;
               }
               addCell(sheet,i , 0,null==projectTmp.get("title")?"":projectTmp.get("title").toString());
               addCell(sheet,i , 1,null==projectTmp.get("content")?"":projectTmp.get("content").toString());
               addCell(sheet,i , 2,null==projectTmp.get("completion_hour")?"":projectTmp.get("completion_hour").toString());
               addCell(sheet,i , 3,null==projectTmp.get("state")?"":projectTmp.get("state").toString());
               addCell(sheet,i , 4,null==projectTmp.get("create_user_name")?"":projectTmp.get("create_user_name").toString());
               addCell(sheet,i , 5,null==projectTmp.get("create_time")?"":projectTmp.get("create_time").toString());
               i++;
           }
           sheet.mergeCells(a, b, c, d);
           wwb.write();
           wwb.close();
           File zipFile = new File(path.replace(exportConclusionList, "") + zipFileName + ".zip");
           if (zipFile.exists()) {
               zipFile.delete();
           }
       }catch (Exception e){
           e.printStackTrace();
       }
       /**
        * 开始创建员工用时情况
        */
       try {
           String fileName = typeName+"员工完成情况"+".xls";;
           OutputStream os = new FileOutputStream(path+"/"+fileName);
           UserReportListExcel(userCompleteList,os,startDate,endDate);
           File zipFile = new File(path.replace(exportConclusionList, "") + zipFileName + ".zip");
           if (zipFile.exists()) {
               zipFile.delete();
           }
       }catch (Exception e){
           e.printStackTrace();
       }
       // 打包文件夹
       if (FileUtil.fileToZip(path, path.replace(exportConclusionList, ""), zipFileName)) {
           file =  new File(path.replace(exportConclusionList, "") + zipFileName + ".zip");
       } else {
           file = null;
       }
       if (file != null) {
           response.setCharacterEncoding("utf-8");
           response.setContentType("multipart/form-data");
           response.setHeader("Content-Disposition", "attachment; filename=" + new String(URLEncoder.encode(zipFileName)+".zip"));
           InputStream inputStream = new FileInputStream(file);
           OutputStream outputStream = response.getOutputStream();
           byte[] b = new byte[2048];
           int length = 0;
           while ((length = inputStream.read(b)) > 0) {
               outputStream.write(b, 0, length);
           }
           outputStream.flush();
           outputStream.close();
           inputStream.close();
       } else {
            response.setStatus(500);
       }
       file.delete();
    }
    /**
     * 员工耗时表格操作
     * @param userCompleteList
     * @param os
     * @param startDate
     * @param endDate
     * @throws IOException
     * @throws WriteException
     */
    public void UserReportListExcel(List<Map<String,Object>> userCompleteList,OutputStream os,String startDate,String endDate) throws IOException, WriteException {
        WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);
        WritableSheet sheet = wwb.createSheet("sheet", 1);
        String[] header = {"员工完成情况("+startDate+"至"+endDate+")","","","","","","","","","","","","","","","","","",""};//
        int k = 0;
        for (String h : header) {
            addCell(sheet, 0, k, h);//表名,行,列,header
            k++;
        }
        sheet.mergeCells(0, 0, header.length-1, 0);
        header = new String[]{"人员", "部门","岗位","日期", "上报日期", "请假状态", "请假时长","关联项目","关联项目内容","事项序号", "事项内容", "用时", "创建时间", "上级核实","核实人员","核实时间","是否存疑","存疑类型","备注"};
        int i = 0;
        for (String h : header) {
            addCell(sheet, 1, i, h);
            i++;
        }
        i=2;
        //记录所需要合并的信息 (人员、日期、上报日期)
        int a1=0,b1=0,c1=0,d1=0;//医生姓名
        int a3=4,b3=0,c3=0,d3=0;//上报日期
        String doctorIdMerge =null;
        String reportDateMerge = null;
        for (Map<String,Object> completeTmp:userCompleteList){
            String reportDate = null==completeTmp.get("report_date")?"":completeTmp.get("report_date").toString();
            String doctorId = null==completeTmp.get("doctor_id")?"":completeTmp.get("doctor_id").toString();
            if (null==doctorIdMerge){
                doctorIdMerge = doctorId;
                b1=i;
                d1=0;
            }
            if (!doctorId.equals(doctorIdMerge)){
                sheet.mergeCells(a1, b1, c1, d1);
                sheet.mergeCells(a1+1, b1, c1, d1);//部门
                sheet.mergeCells(a1+2, b1, c1, d1);//岗位
                sheet.mergeCells(a3-1, b3, c3, d3);//weekName
                sheet.mergeCells(a3,b3, c3, d3);//上报日期
                sheet.mergeCells(a3+1, b3, c3, d3);//请假
                sheet.mergeCells(a3+2, b3, c3, d3);//请假时长
                doctorIdMerge = doctorId;
                reportDateMerge = reportDate;
                b1=i;d1=0;
                b3=i;d3=0;
            }else {//同一个医生。
                d1=i;
                if (null==reportDateMerge){
                    reportDateMerge = reportDate;
                    b3=i;
                    d3=0;
                }
                if (reportDate.equals(reportDateMerge)){
                    d3=i;
                }else {
                    reportDateMerge = reportDate;
                    sheet.mergeCells(a3-1, b3, c3, d3);//weekName
                    sheet.mergeCells(a3, b3, c3, d3);
                    sheet.mergeCells(a3+1, b3, c3, d3);//请假
                    sheet.mergeCells(a3+2, b3, c3, d3);//请假时长
                    b3=i;
                    d3=0;
                }
            }
            addCell(sheet,i, 0,null==completeTmp.get("doctor_name")?"":completeTmp.get("doctor_name").toString());
            addCell(sheet,i, 1,null==completeTmp.get("dept_name")?"":completeTmp.get("dept_name").toString());
            addCell(sheet,i, 2,null==completeTmp.get("job_title_name")?"":completeTmp.get("job_title_name").toString());
            addCell(sheet,i, 3,null==completeTmp.get("week_name")?"":completeTmp.get("week_name").toString());
            addCell(sheet,i, 4,null==completeTmp.get("report_date")?"":completeTmp.get("report_date").toString());
            addCell(sheet,i, 5,null==completeTmp.get("leave_state")?"":completeTmp.get("leave_state").toString());
            addCell(sheet,i, 6,null==completeTmp.get("leave_hour")?"":completeTmp.get("leave_hour").toString());
            addCell(sheet,i ,7,null==completeTmp.get("title")?"":completeTmp.get("title").toString());
            addCell(sheet,i, 8,null==completeTmp.get("content")?"":completeTmp.get("content").toString());
            addCell(sheet,i, 9,null==completeTmp.get("sort")?"":completeTmp.get("sort").toString());
            addCell(sheet,i, 10,null==completeTmp.get("report_content")?"":completeTmp.get("report_content").toString());
            addCell(sheet,i , 11,null==completeTmp.get("completion_hour")?"":completeTmp.get("completion_hour").toString());
            addCell(sheet,i , 12,null==completeTmp.get("create_time")?"":completeTmp.get("create_time").toString());
            addCell(sheet,i , 13,null==completeTmp.get("verification_state")?"":completeTmp.get("verification_state").toString());
            addCell(sheet,i , 14,null==completeTmp.get("verification_user_name")?"":completeTmp.get("verification_user_name").toString());
            addCell(sheet,i , 15,null==completeTmp.get("verification_time")?"":completeTmp.get("verification_time").toString());
            addCell(sheet,i , 16,null==completeTmp.get("doubt")?"":completeTmp.get("doubt").toString());
            addCell(sheet,i , 17,null==completeTmp.get("doubtType")?"":completeTmp.get("doubtType").toString());
            addCell(sheet,i , 18,null==completeTmp.get("remark")?"":completeTmp.get("remark").toString());
            i++;
        }
        sheet.mergeCells(a1, b1, c1, d1);
        sheet.mergeCells(a1+1, b1, c1, d1);//部门
        sheet.mergeCells(a1+2, b1, c1, d1);//岗位
        sheet.mergeCells(a3-1, b3, c3, d3);//weekName
        sheet.mergeCells(a3,b3, c3, d3);//上报日期
        sheet.mergeCells(a3+1, b3, c3, d3);//请假
        sheet.mergeCells(a3+2, b3, c3, d3);//请假时长
        wwb.write();
        wwb.close();
    }
    public double getRangeDouble(Double first, Double second) {
        if (second == 0 && first > 0) {
            //如果分母为0 分子不为0 返回100%
@ -2018,4 +2681,13 @@ public class DailyReportUploadService {
        String filesize = df.format(result);
        return Double.parseDouble(filesize);
    }
    private void addCell(WritableSheet ws, int row, int column, String data) throws WriteException {
        Label label = new Label(column, row, data);
        WritableCellFormat cellFormat = new WritableCellFormat();
        cellFormat.setAlignment(jxl.format.Alignment.CENTRE);
        cellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
        label.setCellFormat(cellFormat);
        ws.addCell(label);
    }
}

+ 14 - 0
common/common-entity/sql记录

@ -2117,6 +2117,20 @@ alter table base_daily_report_detail add column report_item_name VARCHAR(50) DEF
alter table base_daily_report_detail add column verification_user VARCHAR(50) DEFAULT null COMMENT'核实人'
alter table base_daily_report_detail add column verification_user_name VARCHAR(50) DEFAULT null COMMENT'核实人姓名'
alter table base_daily_report_item add column `completion_user_name` varchar(50) DEFAULT NULL COMMENT '完成人';
alter table base_daily_report_item_members add column `user_name` varchar(50) DEFAULT NULL COMMENT '成员成员姓名';
--2022-08-11
ALTER table base_daily_report_detail add column doubt_type TINYINT(2) DEFAULT NULL COMMENT '存疑类型,1不饱和存疑 2效率存疑';
CREATE TABLE `base_daily_report_verify` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `upload_user` varchar(50) DEFAULT NULL COMMENT '日报提交人',
  `verify_user` varchar(50) DEFAULT NULL COMMENT '核实人',
  `del` tinyint(2) DEFAULT NULL COMMENT '1有效0无效',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工日报核实人指定表';
CREATE TABLE `base_yujing_dict` (
  `id` int(11) NOT NULL AUTO_INCREMENT,

+ 32 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java

@ -5,6 +5,7 @@ import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
/**
@ -26,12 +27,16 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    private String verificationUserName;//核实人姓名
    private String remark; //备注内容
    private Integer doubt; //疑惑0无疑惑1存疑
    private Integer doubtType; //存疑类型,1不饱和存疑 2效率存疑
    private Integer doubtState; //疑惑核实状态0未核实1已核实
    private String doubtRemark; //疑惑核实备注
    private String actualCompletionHour; //实际完成时长
    private String reportItemId;//日报项目id
    private String reportItemName;//日报项目名称
    private boolean reportItemFlag;
    private String reportItemTitle;
    public String getReportId() {
        return reportId;
    }
@ -121,6 +126,14 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
        this.doubt = doubt;
    }
    public Integer getDoubtType() {
        return doubtType;
    }
    public void setDoubtType(Integer doubtType) {
        this.doubtType = doubtType;
    }
    public Integer getDoubtState() {
        return doubtState;
    }
@ -160,4 +173,23 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    public void setReportItemName(String reportItemName) {
        this.reportItemName = reportItemName;
    }
    @Transient
    public boolean isReportItemFlag() {
        return reportItemFlag;
    }
    public void setReportItemFlag(boolean reportItemFlag) {
        this.reportItemFlag = reportItemFlag;
    }
    @Transient
    public String getReportItemTitle() {
        return reportItemTitle;
    }
    public void setReportItemTitle(String reportItemTitle) {
        this.reportItemTitle = reportItemTitle;
    }
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportItemDO.java

@ -38,6 +38,7 @@ public class BaseDailyReportItemDO extends UuidIdentityEntity {
    protected Date updateTime;
    protected String updateUser;
    protected String updateUserName;
    private String completionUserName;
    private List<BaseDailyReportItemMembersDO> itemMembersDOList;
@ -174,4 +175,12 @@ public class BaseDailyReportItemDO extends UuidIdentityEntity {
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    public String getCompletionUserName() {
        return completionUserName;
    }
    public void setCompletionUserName(String completionUserName) {
        this.completionUserName = completionUserName;
    }
}

+ 41 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportItemMembersDO.java

@ -5,6 +5,7 @@ import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
 * Created by Bing on 2022/7/25.
@ -16,8 +17,13 @@ public class BaseDailyReportItemMembersDO extends UuidIdentityEntity {
    private String reportItemId;//日报项目id
    private String userId;//项目内容
    private String userName;//项目内容
    private Integer del;//0无效1有效
    private String completionHour;//用时
    private String deptCode;//部门code
    private String deptName;//部门名称
    public String getReportItemId() {
        return reportItemId;
    }
@ -41,4 +47,39 @@ public class BaseDailyReportItemMembersDO extends UuidIdentityEntity {
    public void setDel(Integer del) {
        this.del = del;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    @Transient
    public String getCompletionHour() {
        return completionHour;
    }
    public void setCompletionHour(String completionHour) {
        this.completionHour = completionHour;
    }
    @Transient
    public String getDeptCode() {
        return deptCode;
    }
    public void setDeptCode(String deptCode) {
        this.deptCode = deptCode;
    }
    @Transient
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java

@ -24,6 +24,7 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    private String reportDate; //上报日期
    private String totalHour;//上报时长
    private boolean verifiedRepeatFlag;
    public String getTotalHour() {
        return totalHour;
@ -111,4 +112,12 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
        this.leaveHour = leaveHour;
    }
    @Transient
    public boolean isVerifiedRepeatFlag() {
        return verifiedRepeatFlag;
    }
    public void setVerifiedRepeatFlag(boolean verifiedRepeatFlag) {
        this.verifiedRepeatFlag = verifiedRepeatFlag;
    }
}

+ 33 - 0
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -1019,6 +1019,22 @@ public class DateUtil {
        return df2.format(c.getTime());
    }
    /**
     * 获取某个时间的周一
     * @returnc
     */
    public static String getMondayOfThisWeek(Date date) {
        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (day_of_week == 0){
            day_of_week = 7;
        }
        c.add(Calendar.DATE, -day_of_week + 1);
        return df2.format(c.getTime());
    }
    /**
     * 得到本周周日
     *
@ -1035,6 +1051,23 @@ public class DateUtil {
        return df2.format(c.getTime());
    }
    /**
     * 获取某个时间的周末
     *
     * @return yyyy-MM-dd
     */
    public static String getSundayOfThisWeek(Date date) {
        SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (day_of_week == 0){
            day_of_week = 7;
        }
        c.add(Calendar.DATE, -day_of_week + 7);
        return df2.format(c.getTime());
    }
    /**
     * 获取当月第一天
     * @return

+ 56 - 0
common/common-util/src/main/java/com/yihu/jw/util/file/FileUtil.java

@ -0,0 +1,56 @@
package com.yihu.jw.util.file;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
 * Created by Bing on 2022/2/25.
 */
public class FileUtil {
    public static boolean fileToZip(String sourcePath, String zipPath, String zipName) throws Exception {
        File sourceFile = new File(sourcePath);
        File zipFile = new File(zipPath + File.separator + zipName + ".zip");
        File[] files = sourceFile.listFiles();
        FileOutputStream fos = new FileOutputStream(zipFile);
        ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));
        if (files != null) {
            byte[] bufs = new byte[1024 * 10];
            for (int i = 0; i < files.length; i++) {
                // 创建ZIP实体,并添加进压缩包
                ZipEntry zipEntry = new ZipEntry(files[i].getName());
                zos.putNextEntry(zipEntry);
                // 读取待压缩的文件并写进压缩包里
                FileInputStream fis = new FileInputStream(files[i]);
                BufferedInputStream bis = new BufferedInputStream(fis, 1024 * 10);
                int read = 0;
                while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                    zos.write(bufs, 0, read);
                }
                bis.close();
                fis.close();
            }
            deleteFolder(sourceFile);
        }
        zos.close();
        fos.close();
        return true;
    }
    public static void deleteFolder(File folder){
        File[] files  = folder.listFiles();
        if (files != null){
            for(File f: files){
                if (f.isDirectory()){
                    deleteFolder(f);
                }else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }
}

+ 1 - 0
gateway/ag-basic/src/main/java/com/yihu/jw/gateway/filter/PostFilter.java

@ -144,6 +144,7 @@ public class PostFilter extends ZuulFilter {
                url.contains("/prescription/pushListDrug")||
                url.contains("/open/noLogin/pushYkCardCharge")||
                url.contains("/open/noLogin/pushListWriteHealthInfo")||
                url.contains("/excelControl")||
                url.contains("/prescription/searchRecordWrite")||
                url.contains("/Funds/reconciliationExcel")||
                url.contains("/Funds/deviceInfoExcel")||url.contains("/open/noEntry"))){

+ 8 - 0
gateway/ag-basic/src/main/resources/application.yml

@ -65,6 +65,14 @@ zuul:
    svr-base:
      path: /cityihealth/base/**
      serviceId: svr-base
#药柜预发布环境
    svr-base-yg:
      path: /cityihealth/baseygTest/**
      serviceId: svr-base-yg
#药柜后台预发布
    svr-authentication-yg:
      path: /cityihealth/authygTest/**
      serviceId: svr-authentication-yg
#新冠患者招募
    svr-base-vol:
      path: /cityihealth/baseVol/**

+ 3 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/YsConfig.java

@ -41,6 +41,9 @@ public class YsConfig {
    //获取设备有效直播地址
    public static final String getDeviceLiveAddress = iotBaseUrl+ "/api/lapp/live/address/limited";
    //获取设备有效直播地址(对讲)
    public static final String getDeviceLiveAddress2 = iotBaseUrl+ "/api/lapp/v2/live/address/get";
    //设备视频加解密开关
    public static final String deviceEncrypt = baseUrl+ "/api/resource/device/encrypt/switch";

+ 20 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/YsDeviceController.java

@ -1,12 +1,9 @@
package com.yihu.jw.care.endpoint.device;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.device.YsDeviceService;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -15,12 +12,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by Bing on 2021/6/1.
 */
@ -406,5 +399,25 @@ public class YsDeviceController extends BaseController {
        }
    }
    @ApiOperation("获取播放地址--协议")
    @GetMapping(value = "getDeviceLiveAddress2", produces = "application/x-www-form-urlencoded;charset=UTF-8")
    public String getDeviceLiveAddress2(
            @ApiParam(name="deviceSerial",required = false,value="设备序列号")
            @RequestParam(value = "deviceSerial",required = false) String deviceSerial,
            @ApiParam(name="channelNo",required = false,value="设备通道号,默认为1")
            @RequestParam(value = "channelNo",required = false,defaultValue = "1") Integer channelNo
    ){
        try {
            JSONObject result = ysDeviceService.getDeviceLiveAddress2(deviceSerial,channelNo);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail){
                return error(-1,result.getString(ResponseContant.resultMsg));
            }
            return write(200,"查询成功","data",result.getJSONObject(ResponseContant.resultMsg));
        }catch (Exception e){
            return errorResult(e);
        }
    }
}

+ 22 - 34
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java

@ -7,6 +7,7 @@ import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.NetworkCardService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.device.YsDeviceService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
import com.yihu.jw.care.service.statistics.DetectionPlatformService;
import com.yihu.jw.restmodel.ResponseContant;
@ -46,6 +47,8 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    private DeviceManageService deviceManageService;
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private YsDeviceService ysDeviceService;
    @ApiOperation("环境信息")
@ -463,38 +466,23 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
        }
    }
//    @PostMapping(value = "testDownloadVideoUrl")
//    @ApiOperation(value = "下载m3u8")
//    public ObjEnvelop downM3u8Video(@RequestParam String url) {
//        try {
//            return platformService.downM3u8Video(url);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return ObjEnvelop.getSuccess("1111","");
//    }
//    public static void main(String[] args) {
//        String originUrlpath = "http://videocdn.renrenjiang.cn/Act-ss-m3u8-sd/1037359_1546064640169/1037359_1546064640169.m3u8";
//        String preUrlPath = originUrlpath.substring(0, originUrlpath.lastIndexOf("/")+1);
//        String rootPath = "E:\\videodir";
//        String fileName = "";
//        HlsDownloader downLoader = new HlsDownloader(originUrlpath, preUrlPath, rootPath);
//        //downLoader.setThreadQuantity(10);
//        try{
//            fileName = downLoader.download(true);
//        }
//        catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        if(StringUtils.isBlank(fileName)){
//            System.out.println("下载失败");
//        }else{
//            System.err.println("下载成功"+fileName);
//            System.out.println("完整路径:"+rootPath+"\\"+fileName);
//        }
//
//    }
    @ApiOperation("获取播放地址--协议")
    @GetMapping(value = "getDeviceLiveAddress2")
    public ObjEnvelop getDeviceLiveAddress2(
            @ApiParam(name="deviceSerial",required = false,value="设备序列号")
            @RequestParam(value = "deviceSerial",required = false) String deviceSerial,
            @ApiParam(name="channelNo",required = false,value="设备通道号,默认为1")
            @RequestParam(value = "channelNo",required = false,defaultValue = "1") Integer channelNo
    ){
        try {
            JSONObject result = ysDeviceService.getDeviceLiveAddress2(deviceSerial,channelNo);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail){
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
            return ObjEnvelop.getSuccess("查询成功",result.get(ResponseContant.resultMsg));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
}

+ 27 - 6
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/YsDeviceService.java

@ -1,20 +1,16 @@
package com.yihu.jw.care.service.device;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.config.YsConfig;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.device.YsConfigDao;
import com.yihu.jw.care.dao.label.WlyyPatientLabelDao;
import com.yihu.jw.care.util.DeviceUtil;
import com.yihu.jw.care.util.HttpClientUtilCare;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.care.device.YsConfigDo;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.rm.iot.IotRequestMapping;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.utils.encode.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -32,8 +28,6 @@ import org.springframework.util.MultiValueMap;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.swing.plaf.basic.BasicScrollPaneUI;
import javax.xml.crypto.Data;
import java.security.Security;
import java.text.MessageFormat;
import java.util.*;
@ -750,6 +744,33 @@ public class YsDeviceService {
        return result;
    }
    public JSONObject getDeviceLiveAddress2(String deviceSerial,Integer channelNo) throws Exception {
        JSONObject result = new JSONObject();
        MultiValueMap<String,String> param = new LinkedMultiValueMap<>();
        String accessToken=getIotAccessToken(deviceSerial);
        param.add("accessToken",accessToken);
        if (StringUtils.isNotBlank(deviceSerial)){
            param.add("deviceSerial",deviceSerial);
        }
        if (channelNo!=null){
            param.add("channelNo",channelNo+"");
        }
        HttpEntity<JSONObject> response = httpClientUtil.iotAssesTokenPostHttp(YsConfig.getDeviceLiveAddress2,param,HttpMethod.POST);
        JSONObject responseBody = response.getBody();
        if (responseBody.getInteger("code")==200){
            result.put(ResponseContant.resultFlag,ResponseContant.success);
            JSONObject tmp = new JSONObject();
            tmp.put("url",responseBody.getJSONObject("data").getString("url"));
            tmp.put("accessToken",accessToken);
            result.put(ResponseContant.resultMsg,tmp);
        }else {
            result.put(ResponseContant.resultFlag,ResponseContant.fail);
            result.put(ResponseContant.resultMsg,responseBody.getString("msg"));
        }
        return result;
    }
    /**
     * 消息解密
     * @param sSrc

+ 98 - 40
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/dailyReport/DailyReportUploadPoint.java

@ -14,21 +14,17 @@ import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import com.yihu.jw.utils.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2022/7/25.
@ -186,17 +182,13 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @GetMapping(value = "selectReportByDoctorId")
    @ApiOperation(value = "查询成员的日报上传记录")
    public ObjEnvelop selectReportByDoctorId(@ApiParam(name = "doctorId", value = "医生id")
                                                 @RequestParam(value = "doctorId", required = true) String doctorId,
                                              @ApiParam(name = "startDate", value = "开始日期yyyy-MM-dd")
                                                  @RequestParam(value = "startDate", required = false) String startDate,
                                              @ApiParam(name = "endDate", value = "结束日期")
                                                  @RequestParam(value = "endDate", required = false) String endDate,
                                              @ApiParam(name = "page", value = "页码")
                                                  @RequestParam(value = "page", required = false) Integer page,
                                              @ApiParam(name = "pageSize", value = "大小")
                                                  @RequestParam(value = "pageSize", required = false) Integer pageSize) {
        try {
            Page<BaseDailyReportUploadDO> list = dailyReportUploadService.selectReportByDoctorId(doctorId,startDate,endDate,page,pageSize);
                                             @RequestParam(value = "doctorId", required = true) String doctorId,
                                             @ApiParam(name = "startDate", value = "开始日期yyyy-MM-dd")
                                             @RequestParam(value = "startDate", required = true) String startDate,
                                             @ApiParam(name = "endDate", value = "结束日期")
                                             @RequestParam(value = "endDate", required = true) String endDate) {
        try {
            List<Map<String,List<BaseDailyReportUploadDO>>> list = dailyReportUploadService.selectReportByDoctorId(doctorId,startDate,endDate);
            return ObjEnvelop.getSuccess("success",list);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
@ -324,6 +316,8 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                         @RequestParam(value = "status", required = false) String status,
                                         @ApiParam(name = "state", value = "核实状态 0未核实 1已核实")
                                         @RequestParam(value = "state", required = false) String state,
                                         @ApiParam(name = "doubtType", value = "存疑类型 存疑类型,1不饱和存疑 2效率存疑")
                                         @RequestParam(value = "doubtType", required = false) Integer doubtType,
                                         @ApiParam(name = "startDate", value = "开始时间")
                                         @RequestParam(value = "startDate", required = false) String startDate,
                                         @ApiParam(name = "endDate", value = "结束时间")
@ -331,7 +325,7 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                         @ApiParam(name = "name", value = "名字搜索")
                                         @RequestParam(value = "name", required = false) String name) {
        try {
            JSONArray jsonArray = dailyReportUploadService.selectListByTotal(dept,idType,status,state,startDate,endDate,name);
            JSONArray jsonArray = dailyReportUploadService.selectListByTotal(dept,idType,status,state,startDate,endDate,name,doubtType);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
@ -348,6 +342,8 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                             @RequestParam(value = "status", required = false) String status,
                                             @ApiParam(name = "state", value = "核实状态 0未核实 1已核实")
                                             @RequestParam(value = "state", required = false) String state,
                                             @ApiParam(name = "doubtType", value = "存疑类型 存疑类型,1不饱和存疑 2效率存疑")
                                             @RequestParam(value = "doubtType", required = false) Integer doubtType,
                                             @ApiParam(name = "startDate", value = "开始时间")
                                             @RequestParam(value = "startDate", required = false) String startDate,
                                             @ApiParam(name = "endDate", value = "结束时间")
@ -355,31 +351,56 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                             @ApiParam(name = "name", value = "具体医生姓名")
                                             @RequestParam(value = "name", required = false) String name) {
        try {
            JSONArray jsonArray = dailyReportUploadService.selectListInfoByTotal(dept,idType,status,state,startDate,endDate,name);
            JSONArray jsonArray = dailyReportUploadService.selectListInfoByTotal(dept,idType,status,state,startDate,endDate,name,doubtType);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
//    @GetMapping(value = "open/pushListWriteDailyReport")
//    @ApiOperation(value = "健康上报数据导出", notes = "健康上报数据导出")
//    public Envelop pushListWriteDailyReport(@ApiParam(name = "startDate", value = "开始时间")
//                                 @RequestParam(value = "startDate", required = false) String startDate,
//                                 @ApiParam(name = "endDate", value = "结束时间")
//                                 @RequestParam(value = "endDate", required = false) String endDate,
//                                 @ApiParam(name = "dept", value = "科室id")
//                                 @RequestParam(value = "dept", required = false) String dept,
//                                 HttpServletResponse response) throws Exception {
//        try{
//            response.setContentType("octets/stream");
//            response.setHeader("Content-Disposition", "attachment; filename=" + new String(URLEncoder.encode("健康上报报表")+".xls"));
//            OutputStream os = response.getOutputStream();
//            return success(dailyReportUploadService.pushListWriteDailyReport(os, startDate,endDate,dept));
//        }catch (Exception e) {
//            return failedMixEnvelopException(e);
//        }
//    }
    @GetMapping(value = "selectListByTotalDoubt")
    @ApiOperation(value = "获取存疑列表的时间及数量")
    public ListEnvelop selectListByTotalDoubt(@ApiParam(name = "dept", value = "科室code")
                                         @RequestParam(value = "dept", required = false) String dept,
                                         @ApiParam(name = "idType", value = "身份类别")
                                         @RequestParam(value = "idType", required = false) String idType,
                                         @ApiParam(name = "doubtType", value = "存疑类型0全部 存疑类型,1不饱和存疑 2效率存疑")
                                         @RequestParam(value = "doubtType", required = false) Integer doubtType,
                                         @ApiParam(name = "startDate", value = "开始时间")
                                         @RequestParam(value = "startDate", required = false) String startDate,
                                         @ApiParam(name = "endDate", value = "结束时间")
                                         @RequestParam(value = "endDate", required = false) String endDate,
                                         @ApiParam(name = "name", value = "名字搜索")
                                         @RequestParam(value = "name", required = false) String name) {
        try {
            JSONArray jsonArray = dailyReportUploadService.selectListByTotalDoubt(dept,idType,startDate,endDate,name,doubtType);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectListInfoByTotalDoubt")
    @ApiOperation(value = "获取存疑列表的具体人员信息")
    public ListEnvelop selectListInfoByTotalDoubt(@ApiParam(name = "dept", value = "科室code")
                                             @RequestParam(value = "dept", required = false) String dept,
                                             @ApiParam(name = "idType", value = "身份类别")
                                             @RequestParam(value = "idType", required = false) String idType,
                                             @ApiParam(name = "doubtType", value = "存疑类型0全部 存疑类型,1不饱和存疑 2效率存疑")
                                             @RequestParam(value = "doubtType", required = false) Integer doubtType,
                                             @ApiParam(name = "startDate", value = "开始时间")
                                             @RequestParam(value = "startDate", required = false) String startDate,
                                             @ApiParam(name = "endDate", value = "结束时间")
                                             @RequestParam(value = "endDate", required = false) String endDate,
                                             @ApiParam(name = "name", value = "具体医生姓名")
                                             @RequestParam(value = "name", required = false) String name) {
        try {
            JSONArray jsonArray = dailyReportUploadService.selectListInfoByTotalDoubt(dept,idType,startDate,endDate,name,doubtType);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectRecordByDoctorIdAndConsumer")
    @ApiOperation(value = "查下上报最新一次记录", notes = "查下上报最新一次记录")
@ -415,8 +436,8 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "查询部门下医生", notes = "查询部门下医生")
    public ListEnvelop findDoctorByHospitalAndDeptHeshi(@ApiParam(name = "orgCode", value = "机构code")
                                                   @RequestParam(value = "orgCode", required = false) String orgCode,
                                                        @ApiParam(name = "doctor", value = "当前账户")
                                                        @RequestParam(value = "doctor", required = false) String doctor,
                                                   @ApiParam(name = "doctor", value = "当前账户")
                                                   @RequestParam(value = "doctor", required = false) String doctor,
                                                   @ApiParam(name = "dept", value = "部门code")
                                                   @RequestParam(value = "dept", required = false) String dept,
                                                   @ApiParam(name = "doctorCode", value = "需要置顶医生")
@ -671,9 +692,46 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                               @ApiParam(name = "item_id", value = "item_id")
                                               @RequestParam(value = "item_id", required = true) String item_id,
                                               @ApiParam(name = "type", value = "0全部不按日期进行统计,1天、2周、3月")
                                               @RequestParam(value = "type",defaultValue = "1", required = false) Integer type) {
                                               @RequestParam(value = "type",defaultValue = "1", required = false) Integer type,
                                               @ApiParam(name = "member", value = "指定查看某个成员的用时")
                                               @RequestParam(value = "member", required = false) String member) {
        try {
            return ListEnvelop.getSuccess("success",dailyReportUploadService.statisticReportItemMembersById(user,item_id,type,member));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @RequestMapping(value = "excelControl/getProjectItemReport", method = RequestMethod.GET)
    @ApiOperation("导出项目计划周报月报用时情况")
    public Envelop getProjectItemReport(@ApiParam(name = "user", value = "user")
                                     @RequestParam(value = "user",defaultValue = "1", required = true) String user,
                                     @ApiParam(name = "type", value = "1周报2月报")
                                     @RequestParam(value = "type",defaultValue = "1", required = true) Integer type,
                                     @ApiParam(name = "date", value = "日期yyyy-MM-dd,周报")
                                     @RequestParam(value = "date", required = true) String date,
            HttpServletResponse response) {
        try {
            dailyReportUploadService.getProjectItemReport(response,user,type,date);
            return success("success");
        } catch (Exception e) {
            return failedMixEnvelopException(e);
        }
    }
    @RequestMapping(value = "excelControl/getUserReportList", method = RequestMethod.GET)
    @ApiOperation("导出员工周报月报提交情况")
    @ResponseBody
    public Envelop getUserReportList(@ApiParam(name = "user", value = "user")
                                  @RequestParam(value = "user",defaultValue = "1", required = true) String user,
                                  @ApiParam(name = "type", value = "1周报2月报")
                                  @RequestParam(value = "type",defaultValue = "1", required = true) Integer type,
                                  @ApiParam(name = "date", value = "日期yyyy-MM-dd,周报")
                                  @RequestParam(value = "date",defaultValue = "1", required = true) String date,
                                  HttpServletResponse response) {
        try {
            return ListEnvelop.getSuccess("success",dailyReportUploadService.statisticReportItemMembersById(user,item_id,type));
            dailyReportUploadService.getUserReportList(response,user,type,date);
            return success("success");
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }

+ 47 - 1
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/rehabilitation/RehabilitationPlanController.java

@ -11,7 +11,6 @@ import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.specialist.SpecialistMapping;
import com.yihu.jw.service.rehabilitation.RehabilitationPlanService;
import com.yihu.jw.util.DataUtils;
import com.yihu.jw.util.ImUtill;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
@ -188,6 +187,53 @@ public class RehabilitationPlanController extends EnvelopRestEndpoint {
        }
    }
    @PostMapping(value = "createRehabilitationDetail")
    @ApiOperation(value = "创建康复服务明细")
    public MixEnvelop createRehabilitationDetail(@ApiParam(name = "rehabilitationPlan", value = "实体JSON")
                                                      @RequestParam(value = "rehabilitationPlan", required = true)String rehabilitationPlan){
        try {
            JSONObject json = new JSONObject(rehabilitationPlan);
            String planId = json.getString("id");
            JSONArray array = new JSONArray();
            for(Object planDetail : json.getJSONArray("detail")) {
                JSONObject j = (JSONObject)planDetail;
                if(j.has("executeTime")) {
                    String executeTime = j.get("executeTime").toString();
                    String[] result = null;
                    if (executeTime.contains(",")) {
                        result = executeTime.split(",");
                    } else {
                        result = new String[1];
                        result[0] = executeTime;
                    }
                    int len = result.length;
                    while (len > 0) {
                        len--;
                        JSONObject temp = new JSONObject(j.toString());
                        temp.put("executeTime", result[len]);
                        temp.put("createUser", json.get("createUser"));
                        temp.put("createUserName", json.get("createUserName"));
                        array.put(temp);
                    }
                }else {
                    j.put("createUser", json.get("createUser"));
                    j.put("createUserName", json.get("createUserName"));
                    array.put(j);
                }
            }
            String planDetails = array.toString();
            ObjectMapper object = new ObjectMapper();
            object.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
            List<RehabilitationDetailDO> details = object.readValue(planDetails, new TypeReference<List<RehabilitationDetailDO>>(){});
            details = rehabilitationPlanService.createRehabilitationDetail(details, planId);
            return MixEnvelop.getSuccessList(SpecialistMapping.api_success, details);
        }catch (Exception e){
            e.printStackTrace();
            tracer.getCurrentSpan().logEvent(e.getMessage());
            return MixEnvelop.getError(e.getMessage());
        }
    }
    @GetMapping(value = SpecialistMapping.rehabilitation.findServiceItemsByHospital)
    @ApiOperation(value = "获取机构服务项目列表")
    public MixEnvelop findServiceItemsByHospital(@ApiParam(name = "doctorHospital", value = "医生所在机构")