liubing 2 jaren geleden
bovenliggende
commit
1b8f0cc90e

+ 17 - 0
business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyUrgingRecordDao.java

@ -0,0 +1,17 @@
package com.yihu.jw.dailyReport.dao;
import com.yihu.jw.entity.dailyReport.BaseDailyUrgingRecordDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Bing
 */
public interface BaseDailyUrgingRecordDao extends PagingAndSortingRepository<BaseDailyUrgingRecordDO,String>,
        JpaSpecificationExecutor<BaseDailyUrgingRecordDO> {
    List<BaseDailyUrgingRecordDO> findByCodeAndDel(String code,Integer del);
}

+ 473 - 65
business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java

@ -89,6 +89,8 @@ public class DailyReportUploadService {
    private BaseDailyReportItemDao reportItemDao;
    @Autowired
    private BaseDailyReportItemMembersDao reportItemMembersDao;
    @Autowired
    private BaseDailyUrgingRecordDao urgingRecordDao;
    private static Logger logger = LoggerFactory.getLogger(DailyReportUploadService.class);
@ -406,6 +408,16 @@ public class DailyReportUploadService {
                }
                tmp.setReportItemId(reportItemDO.getId());
                tmp.setReportItemName(title);
            }else {
                BaseDailyReportItemMembersDO membersDOTmp = reportItemMembersDao.findMembers(tmp.getReportItemId(),doctorId);
                if (null==membersDOTmp){
                    membersDOTmp = new BaseDailyReportItemMembersDO();
                    membersDOTmp.setReportItemId(tmp.getReportItemId());
                    membersDOTmp.setUserId(doctorId);
                    membersDOTmp.setUserName(doctorDO.getName());
                    membersDOTmp.setDel(1);
                    reportItemMembersDao.save(membersDOTmp);
                }
            }
            BaseDailyReportItemDO reportItemDO = reportItemDao.findOne(tmp.getReportItemId());
            if (null!=reportItemDO){
@ -561,6 +573,27 @@ public class DailyReportUploadService {
                baseDailyReportLogDO.setTypeName("上级核实未存疑");
                baseDailyReportLogDO.setContent("上级核实未存疑");
            }
            try {
                BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(dailyReportUploadDO.getDoctorId());
                if (remindDoctorDO != null) {
                    try {
                        WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,remindDoctorDO.getMobile());
                        if(enterpriseUserDO==null){
                            logger.info("该用户"+doctorDO.getName()+"没有企业微信手机号,无法推送模版消息,用户ID:"+doctorDO.getId()+"wechatId:"+wechatId);
                        }else{
                            String title = "待办事项";
                            String des = "您好,"+doctorDO.getName()+"对您提交的每日日报已核实,请点击前往查看。";
                            String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/workSummary/commit?id="+dailyReportUploadDO.getId();
                            String res = enterpriseService.sendTWMesByDoctor(wechatId,remindDoctorDO.getId(),title,des,url);
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            dailyReportLogDao.save(baseDailyReportLogDO);
        }else {
@ -626,6 +659,97 @@ public class DailyReportUploadService {
        return dailyReportUploadDO;
    }
    /**
     * 催促代办项目
     */
    @Transactional(rollbackFor = Exception.class)
    public List<BaseDailyUrgingRecordDO> urgingDoctor(String doctorId,String receiveDoctorId, List<BaseDailyUrgingRecordDO> urgingRecordDOS) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (StringUtils.isBlank(receiveDoctorId)){
           BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findOne(urgingRecordDOS.get(0).getReportId());
           if (null==dailyReportUploadDO){
               throw new Exception("传参错误");
           }
        }
        String code = UUID.randomUUID().toString().replaceAll("-", "");
        if (null==doctorDO){
            throw new Exception("无权限操作");
        }
        BaseDoctorDO receiveDoctor = baseDoctorDao.findById(receiveDoctorId);
        if (null==receiveDoctor){
            throw new Exception("员工不存在");
        }
        String dept = "";
        List<BaseDoctorHospitalDO> doctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(receiveDoctorId);
        if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
            dept = doctorHospitalDOS.get(0).getDeptCode();
        }
        for (BaseDailyUrgingRecordDO tmp:urgingRecordDOS){
            tmp.setCode(code);
            tmp.setReceiveDoctor(receiveDoctorId);
            tmp.setDoctorName(receiveDoctor.getName());
            tmp.setCreateUser(doctorId);
            tmp.setCreateUserName(doctorDO.getName());
            tmp.setCreateTime(new Date());
            tmp.setDept(dept);
            tmp.setDel(1);
        }
        try {
            BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(receiveDoctorId);
            if (remindDoctorDO != null) {
                try {
                    WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,remindDoctorDO.getMobile());
                    if(enterpriseUserDO==null){
                        logger.info("该用户"+doctorDO.getName()+"没有企业微信手机号,无法推送模版消息,用户ID:"+doctorDO.getId()+"wechatId:"+wechatId);
                    }else{
                        String title = "日报反馈";
                        String des = "您好,"+doctorDO.getName()+"对您发起"+urgingRecordDOS.size()+"项加急待办事项,请点击进行查看。";
                        String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/workSummary/urge?code="+code;
                        String res = enterpriseService.sendTWMesByDoctor(wechatId,remindDoctorDO.getId(),title,des,url);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        urgingRecordDao.save(urgingRecordDOS);
        urgingRecordDOS = urgingRecordDao.findByCodeAndDel(code,1);
        return  urgingRecordDOS;
    }
    public List<BaseDailyUrgingRecordDO> getUrgingList(String code,String doctor,String reportId,String createUser,String startTime,String endTime){
        String sql = " select ur.* from base_daily_urging_record ur where 1=1 ";
        if (StringUtils.isNotBlank(code)){
            sql +=" and ur.code='"+code+"' ";
        }
        if (StringUtils.isNotBlank(doctor)){
            sql +=" and ur.receive_doctor='"+doctor+"' ";
        }
        if (StringUtils.isNotBlank(reportId)){
            sql +=" and ur.report_id='"+reportId+"' ";
        }
        if (StringUtils.isNotBlank(createUser)){
            sql +=" and ur.create_user='"+createUser+"' ";
        }
        if (StringUtils.isNotBlank(startTime)){
            sql +=" and ur.create_time>='"+startTime+"' ";
        }
        if (StringUtils.isNotBlank(endTime)){
            sql +=" and ur.create_time<='"+endTime+"' ";
        }
        sql +=" group by ur.code order by ur.create_time desc ";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseDailyUrgingRecordDO.class));
    }
    public List<BaseDailyUrgingRecordDO> getUrgingDetail(String code){
        return urgingRecordDao.findByCodeAndDel(code,1);
    }
    /**
     * 获取当天日报上传记录
     * @param doctor
@ -660,6 +784,13 @@ public class DailyReportUploadService {
            tmp.setDetailDOList(detailDOS);
            List<BaseDailyReportLogDO> dailyReportLogDOList = dailyReportLogDao.findByReportId(tmp.getId());
            tmp.setDailyReportLogDOList(dailyReportLogDOList);
            tmp.setDoubt(false);
            if (detailDOS.size()>0){
                Integer sum = detailDOS.stream().mapToInt(e->e.getDoubt()==null?0:e.getDoubt()).sum();
                if (sum>0){
                    tmp.setDoubt(true);
                }
            }
        }
        Map<String,List<BaseDailyReportUploadDO>> reportList = list.stream().collect(Collectors.groupingBy(BaseDailyReportUploadDO::getReportDate));
        Date endDate =DateUtil.strToDate(endDateStr);
@ -722,14 +853,20 @@ public class DailyReportUploadService {
            reportUploadDO = new BaseDailyReportUploadDO();
        }
        //今日本人上报数量
        String benrenTotalSql = " select count(1) from base_doctor_daily_report_upload where doctor_id='"+doctorId+"' and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        String benrenTotalSql = " select count(up.id) from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +
                " where up.doctor_id='"+doctorId+"' and up.report_date>='"+nowDate+"' and up.report_date<='"+nowDate+"' ";
        //本人已上报数量
        String benrenshangbaoTotalSql = " select count(1) from base_doctor_daily_report_upload where doctor_id='"+doctorId+"'  ";
        String benrenshangbaoTotalSql = " select count(up.id) from base_doctor_daily_report_upload up " +
                " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +
                " where up.doctor_id='"+doctorId+"'  ";
        //本人上级未核实事项数
        String benrenVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
        String benrenVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
                " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1" +
                " inner join base_daily_report_detail de on up.id = de.report_id" +
                " where up.doctor_id='"+doctorId+"' and  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //本人上级已核实事项数
        String benrenNotVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
        String benrenNotVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
                " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 inner join base_daily_report_detail de on up.id = de.report_id" +
                " where up.doctor_id='"+doctorId+"' and  de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //科室总人数
@ -744,26 +881,32 @@ public class DailyReportUploadService {
            //总人数
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
            //今日上报人数
            sqlTotalSql = " select count(1) from base_doctor_daily_report_upload  where  report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
            sqlTotalSql = " select count(up.id) from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1" +
                    "  where  up.report_date>='"+nowDate+"' and up.report_date<='"+nowDate+"' ";
            //今日核实数量
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
                    " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
            //今日未核实数量
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
                    " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where   de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        } else if (level == 2) {
            //总人次
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and id  " +
                    " IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            //今日上报人数
            sqlTotalSql = " select count(1) from base_doctor_daily_report_upload  where  report_date>='"+nowDate+"' and report_date<='"+nowDate+"' " +
                    " and doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
            sqlTotalSql = " select count(up.id) from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +
                    " where  up.report_date>='"+nowDate+"' and up.report_date<='"+nowDate+"' " +
                    " and up.doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
            //今日核实数量
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
                    " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"'" +
                    " and up.doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )  ";
            //今日未核实数量
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
                    " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where   de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' " +
                    " and up.doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
@ -824,16 +967,16 @@ public class DailyReportUploadService {
        String deptSql = " select code,name,dh1.doctorTotal,dh2.yishangbaoTotal,dh3.verified,dh4.notVerified,dh5.shangchuanTotal  from dict_hospital_dept hd  " +
                "LEFT JOIN (select count(1) as 'doctorTotal',dh.dept_code from base_doctor d LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "WHERE d.del = 1 AND dh.del = 1 "+doctorSqlCondition+" GROUP BY dh.dept_code)dh1 ON hd.CODE = dh1.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'yishangbaoTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'yishangbaoTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code)dh2 ON hd.CODE = dh2.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'verified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=1 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code)dh3 ON hd.CODE = dh3.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'notVerified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=0 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code)dh4 ON hd.CODE = dh4.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'shangchuanTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'shangchuanTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+doctorSqlCondition+reportCondition+")dh5 ON hd.CODE = dh5.dept_code  " +
                " WHERE hd.consult_dept_flag = 1 ";
@ -945,16 +1088,16 @@ public class DailyReportUploadService {
        String deptSql = " select code,name,dh1.doctorTotal,dh2.yishangbaoTotal,dh3.verified,dh4.notVerified,dh5.shangchuanTotal  from dict_hospital_dept hd  " +
                "LEFT JOIN (select count(1) as 'doctorTotal',dh.dept_code from base_doctor d LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "WHERE d.del = 1 AND dh.del = 1 "+doctorSqlCondition+" GROUP BY dh.dept_code)dh1 ON hd.CODE = dh1.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'yishangbaoTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'yishangbaoTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code )dh2 ON hd.CODE = dh2.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'verified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=1 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code )dh3 ON hd.CODE = dh3.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'notVerified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=0 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code )dh4 ON hd.CODE = dh4.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'shangchuanTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'shangchuanTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id and d.del=1 " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+doctorSqlCondition+reportCondition+" GROUP BY dh.dept_code )dh5 ON hd.CODE = dh5.dept_code  " +
                " WHERE hd.consult_dept_flag = 1 ";
@ -1019,8 +1162,25 @@ public class DailyReportUploadService {
     * @param endDate
     * @return
     */
    public JSONArray selectListByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name,Integer doubtType) {
    public JSONArray selectListByTotal(String user,String dept, String idType, String status, String state, String startDate, String endDate, String name,Integer doubtType) {
        List<String> list = new ArrayList<>();
        String doctorSqlCondition = "  ";
        if (StringUtils.isNotBlank(user)){
            String sql = " select * from base_doctor_role where doctor_code='"+user+"' and role_code ='admin' ";
            List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
            if (userRoles.size()>0){
                doctorSqlCondition  = " and d.id in ( select distinct doc.id from base_doctor doc " +
                        "INNER JOIN base_doctor_role role on doc.id =role.doctor_code where  doc.del=1  and doc.identity=0  " +
                        "union " +
                        "select distinct doc.id from base_doctor doc left JOIN base_doctor_hospital dh on doc.id = dh.doctor_code  " +
                        " LEFT JOIN (select distinct dh1.dept_code,doc1.id from base_doctor doc1 " +
                        "INNER JOIN base_doctor_role role1 on doc1.id =role1.doctor_code  " +
                        "INNER JOIN base_doctor_hospital dh1 on doc1.id =dh1.doctor_code  where  doc1.del=1 and dh1.del=1 and doc1.identity=0  )A on dh.dept_code = A.dept_code " +
                        "where doc.del=1 and doc.identity=0 and A.dept_code is null ) ";
            }
        }
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
@ -1033,7 +1193,7 @@ public class DailyReportUploadService {
        JSONArray array = new JSONArray();
        for ( i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and d.identity=0  ";
            String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and d.identity=0  "+doctorSqlCondition;
            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 )";
@ -1091,8 +1251,24 @@ 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 user, String dept, String idType, String status, String state, String startDate, String endDate, String name,
                                           Integer doubtType) {
        String doctorSqlCondition = "  ";
        if (StringUtils.isNotBlank(user)){
            String sql = " select * from base_doctor_role where doctor_code='"+user+"' and role_code ='admin' ";
            List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
            if (userRoles.size()>0){
                doctorSqlCondition  = " and d.id in ( select distinct doc.id from base_doctor doc " +
                        "INNER JOIN base_doctor_role role on doc.id =role.doctor_code where  doc.del=1  and doc.identity=0  " +
                        "union " +
                        "select distinct doc.id from base_doctor doc left JOIN base_doctor_hospital dh on doc.id = dh.doctor_code  " +
                        " LEFT JOIN (select distinct dh1.dept_code,doc1.id from base_doctor doc1 " +
                        "INNER JOIN base_doctor_role role1 on doc1.id =role1.doctor_code  " +
                        "INNER JOIN base_doctor_hospital dh1 on doc1.id =dh1.doctor_code  where  doc1.del=1 and dh1.del=1 and doc1.identity=0  )A on dh.dept_code = A.dept_code " +
                        "where doc.del=1 and doc.identity=0 and A.dept_code is null ) ";
            }
        }
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
@ -1106,7 +1282,7 @@ public class DailyReportUploadService {
        JSONArray array = new JSONArray();
        for (i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doctorSql = " select d.name,d.id,d.job_title_name as jobTitleName,d.photo from base_doctor d where d.del=1 and d.identity=0  ";
            String doctorSql = " select d.name,d.id,d.job_title_name as jobTitleName,d.photo from base_doctor d where d.del=1 and d.identity=0  "+doctorSqlCondition;
            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 )";
@ -1147,7 +1323,8 @@ public class DailyReportUploadService {
                    stateCondition += " and d1.state='"+state+"' ";
                }
                String sql = " select d1.id,d1.state,total_hour from base_doctor_daily_report_upload d1 where d1.doctor_id='"+id+"' and d1.report_date>='"+date+"' and d1.report_date<='"+date+"' ORDER BY report_date desc ";
                String sql = " select d1.id,d1.state,total_hour from base_doctor_daily_report_upload d1 INNER JOIN base_doctor doc on d1.doctor_id = doc.id " +
                        " and doc.del=1 where d1.doctor_id='"+id+"' and d1.report_date>='"+date+"' and d1.report_date<='"+date+"' ORDER BY report_date desc ";
                List<Map<String, Object>> mapList1 = jdbcTemplate.queryForList(sql);
                if (mapList1 != null && mapList1.size() != 0) {
                    for (Map<String, Object> map1 : mapList1) {
@ -1265,6 +1442,13 @@ public class DailyReportUploadService {
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        String sql = " select dict_value from  wlyy_hospital_sys_dict where dict_name='healthUpload' and dict_code='healthUpload' ";
        List<String> dictValues = jdbcTemplate.queryForList(sql,String.class);
        JSONObject doubtTypeObj = new JSONObject();
        if (dictValues.size()>0){
            JSONObject tmp = JSONObject.parseObject(dictValues.get(0));
            doubtTypeObj = tmp.getJSONObject("dailyReportDoubtType");
        }
        JSONArray array = new JSONArray();
        for (i = 0; i < list.size(); i++) {
            String date = list.get(i);
@ -1320,13 +1504,7 @@ public class DailyReportUploadService {
                }
                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", "");
                    }
                    map.put("doubt_type",null==doubtTypeObj.get("doubt_type")?"":doubtTypeObj.get("doubt_type").toString());
                }
            }
            JSONObject object = new JSONObject();
@ -1567,7 +1745,7 @@ public class DailyReportUploadService {
            sqlCondition =" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        String sql = " SELECT SUM(d1.total) as total from (select COUNT(DISTINCT d.doctor_id) as 'total',date_format(d.report_date ,'%Y-%m-%d' ) " +
                " from base_doctor_daily_report_upload d where 1=1 "+sqlCondition+"  and  d.report_date >='"+startDate+"' and d.report_date<='"+endDate+"' " +
                " from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 where 1=1 "+sqlCondition+"  and  d.report_date >='"+startDate+"' and d.report_date<='"+endDate+"' " +
                " GROUP BY date_format(d.report_date ,'%Y-%m-%d' ))d1  ";
        if (level==2){
            doctorSql +=" and d.id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
@ -1600,7 +1778,7 @@ public class DailyReportUploadService {
        //上传总次数
        Integer shangchuanTotal = 0;
        String shangchuanTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where 1=1  ";
        String shangchuanTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 where 1=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            shangchuanTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
@ -1617,7 +1795,7 @@ public class DailyReportUploadService {
        //已核实、未核实
        String verifiedTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where  state=1 ";
        String verifiedTotalSql = "select COUNT(d.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 where  d.state=1 ";
        if (StringUtils.isNoneBlank(startDate)) {
            verifiedTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
@ -1634,7 +1812,7 @@ public class DailyReportUploadService {
        }
        //未核实
        String notVerifiedTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where  state=0  ";
        String notVerifiedTotalSql = "select COUNT(d.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 where  d.state=0  ";
        if (StringUtils.isNoneBlank(startDate)) {
            notVerifiedTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
@ -1650,7 +1828,7 @@ public class DailyReportUploadService {
        }
        //不饱和存疑
        String baoheTotalSql = "select COUNT(de.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
        String baoheTotalSql = "select COUNT(de.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 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 + "' ";
@ -1665,7 +1843,7 @@ public class DailyReportUploadService {
            }
        }
        //效率存疑
        String xiaolvTotalSql = "select COUNT(de.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
        String xiaolvTotalSql = "select COUNT(de.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 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 + "' ";
@ -1709,7 +1887,7 @@ public class DailyReportUploadService {
        String doctorSql = " select COUNT(1) as \"total\" from base_doctor d where d.del=1 and d.identity=0 ";
        Integer total = 0;//总人次
        String sql = "select COUNT(DISTINCT d.id) as \"total\" from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
        String sql = "select COUNT(DISTINCT d.id) as \"total\" from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 LEFT join base_daily_report_detail de " +
                " on d.id = de.report_id where 1=1 ";
        String deptCondition = "";
        if (StringUtils.isNoneBlank(dept)) {
@ -1770,7 +1948,7 @@ public class DailyReportUploadService {
        weishangbaoTotal = total - yishangbaoTotal>0?total - yishangbaoTotal:0;
        String shangchuanTotalSql = "select COUNT(1) as \"total\" from base_doctor_daily_report_upload d where 1=1  ";
        String shangchuanTotalSql = "select COUNT(d.id) as \"total\" from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 where 1=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            shangchuanTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
@ -1785,17 +1963,17 @@ public class DailyReportUploadService {
        }
        //未核实数量
        String notVerifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
        String notVerifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=0 ";
        //已核实数量
        String verifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
        String verifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 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 " +
        String bubaoheSql = "select COUNT(DISTINCT de.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 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 " +
        String xiaolvSql = "select COUNT(DISTINCT de.id) as 'total' from base_doctor_daily_report_upload d INNER JOIN base_doctor doc on d.doctor_id = doc.id and doc.del=1 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)) {
@ -2088,7 +2266,8 @@ public class DailyReportUploadService {
        if (null==reportItemDO){
            throw new Exception("日报项目不存在");
        }
        String sql = " select m.*,IFNULL(A.completion_hour,0) completion_hour,dh.dept_code,dh.dept_name from base_daily_report_item_members m  " +
        String sql = " select m.*,IFNULL(A.completion_hour,0) completion_hour,dh.dept_code,dh.dept_name from base_daily_report_item_members m " +
                " INNER JOIN base_doctor doc on m.user_id = doc.id and doc.del=1  " +
                "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 " +
@ -2145,6 +2324,7 @@ public class DailyReportUploadService {
     */
    public List<BaseDailyReportItemDO> findReportItemList(String user,String projectCode,String title,String content,Integer state,String begin_time,String end_time,String createUser,String createUserName) throws Exception {
        String sql = "select i.* from base_daily_report_item i INNER JOIN base_daily_report_item_members mem on i.id = mem.report_item_id " +
                "INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                "where i.del=1 and mem.del=1 and mem.user_id='"+user+"' " ;
        if (StringUtils.isNotBlank(projectCode)){
@ -2211,7 +2391,7 @@ public class DailyReportUploadService {
                " Left JOIN (" +
                " select i.project_code,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 " +
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id  where i.del=1 "+sqlCondition+" GROUP BY i.project_code )A " +
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  where i.del=1 "+sqlCondition+" GROUP BY i.project_code )A " +
                "on A.project_code = dict.dict_code where dict.dict_name='daily_report_project' ";
        if (StringUtils.isNotBlank(projectCode)){
            sqlList +=" and dict.dict_code='"+projectCode+"' ";
@ -2248,7 +2428,7 @@ public class DailyReportUploadService {
        }
        String sqlList = " select i.dept,i.dept_name deptName,i.project_code,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 " +
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id  where i.del=1 "+sqlCondition+" GROUP BY i.project_code,i.dept  ";
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  where i.del=1 "+sqlCondition+" GROUP BY i.project_code,i.dept  ";
        sqlList += "  order by  completionHour desc ";
        return jdbcTemplate.queryForList(sqlList);
@ -2284,7 +2464,7 @@ public class DailyReportUploadService {
                " from base_daily_report_item i  LEFT JOIN( " +
                " select de.report_item_id,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_detail de Inner JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +updateTimeSql+
                "  from base_daily_report_detail de Inner JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                "  group by de.report_item_id " +
                " )A on i.id = A.report_item_id where i.del=1 ";
        String sqlCount = " select count(distinct i.id) from base_daily_report_item i where i.del=1 ";
@ -2310,7 +2490,9 @@ public class DailyReportUploadService {
            sqlCondition += "  and i.dept='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(member)){
            sqlCondition += "  and exists (select 1 from base_daily_report_item_members mem where i.id =mem.report_item_id and mem.user_id='"+member+"' and mem.del=1  )";
            sqlCondition += "  and exists (select 1 from base_daily_report_item_members mem " +
                    " INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                    " where i.id =mem.report_item_id and mem.user_id='"+member+"' and mem.del=1  )";
        }
        sqlList +=sqlCondition+ " group by i.id order by i.create_time,i.id desc limit "+page*size+","+size;
@ -2344,21 +2526,21 @@ public class DailyReportUploadService {
            sql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
                    " 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 " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "where 1=1 and i.id='"+item_id+"' " +itemSql+
                    "group by i.id,DATE_FORMAT(de.create_time,'%Y-%m-%d') order by time asc ";
        }else if (2==type){//按周
            sql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
                    " 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  " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "where 1=1 and i.id='"+item_id+"' " +itemSql+
                    "group by i.id,DATE_FORMAT(de.create_time,'%Y%v') order by time asc ";
        }else if (3==type){//月
            sql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
                    " 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 " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up  on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "where 1=1 and i.id='"+item_id+"' " +itemSql+
                    "group by i.id,DATE_FORMAT(de.create_time,'%Y-%m') order by time asc ";
        }else {
@ -2444,7 +2626,7 @@ public class DailyReportUploadService {
                    " 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 " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "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') ";
@ -2455,7 +2637,7 @@ public class DailyReportUploadService {
                    " 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 " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "where 1=1 and i.id='"+item_id+"' " +
                    "group by i.id,up.doctor_id  order by time asc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
@ -2465,7 +2647,7 @@ public class DailyReportUploadService {
                    " 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 " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "where 1=1 and i.id='"+item_id+"' " +memberSql+
                    "group by i.id,up.doctor_id  order by time asc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
@ -2475,7 +2657,7 @@ public class DailyReportUploadService {
                    " 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 " +updateTimeSql+
                    "on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
                    "where 1=1 and i.id='"+item_id+"' " +memberSql+
                    "group by i.id,up.doctor_id  order by time asc ";
            searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
@ -2517,7 +2699,7 @@ public class DailyReportUploadService {
                tmp.put("timeRange",getRangeDouble(completionHour,totalHour));
                String doctorId = tmp.get("doctor_id").toString();
                sql = " select up.doctor_name,"+uploadTimeFormat+" as 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  " +updateTimeSql+
                        " from base_daily_report_detail de  INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +updateTimeSql+
                        "where  de.report_item_id='"+item_id+"' and up.doctor_id='"+doctorId+"' " +
                        "GROUP BY "+searchTimeFormat+" ORDER BY report_date asc ";
                List<Map<String,Object>> timeUseList = jdbcTemplate.queryForList(sql);
@ -2592,7 +2774,7 @@ public class DailyReportUploadService {
        String sqlList = "  select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,  " +
                " count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
                " 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 i.del=1 and i.dept='"+dept+"' and i.project_code='{project_code}'  "+sqlCondition+
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  where i.del=1 and i.dept='"+dept+"' and i.project_code='{project_code}'  "+sqlCondition+
                " GROUP BY "+groupTimeFormat+" order by time asc";
        for (Map<String,Object>tmp:deptProjectList){
            String project_code = tmp.get("project_code").toString();
@ -2610,9 +2792,15 @@ public class DailyReportUploadService {
                        useTimeTmp.put("time",sunday);
                    }
                }
            }else {
                tmp.put("avgValue",0.0);
                tmp.put("totalHour",0.0);
            }
            tmp.put("useTimeList",useTimeList);
        }
        if (deptProjectList.size()>0){
            deptProjectList.sort(Comparator.comparing(obj -> ((Map<String,Object>) obj).get("totalHour").toString()).reversed());
        }
        return deptProjectList;
    }
@ -2658,7 +2846,7 @@ public class DailyReportUploadService {
        String sqlList = "  select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,  " +
                " count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
                " 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 i.del=1 and i.dept='"+dept+"' and i.id='{itemId}'  "+sqlCondition+
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  where i.del=1 and i.dept='"+dept+"' and i.id='{itemId}'  "+sqlCondition+
                " GROUP BY "+groupTimeFormat+" order by time asc";
        for (Map<String,Object>tmp:deptProjectItemList){
            String itemId = tmp.get("id").toString();
@ -2676,9 +2864,15 @@ public class DailyReportUploadService {
                        useTimeTmp.put("time",sunday);
                    }
                }
            }else {
                tmp.put("avgValue",0.0);
                tmp.put("totalHour",0.0);
            }
            tmp.put("useTimeList",useTimeList);
        }
        if (deptProjectItemList.size()>0){
            deptProjectItemList.sort(Comparator.comparing(obj -> ((Map<String,Object>) obj).get("totalHour").toString()).reversed());
        }
        return deptProjectItemList;
    }
@ -2719,13 +2913,14 @@ public class DailyReportUploadService {
        String projectSql = " select  dict.dict_code project_code,dict.dict_value projectName,i.dept " +
                " from wlyy_hospital_sys_dict dict INNER JOIN base_daily_report_item i on i.project_code = dict.dict_code " +
                " INNER JOIN base_daily_report_item_members mem on i.id =mem.report_item_id " +
                " INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                " where dict.dict_name='daily_report_project' and i.dept='"+dept+"'  and mem.user_id='"+memberId+"' and mem.del=1 " +
                " GROUP BY dict.dict_code; ";
        List<Map<String,Object>> deptProjectList = jdbcTemplate.queryForList(projectSql);
        String sqlList = "  select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,  " +
                " count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
                " 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 up.doctor_id='"+memberId+"' and i.del=1 and i.dept='"+dept+"' and i.project_code='{project_code}'  "+sqlCondition+
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  where up.doctor_id='"+memberId+"' and i.del=1 and i.dept='"+dept+"' and i.project_code='{project_code}'  "+sqlCondition+
                " GROUP BY "+groupTimeFormat+" order by time asc";
        for (Map<String,Object>tmp:deptProjectList){
            String project_code = tmp.get("project_code").toString();
@ -2743,9 +2938,15 @@ public class DailyReportUploadService {
                        useTimeTmp.put("time",sunday);
                    }
                }
            }else {
                tmp.put("totalHour",0.0);
                tmp.put("avgValue",0.0);
            }
            tmp.put("useTimeList",useTimeList);
        }
        if(deptProjectList.size()>0){
            deptProjectList.sort(Comparator.comparing(obj -> ((Map<String,Object>) obj).get("totalHour").toString()).reversed());
        }
        return deptProjectList;
    }
@ -2786,13 +2987,16 @@ public class DailyReportUploadService {
        String projectSql = "  select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime, " +
                " i.end_time endTime, i.create_user_name createUserName " +
                "  from  base_daily_report_item i INNER JOIN base_daily_report_item_members mem on i.id =mem.report_item_id " +
                " INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                " where  i.project_code='"+projectCode+"' and mem.user_id='"+memberId+"' and mem.del=1 and  i.dept='"+dept+"' " +
                "  GROUP BY i.id ";
        List<Map<String,Object>> deptProjectItemList = jdbcTemplate.queryForList(projectSql);
        String sqlList = "  select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,  " +
                " count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
                " 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 i.del=1 and up.doctor_id='"+memberId+"' and i.dept='"+dept+"' and i.id='{itemId}'  "+sqlCondition+
                " INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +
                " INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +
                "  where i.del=1 and up.doctor_id='"+memberId+"' and i.dept='"+dept+"' and i.id='{itemId}'  "+sqlCondition+
                " GROUP BY "+groupTimeFormat+" order by time asc";
        for (Map<String,Object>tmp:deptProjectItemList){
            String itemId = tmp.get("id").toString();
@ -2810,12 +3014,203 @@ public class DailyReportUploadService {
                        useTimeTmp.put("time",sunday);
                    }
                }
            }else {
                tmp.put("avgValue",0.0);
                tmp.put("totalHour",0.0);
            }
            tmp.put("useTimeList",useTimeList);
        }
        if (deptProjectItemList.size()>0){
            deptProjectItemList.sort(Comparator.comparing(obj -> ((Map<String,Object>) obj).get("totalHour").toString()).reversed());
        }
        return deptProjectItemList;
    }
    /**
     * 统计各存疑数量
     * @param user
     * @param projectCode
     * @param item_id
     * @param dept
     * @param memberId
     * @param startDate
     * @param endDate
     * @return
     */
    public JSONObject statisticDetailHeaderInfo(String user,String projectCode,String item_id,String dept,String memberId,String startDate,String endDate) 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("您无权限操作");
        }
        sql = " select dict_value from  wlyy_hospital_sys_dict where dict_name='healthUpload' and dict_code='healthUpload' ";
        List<String> dictValues = jdbcTemplate.queryForList(sql,String.class);
        JSONObject doubtTypeObj = new JSONObject();
        if (dictValues.size()>0){
            JSONObject tmp = JSONObject.parseObject(dictValues.get(0));
            doubtTypeObj = tmp.getJSONObject("dailyReportDoubtType");
        }
        JSONObject result = new JSONObject();
        Date startDateTmp = DateUtil.getDateStart();
        if (StringUtils.isBlank(endDate)){
            endDate = DateUtil.dateToStrLong(DateUtil.getDateEnd());
        }
        //以项目开始时间 or 员工第一次提交时间开始计算。
        if (StringUtils.isNotBlank(memberId)){
            sql = " select min(report_date) from base_doctor_daily_report_upload where doctor_id='"+memberId+"' ";
            List<String> startResult = jdbcTemplate.queryForList(sql,String.class);
            if (startResult.size()>0){
                startDateTmp = DateUtil.strToDate(startResult.get(0));
            }
        }else {
            sql = " select min(begin_time) from base_daily_report_item where begin_time is not null  ";
            if (StringUtils.isNotBlank(projectCode)){
                sql += "  and project_code='"+projectCode+"' ";
            }
            if (StringUtils.isNotBlank(item_id)){
                sql += "  and id='"+item_id+"' ";
            }
            if (StringUtils.isNotBlank(dept)){
                sql +=" and dept='"+dept+"' ";
            }
            List<String> startResult = jdbcTemplate.queryForList(sql,String.class);
            if (startResult.size()>0){
                startDateTmp = DateUtil.strToDate(startResult.get(0));
            }
        }
        if (StringUtils.isNotBlank(startDate)){
            if(startDateTmp.after(DateUtil.strToDate(startDate))){
                startDate = DateUtil.dateToStrLong(startDateTmp);
            }
        }else {
            startDate = DateUtil.dateToStrLong(startDateTmp);
        }
        String sqlWhere = "  ";
        if (StringUtils.isNotBlank(projectCode)){
            sqlWhere += "  and it.project_code='"+projectCode+"' ";
        }
        if (StringUtils.isNotBlank(item_id)){
            sqlWhere += "  and it.id='"+item_id+"' ";
        }
        if (StringUtils.isNotBlank(dept)){
            sqlWhere +=" and it.dept='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(memberId)){
            sqlWhere +=" and up.doctor_id='"+memberId+"' ";
        }
        sqlWhere += " and rd.create_time>='"+startDate+"' and rd.create_time<='"+endDate+"' ";
        Long workDays = DateUtil.getWorkDays(startDate,endDate);
        Long members = 0l;
        String shangchuanSql = " select count(distinct rd.report_id) from base_daily_report_item it  " +
                "inner join base_daily_report_item_members mem on it.id = mem.report_item_id and mem.del=1 INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                "LEFT JOIN base_doctor_daily_report_upload up on doc.id = up.doctor_id " +
                "LEFT JOIN base_daily_report_detail rd on up.id = rd.report_id  where 1=1"+sqlWhere;
        Long shangchuanTotal = jdbcTemplate.queryForObject(shangchuanSql,Long.class);
        String memberSql = " select count(distinct mem.user_id) from base_daily_report_item it  " +
                "inner join base_daily_report_item_members mem on it.id = mem.report_item_id and mem.del=1 INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                "LEFT JOIN base_doctor_daily_report_upload up on doc.id = up.doctor_id " +
                "LEFT JOIN base_daily_report_detail rd on up.id = rd.report_id where 1=1 "+sqlWhere;
        members = jdbcTemplate.queryForObject(memberSql,Long.class);
        Long acWorkHours = 0l;
        Long needWorkHours = workDays*members*8;
        Long urgingTotal=0l;
        String urgingSql = " select count(id) from base_daily_urging_record where create_time>='"+startDate+"' and create_time<='endDate' ";
        if (StringUtils.isNotBlank(projectCode)){
            urgingSql += "  and project_code='"+projectCode+"' ";
        }
        if (StringUtils.isNotBlank(item_id)){
            urgingSql += "  and report_item_id='"+item_id+"' ";
        }
        if (StringUtils.isNotBlank(dept)){
            urgingSql +=" and dept='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(memberId)){
            urgingSql +=" and receive_doctor='"+memberId+"' ";
        }
        urgingTotal = jdbcTemplate.queryForObject(urgingSql,Long.class);
        String acWorkHoursSql = " select sum(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0))) 'completion_hour' from base_daily_report_item it  " +
                "inner join base_daily_report_item_members mem on it.id = mem.report_item_id and mem.del=1 INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                "LEFT JOIN base_doctor_daily_report_upload up on doc.id = up.doctor_id " +
                "LEFT JOIN base_daily_report_detail rd on up.id = rd.report_id where 1=1 "+sqlWhere;
        acWorkHours = jdbcTemplate.queryForObject(acWorkHoursSql,Long.class);
        String doubtTypeSql = " select count(distinct rd.id) as total,rd.doubt_type from base_daily_report_item it  " +
                "inner join base_daily_report_item_members mem on it.id = mem.report_item_id and mem.del=1 INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                "LEFT JOIN base_doctor_daily_report_upload up on doc.id = up.doctor_id " +
                "LEFT JOIN base_daily_report_detail rd on up.id = rd.report_id where 1=1 "+sqlWhere+" and rd.doubt_type is not null group by rd.doubt_type";
        List<Map<String,Object>> doubtTypeList = jdbcTemplate.queryForList(doubtTypeSql);
        for (Map<String,Object>tmp:doubtTypeList){
            String doubtType = tmp.get("doubt_type").toString();
            if(doubtTypeObj.containsKey(doubtType)){
                tmp.put("doubtTypeName",doubtTypeObj.get(doubtType));
            }else {
                tmp.put("doubtTypeName","未知存疑类型");
            }
        }
        List<String> doubtListStr = doubtTypeList.stream().map(e -> e.get("doubt_type").toString()).collect(Collectors.toList());
        for (String key:doubtTypeObj.keySet()){
            if (!doubtListStr.contains(key)){
                Map<String,Object>tmp = new HashMap<>();
                tmp.put("doubt_type",key);
                tmp.put("doubtTypeName",doubtTypeObj.get(key));
                tmp.put("total",0);
                doubtTypeList.add(tmp);
            }
        }
        doubtTypeList.sort(Comparator.comparing(e->e.get("doubt_type").toString()));
        //员工离职or中途加入到项目中的会导致统计出来的数据发生变化
        result.put("weishangbao",workDays*members-shangchuanTotal);//未上报 工作日次数-总上报次数
        result.put("doubtList",doubtTypeList);
        result.put("urgingTotal",urgingTotal);//启动催出
        result.put("acWorkHours",acWorkHours);//实际工作时长
        result.put("needWorkHours",needWorkHours);//应工作时长
        return result;
    }
    public List<Map<String,Object>> statisticWorkTypeInfo(String user,String  projectCode,String  item_id,String  dept,String memberId,String  startDate,String endDate) 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 sqlWhere = "  ";
        if (StringUtils.isNotBlank(projectCode)){
            sqlWhere += "  and it.project_code='"+projectCode+"' ";
        }
        if (StringUtils.isNotBlank(item_id)){
            sqlWhere += "  and it.id='"+item_id+"' ";
        }
        if (StringUtils.isNotBlank(dept)){
            sqlWhere +=" and it.dept='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(memberId)){
            sqlWhere +=" and up.doctor_id='"+memberId+"' ";
        }
        if (StringUtils.isNotBlank(startDate)){
            sqlWhere +=" and up.report_date>='"+startDate+"' ";
        }
        if (StringUtils.isNotBlank(endDate)){
            sqlWhere +=" and up.report_date<='"+endDate+"' ";
        }
        sql = " select sum(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0))) 'completion_hour',rd.work_type_name from base_daily_report_item it  " +
                "inner join base_daily_report_item_members mem on it.id = mem.report_item_id and mem.del=1 INNER JOIN base_doctor doc on mem.user_id = doc.id and doc.del=1 " +
                "LEFT JOIN base_doctor_daily_report_upload up on doc.id = up.doctor_id " +
                "LEFT JOIN base_daily_report_detail rd on up.id = rd.report_id where 1=1 "+sqlWhere+" group by rd.work_type_name ";
        return jdbcTemplate.queryForList(sql);
    }
    /**
     * 导出项目计划周报月报用时情况
@ -2870,8 +3265,8 @@ public class DailyReportUploadService {
                "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  " +
                " rd.doubt_type, rd.remark " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +
                "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 " +
@ -2929,8 +3324,8 @@ public class DailyReportUploadService {
                "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  " +
                " rd.doubt_type, rd.remark " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +
                "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 " +
@ -3093,6 +3488,14 @@ public class DailyReportUploadService {
     * @throws WriteException
     */
    public void UserReportListExcel(List<Map<String,Object>> userCompleteList,OutputStream os,String startDate,String endDate) throws IOException, WriteException {
        String sql = " select dict_value from  wlyy_hospital_sys_dict where dict_name='healthUpload' and dict_code='healthUpload' ";
        List<String> dictValues = jdbcTemplate.queryForList(sql,String.class);
        JSONObject doubtTypeObj = new JSONObject();
        if (dictValues.size()>0){
            JSONObject tmp = JSONObject.parseObject(dictValues.get(0));
            doubtTypeObj = tmp.getJSONObject("dailyReportDoubtType");
        }
        WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);
        WritableSheet sheet = wwb.createSheet("sheet", 1);
        String[] header = {"员工完成情况("+startDate+"至"+endDate+")","","","","","","","","","","","","","","","","","",""};//
@ -3170,7 +3573,12 @@ public class DailyReportUploadService {
            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());
            String doubtType = null==completeTmp.get("doubtType")?"":completeTmp.get("doubtType").toString();
            if(StringUtils.isBlank(doubtType)){
                addCell(sheet,i , 17,"");
            }else {
                addCell(sheet,i , 17,null==doubtTypeObj.get(doubtType)?"":doubtTypeObj.get(doubtType).toString());
            }
            addCell(sheet,i , 18,null==completeTmp.get("remark")?"":completeTmp.get("remark").toString());
            i++;
        }

+ 28 - 1
common/common-entity/sql记录

@ -2155,4 +2155,31 @@ ALTER table base_daily_report_item add COLUMN `dept_name` varchar(50) DEFAULT NU
--2022-08-17
ALTER table base_daily_report_detail add COLUMN `project_code` varchar(50) DEFAULT NULL COMMENT '项目code';
ALTER table base_daily_report_detail add COLUMN `project_name` varchar(50) DEFAULT NULL COMMENT '项目名称';
ALTER table base_daily_report_detail add COLUMN `project_name` varchar(50) DEFAULT NULL COMMENT '项目名称';
--2022-08-29
ALTER table base_daily_report_detail add column  work_type_name VARCHAR(50) DEFAULT null COMMENT '工作分类名称';
ALTER table base_daily_report_detail add column  upload_remark varchar(255) DEFAULT NULL COMMENT '上传备注内容';
ALTER table base_daily_report_detail add column  progress_type varchar(255) DEFAULT NULL COMMENT '工作进展';
ALTER table base_daily_report_detail add column  progress_type_name varchar(255) DEFAULT NULL COMMENT '工作进展';
CREATE TABLE `base_daily_urging_record` (
  `id` varchar(50) NOT NULL,
  `code` varchar(50) DEFAULT NULL COMMENT 'code',
  `receive_doctor` varchar(50) DEFAULT NULL,
  `doctor_name` varchar(50) DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL COMMENT '备注内容',
  `dept` varchar(50) DEFAULT NULL COMMENT 'dept',
  `report_id` varchar(50) DEFAULT NULL COMMENT '日报项目id',
  `report_item_id` varchar(50) DEFAULT NULL COMMENT '日报项目id',
  `report_item_name` varchar(50) DEFAULT NULL COMMENT '日报项目名称',
  `project_code` varchar(50) DEFAULT NULL COMMENT '项目code',
  `project_name` varchar(50) DEFAULT NULL COMMENT '项目名称',
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作日期',
  `update_user` varchar(50) DEFAULT NULL,
  `update_user_name` varchar(50) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `create_user` varchar(50) DEFAULT NULL,
  `create_user_name` varchar(50) DEFAULT NULL,
  `del` tinyint(2) DEFAULT NULL COMMENT '1有效0无效',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+ 43 - 4
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java

@ -26,18 +26,25 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    private String verificationUser;//核实人
    private String verificationUserName;//核实人姓名
    private String remark; //备注内容
    private String uploadRemark; //上传备注内容
    private Integer doubt; //疑惑0无疑惑1存疑
    private Integer doubtType; //存疑类型,1不饱和存疑 2效率存疑
    private Integer doubtType; //存疑类型,字典healthUpload下的dailyReportDoubtType
    private Integer doubtState; //疑惑核实状态0未核实1已核实
    private String doubtRemark; //疑惑核实备注
    private String actualCompletionHour; //实际完成时长
    private String reportItemId;//日报项目id
    private String reportItemName;//日报项目名称
    private String projectCode;//一级项目code
    private String projectName;//一级项目名称
    private String workTypeName;//工作分类名称 字典healthUpload下的dailyWorkType
    private String progressType;//工作进展情况 字典healthUpload下的progressType
    private String progressTypeName;//工作进展
    /**
     * 非数据库字段
     */
    private boolean reportItemFlag;
    private String reportItemTitle;
    private String projectCode;
    private String projectName;
    public String getReportId() {
        return reportId;
@ -209,4 +216,36 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }
    public String getWorkTypeName() {
        return workTypeName;
    }
    public void setWorkTypeName(String workTypeName) {
        this.workTypeName = workTypeName;
    }
    public String getProgressType() {
        return progressType;
    }
    public void setProgressType(String progressType) {
        this.progressType = progressType;
    }
    public String getUploadRemark() {
        return uploadRemark;
    }
    public void setUploadRemark(String uploadRemark) {
        this.uploadRemark = uploadRemark;
    }
    public String getProgressTypeName() {
        return progressTypeName;
    }
    public void setProgressTypeName(String progressTypeName) {
        this.progressTypeName = progressTypeName;
    }
}

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

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
@ -32,9 +33,11 @@ public class BaseDailyReportItemDO extends UuidIdentityEntity {
    private Date completionTime;//完成时间
    private Integer del;//1有效0无效
    @CreatedDate
    protected Date createTime;
    protected String createUser;
    protected String createUserName;
    @LastModifiedDate
    protected Date updateTime;
    protected String updateUser;
    protected String updateUserName;

+ 15 - 5
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java

@ -24,7 +24,13 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    private String reportDate; //上报日期
    private String totalHour;//上报时长
    /**
     * 非数据库字段
     */
    private boolean verifiedRepeatFlag;
    private boolean doubt;
    private List<BaseDailyReportDetailDO> detailDOList;
    private List<BaseDailyReportLogDO> dailyReportLogDOList;
    public String getTotalHour() {
        return totalHour;
@ -33,11 +39,6 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    public void setTotalHour(String totalHour) {
        this.totalHour = totalHour;
    }
    private List<BaseDailyReportDetailDO> detailDOList;
    private List<BaseDailyReportLogDO> dailyReportLogDOList;
    @Transient
    public List<BaseDailyReportLogDO> getDailyReportLogDOList() {
        return dailyReportLogDOList;
@ -120,4 +121,13 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    public void setVerifiedRepeatFlag(boolean verifiedRepeatFlag) {
        this.verifiedRepeatFlag = verifiedRepeatFlag;
    }
    @Transient
    public boolean isDoubt() {
        return doubt;
    }
    public void setDoubt(boolean doubt) {
        this.doubt = doubt;
    }
}

+ 181 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyUrgingRecordDO.java

@ -0,0 +1,181 @@
package com.yihu.jw.entity.dailyReport;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by Bing on 2022/8/29.
 */
@Entity
@Table(name = "base_daily_urging_record")
public class BaseDailyUrgingRecordDO extends UuidIdentityEntity {
    private String code;
    private String receiveDoctor;
    private String doctorName;
    private String remark;
    private String dept;
    private String reportId;//日报上传id
    private String reportItemId;//日报项目id
    private String reportItemName;//日报项目名称
    private String projectCode;//一级项目code
    private String projectName;//一级项目名称
    private Integer del;//一级项目名称
    @CreatedDate
    protected Date createTime;
    protected String createUser;
    protected String createUserName;
    @LastModifiedDate
    protected Date updateTime;
    protected String updateUser;
    protected String updateUserName;
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getReceiveDoctor() {
        return receiveDoctor;
    }
    public void setReceiveDoctor(String receiveDoctor) {
        this.receiveDoctor = receiveDoctor;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }
    public String getReportItemId() {
        return reportItemId;
    }
    public void setReportItemId(String reportItemId) {
        this.reportItemId = reportItemId;
    }
    public String getReportItemName() {
        return reportItemName;
    }
    public void setReportItemName(String reportItemName) {
        this.reportItemName = reportItemName;
    }
    public String getProjectCode() {
        return projectCode;
    }
    public void setProjectCode(String projectCode) {
        this.projectCode = projectCode;
    }
    public String getProjectName() {
        return projectName;
    }
    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
    public String getReportId() {
        return reportId;
    }
    public void setReportId(String reportId) {
        this.reportId = reportId;
    }
    public String getDoctorName() {
        return doctorName;
    }
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "create_user",updatable = false)
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    @Column(name = "create_user_name",updatable = false)
    public String getCreateUserName() {
        return createUserName;
    }
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getUpdateUser() {
        return updateUser;
    }
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
    public String getUpdateUserName() {
        return updateUserName;
    }
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
}

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

@ -8,6 +8,7 @@ import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportDetailDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportItemDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportUploadDO;
import com.yihu.jw.entity.dailyReport.BaseDailyUrgingRecordDO;
import com.yihu.jw.entity.healthUpload.BaseDoctorMemberDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
@ -166,6 +167,59 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @PostMapping(value = "urgingDoctor")
    @ApiOperation(value = "催促代办项目")
    public ListEnvelop<BaseDailyUrgingRecordDO> urgingDoctor(@ApiParam(name = "doctorId", value = "doctorId")
                                   @RequestParam(value = "doctorId", required = true) String doctorId,
                                                             @ApiParam(name = "receiveDoctorId", value = "催促对象")
                                   @RequestParam(value = "receiveDoctorId", required = false) String receiveDoctorId,
                                                             @ApiParam(name = "jsonData", value = "事项信息实体")
                                   @RequestParam(value = "jsonData", required = false) String jsonData) {
        try {
            List<BaseDailyUrgingRecordDO> urgingRecordDOS = new ArrayList<>();
            if (StringUtils.isNoneBlank(jsonData)){
                urgingRecordDOS = JSONArray.parseArray(jsonData,BaseDailyUrgingRecordDO.class);
            }
            urgingRecordDOS = dailyReportUploadService.urgingDoctor(doctorId,receiveDoctorId,urgingRecordDOS);
            return ListEnvelop.getSuccess("success",urgingRecordDOS);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "getUrgingList")
    @ApiOperation(value = "查询催促记录列表")
    public ListEnvelop<BaseDailyUrgingRecordDO> getUrgingList(@ApiParam(name = "code", value = "催促记录code")
                                                              @RequestParam(value = "code", required = false) String code,
                                                              @ApiParam(name = "doctor", value = "催促对象")
                                                              @RequestParam(value = "doctor", required = false) String doctor,
                                                              @ApiParam(name = "reportId", value = "关联日报id")
                                                              @RequestParam(value = "reportId", required = false) String reportId,
                                                              @ApiParam(name = "createUser", value = "createUser")
                                                              @RequestParam(value = "createUser", required = false) String createUser,
                                                              @ApiParam(name = "startTime", value = "startTime")
                                                              @RequestParam(value = "startTime", required = false) String startTime,
                                                              @ApiParam(name = "endTime", value = "endTime")
                                                              @RequestParam(value = "endTime", required = false) String endTime) {
        try {
            return ListEnvelop.getSuccess("success",dailyReportUploadService.getUrgingList(code,doctor,reportId,createUser,startTime,endTime));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "getUrgingDetail")
    @ApiOperation(value = "查询催促记录列表")
    public ListEnvelop<BaseDailyUrgingRecordDO> getUrgingDetail(@ApiParam(name = "code", value = "催促记录code")
                                                              @RequestParam(value = "code", required = false) String code) {
        try {
            return ListEnvelop.getSuccess("success",dailyReportUploadService.getUrgingDetail(code));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectReportByDoctorId2")
    @ApiOperation(value = "查询成员的当天上传记录")
    public ObjEnvelop selectReportByDoctorId2(@ApiParam(name = "doctorId", value = "医生id")
@ -308,7 +362,9 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @GetMapping(value = "selectListByTotal")
    @ApiOperation(value = "获取列表的时间及数量")
    public ListEnvelop selectListByTotal(@ApiParam(name = "dept", value = "科室code")
    public ListEnvelop selectListByTotal(@ApiParam(name = "登录用户", value = "登录用户")
                                         @RequestParam(value = "登录用户", required = false) String user,
                                         @ApiParam(name = "dept", value = "科室code")
                                         @RequestParam(value = "dept", required = false) String dept,
                                         @ApiParam(name = "idType", value = "身份类别")
                                         @RequestParam(value = "idType", required = false) String idType,
@ -325,7 +381,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,doubtType);
            JSONArray jsonArray = dailyReportUploadService.selectListByTotal(user,dept,idType,status,state,startDate,endDate,name,doubtType);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
@ -334,7 +390,9 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @GetMapping(value = "selectListInfoByTotal")
    @ApiOperation(value = "获取列表的具体人员信息")
    public ListEnvelop selectListInfoByTotal(@ApiParam(name = "dept", value = "科室code")
    public ListEnvelop selectListInfoByTotal(@ApiParam(name = "登录用户", value = "登录用户")
                                             @RequestParam(value = "登录用户", required = false) String user,
                                             @ApiParam(name = "dept", value = "科室code")
                                             @RequestParam(value = "dept", required = false) String dept,
                                             @ApiParam(name = "idType", value = "身份类别")
                                             @RequestParam(value = "idType", required = false) String idType,
@ -351,7 +409,7 @@ 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,doubtType);
            JSONArray jsonArray = dailyReportUploadService.selectListInfoByTotal(user,dept,idType,status,state,startDate,endDate,name,doubtType);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
@ -831,13 +889,13 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "statisticDeptProjectItemTrend")
    @ApiOperation(value = "获取某个部门的某个项目详情趋势图二级(折线)")
    @ApiOperation(value = "获取某个部门的某个一级项目详情趋势图二级(折线)")
    public ListEnvelop statisticDeptProjectItemTrend(@ApiParam(name = "user", value = "user")
                                                 @RequestParam(value = "user", required = true) String user,
                                                 @ApiParam(name = "dept", value = "dept")
                                                 @RequestParam(value = "dept", required = true) String dept,
                                                 @RequestParam(value = "dept", required = false) String dept,
                                                 @ApiParam(name = "projectCode", value = "项目Code")
                                                 @RequestParam(value = "projectCode", required = true) String projectCode,
                                                 @RequestParam(value = "projectCode", required = false) String projectCode,
                                                 @ApiParam(name = "startDate", value = "startDate")
                                                 @RequestParam(value = "startDate", required = false) String startDate,
                                                 @ApiParam(name = "endDate", value = "endDate")
@ -895,4 +953,50 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "statisticDetailHeaderInfo")
    @ApiOperation(value = "统计各存疑数量")
    public ObjEnvelop statisticDetailHeaderInfo(@ApiParam(name = "user", value = "user")
                                                       @RequestParam(value = "user", required = true) String user,
                                                       @ApiParam(name = "projectCode", value = "一级项目Code")
                                                       @RequestParam(value = "projectCode", required = false) String projectCode,
                                                       @ApiParam(name = "item_id", value = "二级项目id")
                                                       @RequestParam(value = "item_id", required = false) String item_id,
                                                       @ApiParam(name = "dept", value = "dept")
                                                       @RequestParam(value = "dept", required = false) String dept,
                                                       @ApiParam(name = "memberId", value = "memberId")
                                                       @RequestParam(value = "memberId", required = false) String memberId,
                                                       @ApiParam(name = "startDate", value = "startDate")
                                                       @RequestParam(value = "startDate", required = false) String startDate,
                                                       @ApiParam(name = "endDate", value = "endDate")
                                                       @RequestParam(value = "endDate", required = false) String endDate) {
        try {
            return ObjEnvelop.getSuccess("success",dailyReportUploadService.statisticDetailHeaderInfo(user,projectCode,item_id,dept,memberId,startDate,endDate));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "statisticWorkTypeInfo")
    @ApiOperation(value = "统计工作类型分布")
    public ObjEnvelop statisticWorkTypeInfo(@ApiParam(name = "user", value = "user")
                                                @RequestParam(value = "user", required = true) String user,
                                                @ApiParam(name = "projectCode", value = "一级项目Code")
                                                @RequestParam(value = "projectCode", required = false) String projectCode,
                                                @ApiParam(name = "item_id", value = "二级项目id")
                                                @RequestParam(value = "item_id", required = false) String item_id,
                                                @ApiParam(name = "dept", value = "dept")
                                                @RequestParam(value = "dept", required = false) String dept,
                                                @ApiParam(name = "memberId", value = "memberId")
                                                @RequestParam(value = "memberId", required = false) String memberId,
                                                @ApiParam(name = "startDate", value = "startDate")
                                                @RequestParam(value = "startDate", required = false) String startDate,
                                                @ApiParam(name = "endDate", value = "endDate")
                                                @RequestParam(value = "endDate", required = false) String endDate) {
        try {
            return ObjEnvelop.getSuccess("success",dailyReportUploadService.statisticWorkTypeInfo(user,projectCode,item_id,dept,memberId,startDate,endDate));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
}