浏览代码

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

LAPTOP-KB9HII50\70708 2 年之前
父节点
当前提交
39ce05ea94
共有 26 个文件被更改,包括 2326 次插入131 次删除
  1. 816 101
      business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java
  2. 6 1
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java
  3. 10 2
      business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java
  4. 36 1
      common/common-entity/sql记录
  5. 12 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/role/WlyyUserRole.java
  6. 11 2
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java
  7. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java
  8. 170 0
      common/common-entity/src/main/java/com/yihu/jw/entity/patient/BaseOpinionFeedBackEntity.java
  9. 21 9
      common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java
  10. 324 0
      common/common-util/src/main/java/com/yihu/jw/util/date/Holiday.java
  11. 4 0
      gateway/ag-basic/src/main/resources/application.yml
  12. 12 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/patient/BaseOpinionFeedbackDao.java
  13. 110 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/customerService/CustomerServiceController.java
  14. 65 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/opinionFeedback/OpinionFeedbackController.java
  15. 94 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/customerService/CustomerService.java
  16. 106 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/opinionFeedback/OpinionFeedbackService.java
  17. 12 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/patient/BaseOpinionFeedbackDao.java
  18. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/role/DoctorRoleDao.java
  19. 76 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/OpinionFeedback/OpinionFeedbackController.java
  20. 78 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/cutomerService/CustomerServiceController.java
  21. 148 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/customerService/CustomerService.java
  22. 67 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/opinion/UserOpinionFeedbackService.java
  23. 12 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/channel/DailyReportService.java
  24. 4 4
      svr/svr-internet-hospital-job/src/main/resources/system.properties
  25. 114 10
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/dailyReport/DailyReportUploadPoint.java
  26. 8 0
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/service/consult/SysDictService.java

+ 816 - 101
business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java

@ -340,10 +340,9 @@ public class DailyReportUploadService {
            }
        }
        if (StringUtil.isBlank(report_date)){
            report_date = DateUtil.getStringDateShort();
            week_name = DateUtil.getWeek(report_date);
        }
        report_date = DateUtil.getStringDateShort();
        week_name = DateUtil.getWeekStr(report_date);
        BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctorId,report_date);
        if (null==dailyReportUploadDO){
            dailyReportUploadDO = new BaseDailyReportUploadDO();
@ -364,23 +363,19 @@ public class DailyReportUploadService {
        }else {
            throw new Exception("您不是部门人员,无法上传日报信息");
        }
        String sql = " select dict_code from wlyy_hospital_sys_dict where dict_name='daily_report_create_item' ";
        List<String> createItemUser = jdbcTemplate.queryForList(sql,String.class);
        for (BaseDailyReportDetailDO tmp :detailDOList){
            tmp.setReportId(dailyReportUploadDO.getId());
            if (tmp.isReportItemFlag()==true){//新则自建关联项目
                List<BaseDailyReportItemMembersDO> membersDOS = new ArrayList<>();
                if (!createItemUser.contains(doctorId)){
                    throw new Exception("您无权创建自定义项目,请联系管理员");
                }
                String title = tmp.getReportItemTitle();
                BaseDailyReportItemDO reportItemDO = reportItemDao.findByTitleAndDeptAndProjectCode(title,doctorHospitalDOS.get(0).getDeptCode(),tmp.getProjectCode());
                if (null!=reportItemDO){
                    BaseDailyReportItemMembersDO membersDOTmp = reportItemMembersDao.findMembers(reportItemDO.getId(),doctorId);
                    if (null==membersDOTmp){
                        membersDOTmp = new BaseDailyReportItemMembersDO();
                        membersDOTmp.setReportItemId(reportItemDO.getId());
                        membersDOTmp.setUserId(doctorId);
                        membersDOTmp.setUserName(doctorDO.getName());
                        membersDOTmp.setDel(1);
                        reportItemMembersDao.save(membersDOTmp);
                    }
                }else {
                if (null==reportItemDO){
                    reportItemDO = new BaseDailyReportItemDO();
                    reportItemDO.setState(0);
                    reportItemDO.setDel(1);
@ -399,12 +394,27 @@ public class DailyReportUploadService {
                        reportItemDO.setDeptName(doctorHospitalDOS.get(0).getDeptName());
                    }
                    reportItemDO = reportItemDao.save(reportItemDO);
                    BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
                    membersDOTmp.setReportItemId(reportItemDO.getId());
                    membersDOTmp.setUserId(doctorId);
                    membersDOTmp.setUserName(doctorDO.getName());
                    membersDOTmp.setDel(1);
                    reportItemMembersDao.save(membersDOTmp);
                }
                sql =  " select distinct doc.id,doc.name from base_doctor doc inner join base_doctor_hospital dh  " +
                        "on doc.id = dh.doctor_code and doc.del=1 and dh.del=1  " +
                        "where dh.dept_code='"+doctorHospitalDOS.get(0).getDeptCode()+"' ";
                List<Map<String,Object>> membersList = jdbcTemplate.queryForList(sql);
                for (Map<String,Object> member:membersList){
                    String docTmp = member.get("id").toString();
                    String docNameTmp = member.get("name").toString();
                    String reportItemId = reportItemDO.getId();
                    BaseDailyReportItemMembersDO membersDOTmp = reportItemMembersDao.findMembers(reportItemId,docTmp);
                    if (null==membersDOTmp){
                        membersDOTmp = new BaseDailyReportItemMembersDO();
                        membersDOTmp.setReportItemId(reportItemId);
                        membersDOTmp.setUserId(docTmp);
                        membersDOTmp.setUserName(docNameTmp);
                        membersDOTmp.setDel(1);
                        membersDOS.add(membersDOTmp);
                    }
                }
                if(membersDOS.size()>0){
                    reportItemMembersDao.save(membersDOS);
                }
                tmp.setReportItemId(reportItemDO.getId());
                tmp.setReportItemName(title);
@ -436,7 +446,7 @@ public class DailyReportUploadService {
        }
        String senderID="";//日报发送对象
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='BOOS_ADMIN_SENDER'  ";
        sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='BOOS_ADMIN_SENDER'  ";
        List<String> boosSenderIds = jdbcTemplate.queryForList(sql,String.class);
        String boosID = "";
        if (boosSenderIds.size()>0){
@ -532,6 +542,7 @@ public class DailyReportUploadService {
            for (BaseDailyReportDetailDO tmp:detailDOList){
                if (1==tmp.getDoubt()&&(null==tmp.getDoubtState()||0==tmp.getDoubtState())){
                    doubt = true;
                    tmp.setDoubtRead(0);
                    if(0!=tmp.getDoubtType()&&doubtTypeObj.containsKey(tmp.getDoubtType()+"")){
                        doubtTypeName.add(doubtTypeObj.getString(tmp.getDoubtType()+""));
                    }
@ -618,6 +629,45 @@ public class DailyReportUploadService {
        return dailyReportUploadDO;
    }
    /**
     * 点赞项目
     * @param id
     * @param niceWorkType
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean thumbsUpDailyReport(String id,Integer niceWorkType) throws Exception {
        BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findOne(id);
        if (null == dailyReportUploadDO) {
            throw new Exception("日报记录未查询到");
        }
        dailyReportUploadDO.setNiceWorkType(niceWorkType);
        try {
            BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(dailyReportUploadDO.getDoctorId());
            BaseDoctorDO doctorDO = 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 = "您好,鉴于您今日的工作表现,上级给予了肯定,点击查看详情。";
                        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();
        }
        return true;
    }
    /**
     *核实每日报表疑惑
     */
@ -735,27 +785,45 @@ public class DailyReportUploadService {
        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 ";
    public List<BaseDailyUrgingRecordDO> getUrgingList(String user,String dept,String code,String doctor,String reportId,String createUser,String startTime,String endTime){
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='BOOS_ADMIN_SENDER'  ";
        String sqlCondition = " ";
        String boosID = "";
        List<String> boosSenderIds = jdbcTemplate.queryForList(sql, String.class);
        if (boosSenderIds.size() > 0) {
            boosID = boosSenderIds.get(0);
        }
        if (StringUtils.isNotBlank(code)){
            sql +=" and ur.code='"+code+"' ";
            sqlCondition +=" and ur.code='"+code+"' ";
        }
        if (StringUtils.isNotBlank(dept)){
            sqlCondition += " and dept ='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(doctor)){
            sql +=" and ur.receive_doctor='"+doctor+"' ";
            sqlCondition +=" and ur.receive_doctor='"+doctor+"' ";
        }
        if (StringUtils.isNotBlank(reportId)){
            sql +=" and ur.report_id='"+reportId+"' ";
            sqlCondition +=" and ur.report_id='"+reportId+"' ";
        }
        if (StringUtils.isNotBlank(createUser)){
            sql +=" and ur.create_user='"+createUser+"' ";
            sqlCondition +=" and ur.create_user='"+createUser+"' ";
        }
        if (StringUtils.isNotBlank(startTime)){
            sql +=" and ur.create_time>='"+startTime+"' ";
            sqlCondition +=" and ur.create_time>='"+startTime+"' ";
        }
        if (StringUtils.isNotBlank(endTime)){
            sql +=" and ur.create_time<='"+endTime+"' ";
            sqlCondition +=" and ur.create_time<='"+endTime+"' ";
        }
        sql = " select ur.* from base_daily_urging_record ur where 1=1 "+sqlCondition+"";
        if (StringUtils.isNotBlank(user)){
            if (StringUtils.isNotBlank(user)&&!boosID.equals(user)){
                sql +="UNION " +
                        " select ur.* from base_daily_urging_record ur where  ur.receive_doctor='"+user+"' "+sqlCondition+" ";
            }
        }
        sql +=" group by ur.code order by ur.create_time desc ";
        sql +="  order by create_time desc ";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseDailyUrgingRecordDO.class));
    }
@ -833,9 +901,13 @@ public class DailyReportUploadService {
     * @return
     * @throws Exception
     */
    public BaseDailyReportUploadDO selectReportById(String reportId) throws Exception {
    public BaseDailyReportUploadDO selectReportById(String doctor,String reportId) throws Exception {
        String nowDate = DateUtil.getStringDateShort();
        BaseDailyReportUploadDO reportUploadDO = dailyReportUploadDao.findOne(reportId);
        if(reportUploadDO.getDoctorId().equals(doctor)){
            String sql = " update base_daily_report_detail set doubt_read=1 where id='"+reportId+"' ";
            jdbcTemplate.execute(sql);
        }
        if (null==reportUploadDO){
            throw new Exception("未找到日报记录");
        }else {
@ -893,7 +965,7 @@ public class DailyReportUploadService {
        String notVerifiedSql = "";
        if (level == 1) {
            //总人数
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and d.identity=0  ";
            //今日上报人数
            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+"' ";
@ -924,7 +996,23 @@ public class DailyReportUploadService {
                    " 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 ) ";
        }
        if (1==level||2==level){
            Integer doctorTotal =  jdbcTemplate.queryForObject(doctorTotalSql,Integer.class);
            Integer sqlTotal =  jdbcTemplate.queryForObject(sqlTotalSql,Integer.class);
            Integer verified =  jdbcTemplate.queryForObject(verifiedSql,Integer.class);
            Integer notVerified =  jdbcTemplate.queryForObject(notVerifiedSql,Integer.class);
            result.put("doctorTotal", doctorTotal);//科室总人次
            result.put("sqlTotal", sqlTotal);//科室今日上报人数
            result.put("notUploadTotal", doctorTotal - sqlTotal);//今日未上报人数
            result.put("verified",verified);//科室未核实
            result.put("notVerified",notVerified);//科室已核实
        }else {
            result.put("doctorTotal", 0);//科室总人次
            result.put("sqlTotal", 0);//科室今日上报人数
            result.put("notUploadTotal", 0);//今日未上报人数
            result.put("verified",0);//科室未核实
            result.put("notVerified",0);//科室已核实
        }
        Integer benrenTotal =  jdbcTemplate.queryForObject(benrenTotalSql,Integer.class);
        Integer benrenshangbaoTotal = jdbcTemplate.queryForObject(benrenshangbaoTotalSql,Integer.class);
@ -935,15 +1023,9 @@ public class DailyReportUploadService {
        result.put("benrenVerified",benrenVerified);//本人上级未核实
        result.put("benrenNotVerified",benrenNotVerified);//本人上级已核实
        Integer doctorTotal =  jdbcTemplate.queryForObject(doctorTotalSql,Integer.class);
        Integer sqlTotal =  jdbcTemplate.queryForObject(sqlTotalSql,Integer.class);
        Integer verified =  jdbcTemplate.queryForObject(verifiedSql,Integer.class);
        Integer notVerified =  jdbcTemplate.queryForObject(notVerifiedSql,Integer.class);
        result.put("doctorTotal", doctorTotal);//科室总人次
        result.put("sqlTotal", sqlTotal);//科室今日上报人数
        result.put("notUploadTotal", doctorTotal - sqlTotal);//今日未上报人数
        result.put("verified",verified);//科室未核实
        result.put("notVerified",notVerified);//科室已核实
        result.put("notVerifiedTotal",selectListInfoByTotal2(doctorId,dept,"0",null,null,null,null,null).size());//未核实数量(本人+管辖部门)
        result.put("doubtTotal",selectListInfoByTotal2(doctorId,dept,null,null,null,null,1,null).size());//效能异常(本人+管辖部门)
        result.put("urgingTotal",getUrgingList(doctorId,dept,null,null,null,null,null,null).size());//催促数量(本人+管辖部门)
        result.put("reportUploadDO",reportUploadDO);
        return result;
    }
@ -1370,6 +1452,70 @@ public class DailyReportUploadService {
        return array;
    }
    /**
     *
     * @param user
     * @param dept
     * @param state 0未核实 1已核实
     * @param startDate
     * @param endDate
     * @param name
     * @param doubtState 存疑0无存疑1存疑
     * @return
     */
    public List<Map<String,Object>> selectListInfoByTotal2(String user,String dept,String state,String startDate,String endDate,String name,Integer doubtState,Integer readState) {
        String sqlCondition = " ";
        String boosID = "";
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='BOOS_ADMIN_SENDER'  ";
        List<String> boosSenderIds = jdbcTemplate.queryForList(sql, String.class);
        if (boosSenderIds.size() > 0) {
            boosID = boosSenderIds.get(0);
        }
        if (StringUtils.isNotBlank(dept)){
            sqlCondition += " and dh.dept_code='"+dept+"'   ";
        }
        if (StringUtils.isNotBlank(state)){
            sqlCondition += " and d1.state='"+state+"' ";
        }
        if (StringUtils.isNotBlank(startDate)){
            sqlCondition +=" and d1.report_date>='"+startDate+"' ";
        }
        if (StringUtils.isNotBlank(endDate)){
            sqlCondition += " and d1.report_date<='"+endDate+"' ";
        }
        if (StringUtils.isNotBlank(name)){
            sqlCondition += " and doc.name like '%"+name+"%'";
        }
        if (null!=doubtState){
            if (0==doubtState){
                sqlCondition +=" and de.doubt=0  ";
            }if (1==doubtState){
                sqlCondition +=" and de.doubt=1 ";
            }
        }
        if (null!=readState){
            sqlCondition += " and de.doubt_read='"+readState+"' ";
        }
        sql = " select doc.name,dh.dept_code,dh.dept_name,d1.id,doc.job_title_name as jobTitleName,doc.photo,report_date reportDate,d1.state,total_hour,IF(SUM(de.doubt)>0,1,0) as doubt,de.doubt_read " +
                "from base_doctor_daily_report_upload d1 INNER JOIN base_doctor doc on d1.doctor_id = doc.id " +
                "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1  " +
                "LEFT JOIN base_daily_report_detail de on d1.id = de.report_id " +
                "where doc.del=1 and doc.identity=0 "+sqlCondition+" GROUP BY d1.id ";
        if (StringUtils.isNotBlank(user)&&!boosID.equals(user)){
            sql +=" UNION " +
                    "select doc.name,dh.dept_code,dh.dept_name,d1.id,doc.job_title_name as jobTitleName,doc.photo,report_date reportDate,d1.state,total_hour,IF(SUM(de.doubt)>0,1,0) as doubt,de.doubt_read " +
                    "from base_doctor_daily_report_upload d1 INNER JOIN base_doctor doc on d1.doctor_id = doc.id " +
                    "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1  " +
                    "LEFT JOIN base_daily_report_detail de on d1.id = de.report_id " +
                    "where doc.del=1 and doc.identity=0 and doc.id='"+user+"' " +sqlCondition +" GROUP BY d1.id  ";
        }
        sql += " order by reportDate desc ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    /**
     * 获取存疑列表列表的时间及数量
     * @param dept
@ -1768,6 +1914,7 @@ public class DailyReportUploadService {
        Integer weishangbaoTotal = 0;
        Integer verifiedTotal = 0;
        Integer notVerifiedTotal = 0;
        Long urgingTotal = 0l;
        //已上传
        Map<String, Object> yishangchaungMap = jdbcTemplate.queryForMap(sql);
        if (yishangchaungMap != null) {
@ -1874,6 +2021,15 @@ public class DailyReportUploadService {
        }
        doubtDoubtList.sort(Comparator.comparing(e->e.get("doubt_type").toString()));
        Long  doubtTotal = jdbcTemplate.queryForObject(doubtTotalSql,Long.class);
        //项目催出
        //项目催出数量
        String urgingSql = " select count(id) from base_daily_urging_record where create_time>='"+startDate+"' and create_time<='"+endDate+"' ";
        if (StringUtils.isNotBlank(dept)){
            urgingSql +=" and dept='"+dept+"' ";
        }
        urgingTotal = jdbcTemplate.queryForObject(urgingSql,Long.class);
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
@ -1882,6 +2038,7 @@ public class DailyReportUploadService {
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        object.put("doubtList", doubtDoubtList);//各存疑次数
        object.put("doubtTotal", doubtTotal);//存疑总数
        object.put("urgingTotal", urgingTotal);//项目催出
        return object;
    }
@ -1931,6 +2088,7 @@ public class DailyReportUploadService {
        Integer notVerified=0;//未核实
        Integer verified=0;//已核实
        Integer shangchuanTotal=0;//上传总次数
        Long urgingTotal=0l;//项目催促
        if (StringUtils.isNoneBlank(startDate)) {
            sql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
@ -2048,6 +2206,17 @@ public class DailyReportUploadService {
        //上传总次数
        shangchuanTotal = jdbcTemplate.queryForObject(shangchuanTotalSql,Integer.class);
        //项目催出数量
        String urgingSql = " select count(id) from base_daily_urging_record where create_time>='"+startDate+"' and create_time<='"+endDate+"' ";
        if (StringUtils.isNotBlank(dept)){
            urgingSql +=" and dept='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(name)){
            urgingSql += " and doctor_name like '%"+name+"%' ";
        }
        urgingTotal = jdbcTemplate.queryForObject(urgingSql,Long.class);
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
@ -2056,6 +2225,7 @@ public class DailyReportUploadService {
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        object.put("doubtList", doubtDoubtList);//各存疑次数
        object.put("doubtTotal", doubtTotal);//存疑总数
        object.put("urgingTotal", urgingTotal);//项目催出
        return object;
    }
@ -2253,7 +2423,7 @@ public class DailyReportUploadService {
            reportItemDO.setCompletionHour(completionHour);
        }else {
            //查询出关联的日报详情,计算完成时间
            sql = " select sum(IFNULL(actual_completion_hour,IFNULL(completion_hour,'0'))) from base_daily_report_detail " +
            sql = " select sum(cast(IFNULL(actual_completion_hour,IFNULL(completion_hour,0)) as decimal(18,2))) from base_daily_report_detail " +
                    " where report_item_id='"+item_id+"' ";
            String completionHoursql = jdbcTemplate.queryForObject(sql,String.class);
            reportItemDO.setCompletionHour(completionHoursql);
@ -2308,7 +2478,7 @@ public class DailyReportUploadService {
        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 " +
                "select up.doctor_id,sum(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) completion_hour " +
                " from base_doctor_daily_report_upload up " +
                "INNER JOIN base_daily_report_detail rd on up.id = rd.report_id and rd.report_item_id='"+item_id+"' )A on m.user_id = A.doctor_id " +
                "INNER JOIN base_doctor_hospital dh on m.user_id = dh.doctor_code and dh.del=1 " +
@ -2321,14 +2491,17 @@ public class DailyReportUploadService {
    /**
     * 管理员获取所有日报项目
     */
    public List<BaseDailyReportItemDO> findReportItemListAdmin(String user,String projectCode,String title,String content,Integer state,String begin_time,String end_time,String createUser,String createUserName) throws Exception {
    public List<BaseDailyReportItemDO> findReportItemListAdmin(String user,String projectCode,String title,String content,Integer state,String begin_time,String end_time,String createUser,String createUserName,String dept) 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("您无权限操作");
        }
        List<BaseDailyReportItemDO> itemDOS = new ArrayList<>();
        sql = " select i.* from base_daily_report_item i where 1=1 and i.del=1 ";
        sql = " select i.* from base_daily_report_item i inner join wlyy_hospital_sys_dict dict on i.project_code = dict.dict_code and dict.dict_name='daily_report_project' " +
                " INNER JOIN ( select dict_code,dict_value,sort from wlyy_hospital_sys_dict where dict_name='daily_report_category' )B on dict.saas_id = B.dict_code  " +
                "  INNER JOIN ( select dict_code,dict_value,sort from wlyy_hospital_sys_dict where dict_name='daily_report_level' )C on dict.py_code = C.dict_code " +
                " where 1=1 and i.del=1 ";
        if(StringUtils.isNotBlank(projectCode)){
            sql += " and i.project_code='"+projectCode+"' ";
        }
@ -2353,6 +2526,10 @@ public class DailyReportUploadService {
        if (StringUtils.isNotBlank(createUserName)){
            sql += " and i.create_user_name like '%"+createUserName+"%' ";
        }
        if (StringUtils.isNotBlank(dept)){
            sql += " and i.dept='"+dept+"' ";
        }
        sql += " order by B.sort asc, c.sort asc,dict.sort asc  ";
        itemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseDailyReportItemDO.class));
        for (BaseDailyReportItemDO tmp:itemDOS){
            List<BaseDailyReportItemMembersDO> membersDOS = reportItemMembersDao.findMembersByItemId(tmp.getId());
@ -2365,7 +2542,10 @@ 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 " +
        String sql = "select distinct i.* from base_daily_report_item i inner join wlyy_hospital_sys_dict dict on i.project_code = dict.dict_code and dict.dict_name='daily_report_project' " +
                " INNER JOIN ( select dict_code,dict_value,sort from wlyy_hospital_sys_dict where dict_name='daily_report_category' )B on dict.saas_id = B.dict_code  " +
                "  INNER JOIN ( select dict_code,dict_value,sort from wlyy_hospital_sys_dict where dict_name='daily_report_level' )C on dict.py_code = C.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 i.del=1 and mem.del=1 and mem.user_id='"+user+"' " ;
@ -2393,7 +2573,7 @@ public class DailyReportUploadService {
        if (StringUtils.isNotBlank(createUserName)){
            sql += " and i.create_user_name like '%"+createUserName+"%' ";
        }
        sql += " GROUP BY i.id ";
        sql += " order by B.sort asc, c.sort asc,dict.sort asc  ";
        List<BaseDailyReportItemDO> itemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseDailyReportItemDO.class));
        for (BaseDailyReportItemDO tmp:itemDOS){
            List<BaseDailyReportItemMembersDO> membersDOS = reportItemMembersDao.findMembersByItemId(tmp.getId());
@ -2410,7 +2590,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -2451,7 +2630,7 @@ public class DailyReportUploadService {
        String sqlList = "  select dict.dict_code project_code,dict.dict_value projectName,IFNULL( A.completionHour,0) 'completionHour', " +
                " IFNULL(A.doctorTotal,0) 'doctorTotal',B.dict_code 'categoryCode',B.dict_value 'categoryName',C.dict_code 'levelCode' ,C.dict_value 'levelName' from wlyy_hospital_sys_dict dict " +
                " Left JOIN (" +
                " select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour, " +
                " select i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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  where i.del=1 "+sqlCondition+" GROUP BY i.project_code )A " +
@ -2511,7 +2690,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -2549,7 +2727,7 @@ public class DailyReportUploadService {
        if (StringUtils.isNotBlank(member)){//查询指定员工
            sqlCondition += " and up.doctor_id='"+member+"' ";
        }
        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, " +
        String sqlList = " select i.dept,i.dept_name deptName,i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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  where i.del=1 "+sqlCondition+" GROUP BY i.project_code,i.dept  ";
@ -2570,7 +2748,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -2613,7 +2790,7 @@ public class DailyReportUploadService {
        String sqlCount = " select count(distinct i.id)  ";
        String sqlCondition = " 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, " +
                " select de.report_item_id,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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 " +updateTimeSql+
@ -2656,7 +2833,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -2693,7 +2869,7 @@ public class DailyReportUploadService {
        }
        if(1==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', " +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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 " +updateTimeSql+
@ -2701,7 +2877,7 @@ public class DailyReportUploadService {
                    "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', " +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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 " +updateTimeSql+
@ -2709,7 +2885,7 @@ public class DailyReportUploadService {
                    "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', " +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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 " +updateTimeSql+
@ -2779,7 +2955,6 @@ public class DailyReportUploadService {
        String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
        List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
        if (userRoles.size()==0){
            throw new Exception("您无权限操作");
        }
        String memberSql = " ";
@ -2798,7 +2973,7 @@ public class DailyReportUploadService {
        String uploadTimeFormat = "";
        if(0==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,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time'," +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
@ -2809,7 +2984,7 @@ public class DailyReportUploadService {
        }
        else if(1==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,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
@ -2819,7 +2994,7 @@ public class DailyReportUploadService {
            uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
        }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,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
@ -2829,7 +3004,7 @@ public class DailyReportUploadService {
            uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
        }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,up.doctor_id,up.doctor_name doctorName, " +
                    " CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m') as 'time', " +
                    " CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +updateTimeSql+
@ -2873,7 +3048,7 @@ public class DailyReportUploadService {
                Double completionHour = Double.valueOf(tmp.get("completionHour").toString());
                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 " +
                sql = " select up.doctor_name,"+uploadTimeFormat+" as report_date ,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) as char ) as completionHour " +
                        " 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 ";
@ -2898,7 +3073,7 @@ public class DailyReportUploadService {
                        }
                    }
                }
                timeUseList.sort(Comparator.comparing(obj -> obj.get("report_date").toString()));
                timeUseList.sort(Comparator.comparing(obj ->((Map<String,Object>)obj).get("report_date").toString()).reversed());
                tmp.put("timeUseList",timeUseList);
            }
@ -2916,7 +3091,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -2981,7 +3155,7 @@ public class DailyReportUploadService {
        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,  " +
        String sqlList = "  select i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +
@ -3024,7 +3198,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3089,7 +3262,7 @@ public class DailyReportUploadService {
                " 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,  " +
        String sqlList = "  select i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +
@ -3176,7 +3349,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3231,7 +3403,7 @@ public class DailyReportUploadService {
                " where dict.dict_name='daily_report_project' and dh.dept_code='"+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,  " +
        String sqlList = "  select i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1 " +
@ -3273,7 +3445,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3327,7 +3498,7 @@ public class DailyReportUploadService {
                " where  i.project_code='"+projectCode+"' and mem.user_id='"+memberId+"' and mem.del=1 and  dh.dept_code='"+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,  " +
        String sqlList = "  select i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 " +
@ -3380,7 +3551,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3423,7 +3593,7 @@ public class DailyReportUploadService {
                startDateTmp = DateUtil.strToDate(startResult.get(0));
            }
        }else {
            sql = " select min(begin_time) from base_daily_report_item where begin_time is not null  ";
            sql = " select min(begin_time) from base_daily_report_item where  begin_time is not null and del=1  ";
            if (StringUtils.isNotBlank(projectCode)){
                sql += "  and project_code='"+projectCode+"' ";
            }
@ -3479,22 +3649,26 @@ public class DailyReportUploadService {
            workDays = DateUtil.getWorkDays(startDate, endDate);
        }
        String shangchuanSql = " select count(distinct up.id) from base_doctor_daily_report_upload up " +
        String shangchuanSql = " select distinct up.report_date 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 " +
                "inner join base_daily_report_item i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                "and DATE_FORMAT(up.report_date,'%w') BETWEEN 1 and 5  "+sqlWhere;
        //只计算出周一到周五上传的数量去求未上传
        Long shangchuanTotal = jdbcTemplate.queryForObject(shangchuanSql,Long.class);
                "LEFT join base_daily_report_item i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                " "+sqlWhere;
        //只计算出工作日上传的数量去求未上传
        List<String> upLoadTimes = jdbcTemplate.queryForList(shangchuanSql,String.class);
        Long shangchuanTotal = 0l;
        for (String tmp:upLoadTimes){
            if (!DateUtil.isHoliday(DateUtil.strToDate(tmp))){
                shangchuanTotal++;
            }
        }
        Double acWorkHours = 0d;
        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' ";
        String urgingSql = " select count(distinct code) from base_daily_urging_record where create_time>='"+startDate+"' ";
        if (StringUtils.isNotBlank(projectCode)){
            urgingSql += "  and project_code='"+projectCode+"' ";
        }
@ -3509,12 +3683,12 @@ public class DailyReportUploadService {
        }
        urgingTotal = jdbcTemplate.queryForObject(urgingSql,Long.class);
        String acWorkHoursSql = " select sum(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0))) 'completion_hour' " +
        String acWorkHoursSql = " select sum(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) 'completion_hour' " +
                " 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 " +
                " inner join base_daily_report_item i on i.id = rd.report_item_id and i.del=1  where 1=1 " +
                " LEFT join base_daily_report_item i on i.id = rd.report_item_id and i.del=1  where 1=1 " +
                " "+sqlWhere;
        acWorkHours = jdbcTemplate.queryForObject(acWorkHoursSql,Double.class);
@ -3523,7 +3697,7 @@ public class DailyReportUploadService {
                "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 " +
                "inner join base_daily_report_item i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                "LEFT join base_daily_report_item i on i.id = rd.report_item_id and i.del=1 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){
@ -3549,23 +3723,20 @@ public class DailyReportUploadService {
        //员工离职or中途加入到项目中的会导致统计出来的数据发生变化
        result.put("weishangbao",((workDays*members-shangchuanTotal))<0?0:(workDays*members-shangchuanTotal));//未上报 工作日次数-总上报次数
        result.put("doubtList",doubtTypeList);
        result.put("urgingTotal",urgingTotal);//启动催出
        result.put("urgingTotal",urgingTotal);//项目催促
        result.put("acWorkHours",acWorkHours);//实际工作时长
        result.put("needWorkHours",needWorkHours);//应工作时长
        String doctorTypeSql = " select sum(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0))) 'completion_hour',count(distinct doc.id) as doctorTotal,IFNULL(dh.doctor_duty_name,'其他') as 'doctor_duty_name' " +
        String doctorTypeSql = " select sum(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) 'completion_hour',count(distinct doc.id) as doctorTotal,IFNULL(dh.doctor_duty_name,'其他') as 'doctor_duty_name' " +
                " 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 " +
                "inner join base_daily_report_item i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                "LEFT join base_daily_report_item i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                " "+sqlWhere+" group by doctor_duty_code ";
        List<Map<String,Object>> doctorTypeHourList = jdbcTemplate.queryForList(doctorTypeSql);
        result.put("doctorTypeHourList",doctorTypeHourList);//按人员统计总用时与参与人数
        return result;
    }
@ -3575,7 +3746,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3615,7 +3785,7 @@ public class DailyReportUploadService {
        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 " +
        sql = " select sum(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) 'completion_hour',rd.work_type_name " +
                " 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  where 1=1  " +
@ -3639,7 +3809,6 @@ public class DailyReportUploadService {
        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("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3740,6 +3909,485 @@ public class DailyReportUploadService {
        return PageEnvelop.getSuccessListWithPage("success",result,page,pageSize,count);
    }
    /**
     * 周效能头部信息
     * @param user
     * @param projectCode
     * @param item_id
     * @param dept
     * @param memberId
     * @param startDate
     * @param endDate
     * @return
     */
    public JSONObject weekReportHeaderInfo(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){
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
            } else if ("deptAdmin".equals(role_code)) {//查询出管理员所在部门
                if(StringUtils.isBlank(dept)){
                    sql = " select dh.dept_code from base_doctor doc INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code " +
                            " and doc.del=1 and dh.del=1 where doc.id='"+user+"' ";
                    List<String> userDept = jdbcTemplate.queryForList(sql,String.class);
                    if (userDept.size()>0){
                        dept = userDept.get(0);
                    }else {
                        throw new Exception("您无权限操作");
                    }
                }
            }else {
                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("dailyReportDoubtTypeName");
        }
        JSONObject result = new JSONObject();
        if (StringUtils.isBlank(endDate)){
            endDate = DateUtil.dateToStrLong(DateUtil.getDateEnd());
        }
        String sqlWhere = "  ";
        if (StringUtils.isNotBlank(projectCode)){
            sqlWhere += "  and rd.project_code='"+projectCode+"' ";
        }
        if (StringUtils.isNotBlank(item_id)){
            sqlWhere += "  and rd.report_item_id='"+item_id+"' ";
        }
        if (StringUtils.isNotBlank(dept)){
            sqlWhere +=" and dh.dept_code='"+dept+"' ";
        }
        if (StringUtils.isNotBlank(memberId)){
            sqlWhere +=" and up.doctor_id='"+memberId+"' ";
        }
        Long members = 0l;
        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 " +
                "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.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 and rd.report_item_id = it.id where 1=1 "+sqlWhere;
        members = jdbcTemplate.queryForObject(memberSql,Long.class);
        if (StringUtils.isNotBlank(startDate)) {
            sqlWhere += " and up.report_date>='"+DateUtil.strToStrShort(startDate) +"' ";
        }if (StringUtils.isNotBlank(endDate)){
            sqlWhere += "  and up.report_date<='"+DateUtil.strToStrShort(endDate)+"' ";
        }
        Long workDays=0l;
        if (StringUtils.isNotBlank(startDate)&&StringUtils.isNotBlank(endDate)) {
            workDays = DateUtil.getWorkDays(startDate, endDate);
        }
        String shangchuanSql = " select distinct up.report_date 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 i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                " "+sqlWhere;
        //只计算出工作日上传的数量去求未上传
        List<String> upLoadTimes = jdbcTemplate.queryForList(shangchuanSql,String.class);
        Long shangchuanTotal = 0l;
        for (String tmp:upLoadTimes){
            if (!DateUtil.isHoliday(DateUtil.strToDate(tmp))){
                shangchuanTotal++;
            }
        }
        Double acWorkHours = 0d;
        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<='"+startDate+"'  ";
        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(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) 'completion_hour' " +
                " 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 i on i.id = rd.report_item_id and i.del=1  where 1=1 " +
                " "+sqlWhere;
        acWorkHours = jdbcTemplate.queryForObject(acWorkHoursSql,Double.class);
        String doubtTypeSql = " select count(distinct rd.id) as total,rd.doubt_type " +
                " 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 i on i.id = rd.report_item_id and i.del=1 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))<0?0:(workDays*members-shangchuanTotal));//未上报 工作日次数-总上报次数
        result.put("doubtList",doubtTypeList);
        result.put("urgingTotal",urgingTotal);//项目催促
        result.put("acWorkHours",acWorkHours);//实际工作时长
        result.put("needWorkHours",needWorkHours);//应工作时长
        //项目启动、完成、启动超时、完成超时、催促数量
        String projectItemSql = " select count(id) from base_daily_report_item where del=1 ";
        if (StringUtils.isNotBlank(dept)){
            projectItemSql += " and dept='"+dept+"' ";
        }
        //项目启动
        String projectItemSqlCondition = " and ac_begin_time>='"+startDate+" 00:00:00' and ac_begin_time<='"+endDate+" 23:59:59' ";
        result.put("projectItemStart",jdbcTemplate.queryForObject(projectItemSql+projectItemSqlCondition,Integer.class));
        //项目完成
        projectItemSqlCondition = " and state=1 and completion_time>='"+startDate+" 00:00:00' and completion_time<='"+endDate+" 23:59:59' ";
        result.put("projectItemComplete",jdbcTemplate.queryForObject(projectItemSql+projectItemSqlCondition,Integer.class));
        //启动超时
        projectItemSqlCondition = "  and begin_time>='"+startDate+" 00:00:00' and begin_time<='"+endDate+" 23:59:59'  and (ac_begin_time is null or DATE_FORMAT(ac_begin_time,'%Y-%m-%d')>begin_time )  ";
        result.put("projectItemStartOverTime",jdbcTemplate.queryForObject(projectItemSql+projectItemSqlCondition,Integer.class));
        //完成超时
        projectItemSqlCondition = " and (state=1 and completion_time>='"+startDate+" 00:00:00' and completion_time<='"+endDate+" 23:59:59'  and DATE_FORMAT(end_time,'%Y-%m-%d')>end_time )" +
                " or  ( state =0 and end_time<'"+endDate+" 23:59:59' )  ";
        result.put("projectItemCompleteOverTime",jdbcTemplate.queryForObject(projectItemSql+projectItemSqlCondition,Integer.class));
        //催促数量
        urgingSql = " select count(distinct project_code) from base_daily_urging_record where create_time>='"+startDate+"' and create_time<='"+startDate+"'  ";
        result.put("projectUrgingTotal",jdbcTemplate.queryForObject(urgingSql,Integer.class));
        String doctorTypeSql = " select sum(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) 'completion_hour',count(distinct doc.id) as doctorTotal,IFNULL(dh.doctor_duty_name,'其他') as 'doctor_duty_name' " +
                " 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 i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                " "+sqlWhere+" group by doctor_duty_code ";
        List<Map<String,Object>> doctorTypeHourList = jdbcTemplate.queryForList(doctorTypeSql);
        result.put("doctorTypeHourList",doctorTypeHourList);//按人员统计总用时与参与人数
        return result;
    }
    /**
     * 周效能列表信息
     * @param user
     * @param projectCode
     * @param item_id
     * @param dept
     * @param memberId
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String,Object> weekReportListInfo(String user,String projectCode,String item_id,String dept,String memberId,String startDate,String endDate) throws Exception {
        Map<String,Object> result = new HashMap<>();
        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("dailyReportDoubtTypeName");
        }
        //判断导出人权限
        sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
        List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
        if (userRoles.size()==0){
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
            } else if ("deptAdmin".equals(role_code)) {//查询出管理员所在部门
                if(StringUtils.isBlank(dept)){
                    sql = " select dh.dept_code from base_doctor doc INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code " +
                            " and doc.del=1 and dh.del=1 where doc.id='"+user+"' ";
                    List<String> userDept = jdbcTemplate.queryForList(sql,String.class);
                    if (userDept.size()>0){
                        dept = userDept.get(0);
                    }else {
                        throw new Exception("您无权限操作");
                    }
                }
            }else {
                throw new Exception("您无权限操作");
            }
        }
        String sqlCondition = "  ";
        if (StringUtils.isNotBlank(startDate)){
            sqlCondition += " and up.report_date>='"+startDate+"' ";
        }
        if (StringUtils.isNotBlank(endDate)){
            sqlCondition += " and up.report_date<='"+endDate+"' ";
        }
        if (StringUtils.isNotBlank(projectCode)){
            sqlCondition += " and i.project_code='"+projectCode+"' ";
        }
        if (StringUtils.isNotBlank(dept)){//查询指定部门
            sqlCondition += "  and dh.dept_code='"+dept+"' ";
        }
        //部门效能
        String deptListSql = " select distinct code,name from dict_hospital_dept ";
        if (StringUtils.isNotBlank(dept)){
            deptListSql+=" and code='"+dept+"' ";
        }
        deptListSql += " order by code asc";
        List<Map<String,Object>> deptList = jdbcTemplate.queryForList(deptListSql);
        for (Map<String,Object>deptTmp:deptList){
            String deptCodeTmp = deptTmp.get("code").toString();
            String sqlWhere =" and dh.dept_code='"+deptCodeTmp+"' ";
            Long members = 0l;
            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 " +
                    "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.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 and rd.report_item_id = it.id where 1=1 "+sqlWhere;
            members = jdbcTemplate.queryForObject(memberSql,Long.class);
            if (StringUtils.isNotBlank(startDate)) {
                sqlWhere += " and up.report_date>='"+DateUtil.strToStrShort(startDate) +"' ";
            }if (StringUtils.isNotBlank(endDate)){
                sqlWhere += "  and up.report_date<='"+DateUtil.strToStrShort(endDate)+"' ";
            }
            Long workDays=0l;
            if (StringUtils.isNotBlank(startDate)&&StringUtils.isNotBlank(endDate)) {
                workDays = DateUtil.getWorkDays(startDate, endDate);
            }
            String shangchuanSql = " select distinct up.report_date 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 i on i.id = rd.report_item_id and i.del=1 where 1=1 " +
                    " "+sqlWhere;
            //只计算出工作日上传的数量去求未上传
            List<String> upLoadTimes = jdbcTemplate.queryForList(shangchuanSql,String.class);
            Long shangchuanTotal = 0l;
            for (String tmp:upLoadTimes){
                if (!DateUtil.isHoliday(DateUtil.strToDate(tmp))){
                    shangchuanTotal++;
                }
            }
            Double acWorkHours = 0d;
            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<='"+startDate+"'  ";
            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(cast(IFNULL(rd.actual_completion_hour,IFNULL(rd.completion_hour,0)) as decimal(18,2))) 'completion_hour' " +
                    " 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 i on i.id = rd.report_item_id and i.del=1  where 1=1 " +
                    " "+sqlWhere;
            acWorkHours = jdbcTemplate.queryForObject(acWorkHoursSql,Double.class);
            String doubtTypeSql = " select count(distinct rd.id) as total,rd.doubt_type " +
                    " 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 i on i.id = rd.report_item_id and i.del=1 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中途加入到项目中的会导致统计出来的数据发生变化
            deptTmp.put("weishangbao",((workDays*members-shangchuanTotal))<0?0:(workDays*members-shangchuanTotal));//未上报 工作日次数-总上报次数
            deptTmp.put("doubtList",doubtTypeList);
            deptTmp.put("urgingTotal",urgingTotal);//项目催促
            result.put("acWorkHours",acWorkHours);//实际工作时长
            result.put("needWorkHours",needWorkHours);//应工作时长
        }
        result.put("deptList",deptList);
        //项目效能
        String sqlList = "  select dict.dict_code project_code,dict.dict_value projectName,IFNULL( A.completionHour,0) 'completionHour', " +
                " IFNULL(A.doctorTotal,0) 'doctorTotal',B.dict_code 'categoryCode',B.dict_value 'categoryName',C.dict_code 'levelCode' ,C.dict_value 'levelName' from wlyy_hospital_sys_dict dict " +
                " Left JOIN (" +
                " select i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) 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 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  where i.del=1 "+sqlCondition+" GROUP BY i.project_code )A " +
                "on A.project_code = dict.dict_code " +
                " INNER JOIN ( select dict_code,dict_value,sort from wlyy_hospital_sys_dict where dict_name='daily_report_category' )B on dict.saas_id = B.dict_code  " +
                " INNER JOIN ( select dict_code,dict_value,sort from wlyy_hospital_sys_dict where dict_name='daily_report_level' )C on dict.py_code = C.dict_code " +
                " where dict.dict_name='daily_report_project' ";
        if (StringUtils.isNotBlank(projectCode)){
            sqlList +=" and dict.dict_code='"+projectCode+"' ";
        }
        sqlList += "  order by B.sort asc, c.sort asc,completionHour desc ";
        List<Map<String,Object>> projectList = jdbcTemplate.queryForList(sqlList);//一级项目列表
        for (Map<String,Object> tmp:projectList){
            String projectCodeTmp = tmp.get("project_code").toString();//一级项目Code
            String projectTmpSqlCondition = " ";
            if (StringUtils.isNotBlank(startDate)){
                projectTmpSqlCondition += " and up.report_date>='"+startDate+"' ";
            }
            if (StringUtils.isNotBlank(endDate)){
                projectTmpSqlCondition += " and up.report_date<='"+endDate+"' ";
            }
            if (StringUtils.isNotBlank(dept)){//查询指定部门
                projectTmpSqlCondition += "  and dh.dept_code='"+dept+"' ";
            }
            String projectItemSql = " select i.id,i.dept,i.dept_name deptName,i.project_code,CAST((sum(cast(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')) as decimal(18,2)))) as char ) as completionHour, " +
                    " count(distinct up.doctor_id) as doctorTotal,i.begin_time,i.end_time,i.ac_begin_time, DATE_FORMAT(i.completion_time,'%Y-%m-%d %H:%i:%S') completion_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 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  where i.del=1 and i.project_code='"+projectCodeTmp+"'  "+projectTmpSqlCondition+" GROUP BY i.id  ";
            projectItemSql += "  order by  completionHour desc ";
            List<Map<String,Object>> projectItemList = jdbcTemplate.queryForList(projectItemSql);//二级项目列表
            for (Map<String,Object>itemTmp:projectItemList){//未饱和、效率、效能、项目催出情况
                String projectItemCode = itemTmp.get("id").toString();//二级项目code
                String itemTmpSqlCondition = " ";
                if (StringUtils.isNotBlank(startDate)){
                    itemTmpSqlCondition += " and up.report_date>='"+startDate+"' ";
                }
                if (StringUtils.isNotBlank(endDate)){
                    itemTmpSqlCondition += " and up.report_date<='"+endDate+"' ";
                }
                if (StringUtils.isNotBlank(dept)){//查询指定部门
                    itemTmpSqlCondition += "  and dh.dept_code='"+dept+"' ";
                }
                String doubtTypeSql = " select count(distinct rd.id) as total,rd.doubt_type " +
                        " 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 i on i.id = rd.report_item_id and i.del=1 where i.id='"+projectItemCode+"' " +
                        " "+itemTmpSqlCondition+" and rd.doubt_type is not null group by rd.doubt_type";
                List<Map<String,Object>> doubtTypeList = jdbcTemplate.queryForList(doubtTypeSql);
                for (Map<String,Object>doubtTmp:doubtTypeList){
                    String doubtType = doubtTmp.get("doubt_type").toString();
                    if(doubtTypeObj.containsKey(doubtType)){
                        doubtTmp.put("doubtTypeName",doubtTypeObj.get(doubtType));
                    }else {
                        doubtTmp.put("doubtTypeName","其他");
                    }
                }
                String urgingSql = " select count(id) from base_daily_urging_record where create_time>='"+startDate+"' and create_time<='"+startDate+"' " +
                        " and project_code='"+projectCodeTmp+"' and report_item_id='"+projectItemCode+"' ";
                if (StringUtils.isNotBlank(dept)){
                    urgingSql +=" and dept='"+dept+"' ";
                }
                Long urgingTotal = jdbcTemplate.queryForObject(urgingSql,Long.class);
                itemTmp.put("doubtList",doubtTypeList);//各存疑类型
                itemTmp.put("urgingTotal",urgingTotal);//项目催促
            }
            tmp.put("projectItemList",projectItemList);
        }
        result.put("projectList",projectList);
        return result;
    }
    /**
     * 初始化项目成员
     * @return
     */
    public String initItemMembers(){
        String sql = " select id,dept  from base_daily_report_item where del=1 ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        List<BaseDailyReportItemMembersDO> membersDOS = new ArrayList<>();
        for (Map<String,Object> tmp:list){
            sql =  " select distinct doc.id,doc.name from base_doctor doc inner join base_doctor_hospital dh  " +
                    "on doc.id = dh.doctor_code and doc.del=1 and dh.del=1  " +
                    "where dh.dept_code='"+tmp.get("dept").toString()+"' ";
            List<Map<String,Object>> membersList = jdbcTemplate.queryForList(sql);
            for (Map<String,Object> member:membersList){
                String docTmp = member.get("id").toString();
                String docNameTmp = member.get("name").toString();
                String reportItemId = tmp.get("id").toString();
                BaseDailyReportItemMembersDO membersDOTmp = reportItemMembersDao.findMembers(reportItemId,docTmp);
                if (null==membersDOTmp){
                    membersDOTmp = new BaseDailyReportItemMembersDO();
                    membersDOTmp.setReportItemId(reportItemId);
                    membersDOTmp.setUserId(docTmp);
                    membersDOTmp.setUserName(docNameTmp);
                    membersDOTmp.setDel(1);
                    membersDOS.add(membersDOTmp);
                }
            }
        }
        if(membersDOS.size()>0){
            reportItemMembersDao.save(membersDOS);
        }
        return "success";
    }
    /**
     * 导出项目计划周报月报用时情况
     * @param user
@ -3755,7 +4403,6 @@ public class DailyReportUploadService {
        String startTime = "";
        String endTime = "";
        if (userRoles.size()==0){
            throw new Exception("您无权限操作");
        }else {
            String role_code = userRoles.get(0).get("role_code").toString();
            if ("admin".equals(role_code)){
@ -3777,7 +4424,7 @@ public class DailyReportUploadService {
            throw new Exception("导出失败,请检查传入参数");
        }
        //项目耗时情况
        sql = " select CONCAT(it.title,'(',it.dept_name,')') title,it.content,sum(IFNULL(pd.actual_completion_hour,IFNULL(pd.completion_hour,0))) 'completion_hour' ," +
        sql = " select CONCAT(it.title,'(',it.dept_name,')') title,it.content,sum(cast(IFNULL(pd.actual_completion_hour,IFNULL(pd.completion_hour,0)) as decimal(18,2))) 'completion_hour' ," +
                " CASE it.state WHEN 1 THEN '已完成' ELSE '未完成' END as 'state',DATE_FORMAT(it.create_time,'%Y-%m-%d %H:%i:%S') create_time,it.create_user_name " +
                "from base_daily_report_item it LEFT JOIN base_daily_report_detail pd  " +
                "on it.id = pd.report_item_id " +
@ -3794,7 +4441,7 @@ public class DailyReportUploadService {
                "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', " +
                " rd.doubt_type doubtType, rd.remark " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id " +
                "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1 LEFT JOIN  " +
                "base_daily_report_detail rd on up.id = rd.report_id " +
                "LEFT JOIN base_daily_report_item it on rd.report_item_id = it.id " +
@ -3853,7 +4500,7 @@ public class DailyReportUploadService {
                "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'," +
                " rd.doubt_type doubtType, rd.remark " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id and doc.del=1  " +
                "from base_doctor_daily_report_upload up INNER JOIN base_doctor doc on up.doctor_id = doc.id " +
                "INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1 LEFT JOIN  " +
                "base_daily_report_detail rd on up.id = rd.report_id " +
                "LEFT JOIN base_daily_report_item it on rd.report_item_id = it.id " +
@ -4023,7 +4670,75 @@ public class DailyReportUploadService {
            JSONObject tmp = JSONObject.parseObject(dictValues.get(0));
            doubtTypeObj = tmp.getJSONObject("dailyReportDoubtTypeName");
        }
        Set<String> resultTimeList = new HashSet<>();
        Date startDateTmp = DateUtil.strToDate(startDate);
        Date endDateTmp = DateUtil.strToDate(endDate);
        for (;!startDateTmp.after(endDateTmp);){
            resultTimeList.add(DateUtil.dateToStr(startDateTmp,DateUtil.YYYY_MM_DD));
            startDateTmp = DateUtil.getNextDay1(startDateTmp,1);
        }
        if(userCompleteList.size()>0){
            String doctorTmp = null;
            String doctorNameTmp = null;
            String deptNameTmp = null;
            String jobTitleNameTmp = null;
            Set searchTimeList = new HashSet();
            List<Map<String,Object>> notReportList = new ArrayList<>();
            for(Map<String,Object>tmp:userCompleteList){
                String doctorId = null==tmp.get("doctor_id")?"":tmp.get("doctor_id").toString();
                String reportDate = null==tmp.get("report_date")?"":tmp.get("report_date").toString();
                String doctorName = null==tmp.get("doctor_name")?"":tmp.get("doctor_name").toString();
                String deptName = null==tmp.get("dept_name")?"":tmp.get("dept_name").toString();
                String jobTitleName = null==tmp.get("job_title_name")?"":tmp.get("job_title_name").toString();
                if(StringUtils.isBlank(doctorTmp)){
                    doctorTmp = doctorId;
                    doctorNameTmp = doctorName;
                    deptNameTmp = deptName;
                    jobTitleNameTmp = jobTitleName;
                }
                if (!doctorTmp.equals(doctorId)){
                    for (String tmpTime:resultTimeList){
                        if (!searchTimeList.contains(tmpTime)){
                            Map<String,Object> notReportObj = new HashMap<>();
                            notReportObj.put("doctor_id",doctorTmp);
                            notReportObj.put("report_date",tmpTime);
                            notReportObj.put("doctor_name",doctorNameTmp);
                            notReportObj.put("dept_name",deptNameTmp);
                            notReportObj.put("job_title_name",jobTitleNameTmp);
                            notReportObj.put("week_name",DateUtil.getWeekStr(tmpTime));
                            notReportList.add(notReportObj);
                        }
                    }
                    searchTimeList = new HashSet();
                    searchTimeList.add(reportDate);
                    doctorTmp = doctorId;
                    doctorNameTmp = doctorName;
                    deptNameTmp = deptName;
                    jobTitleNameTmp = jobTitleName;
                }else {
                    searchTimeList.add(reportDate);
                }
            }
            for (String tmpTime:resultTimeList){
                if (!searchTimeList.contains(tmpTime)){
                    Map<String,Object> notReportObj = new HashMap<>();
                    notReportObj.put("doctor_id",doctorTmp);
                    notReportObj.put("report_date",tmpTime);
                    notReportObj.put("doctor_name",doctorNameTmp);
                    notReportObj.put("dept_name",deptNameTmp);
                    notReportObj.put("job_title_name",jobTitleNameTmp);
                    notReportObj.put("week_name",DateUtil.getWeekStr(tmpTime));
                    notReportList.add(notReportObj);
                }
            }
            userCompleteList.addAll(notReportList);
        }
        userCompleteList.sort(Comparator.comparing(e->((Map<String,Object>)e).get("dept_name").toString()).reversed().thenComparing(e->((Map<String,Object>)e).get("doctor_id").toString()).thenComparing(e->((Map<String,Object>)e).get("report_date").toString()));
        WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);
        WritableSheet sheet = wwb.createSheet("sheet", 1);
        String[] header = {"员工完成情况("+startDate+"至"+endDate+")","","","","","","","","","","","","","","","","","",""};//

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

@ -3678,7 +3678,12 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            }
        }
        sql +=" order by p.create_time desc ";
        if ("xm_ykyy_wx".equals(wxId)) {
            sql +=" order by nvl(p.pay_time,p.create_time) desc ";
        }else {
            sql +=" order by ifnull(p.pay_time,p.create_time) desc ";
        }
        /*       sql += " LIMIT " + (page - 1) * size + "," + size + "";*/
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, size);
        for (Map<String, Object> map : list) {

+ 10 - 2
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java

@ -3177,7 +3177,11 @@ public class EntranceService {
                            ylzMedicalRelationDO.setName(resultJSON.getString("xming0"));
                            ylzMedicalRelationDO.setCertType("01");
                            ylzMedicalRelationDO.setMedicalMode("10");
                            ylzMedicalRelationDO.setMedicalType("11");
                            if (StringUtils.isNoneBlank(outpatientDO.getDiseaseCode())){
                                ylzMedicalRelationDO.setMedicalType("13");
                            }else {
                                ylzMedicalRelationDO.setMedicalType("11");
                            }
                            ylzMedicalRelationDO.setCardNo(cardno);
                            ylzMedicalRelationDO.setHisSerial(outpatientDO.getRegisterNo());
                            ylzMedicalRelationDO.setHisSettleNo(resultJSON.getString("xtgzh0"));
@ -3335,7 +3339,11 @@ public class EntranceService {
                            ylzMedicalRelationDO.setName(resultJSON.getString("xming0"));
                            ylzMedicalRelationDO.setCertType("01");
                            ylzMedicalRelationDO.setMedicalMode("10");
                            ylzMedicalRelationDO.setMedicalType("11");
                            if (StringUtils.isNoneBlank(outpatientDO.getDiseaseCode())){
                                ylzMedicalRelationDO.setMedicalType("13");
                            }else {
                                ylzMedicalRelationDO.setMedicalType("11");
                            }
                            ylzMedicalRelationDO.setHisSerial(outpatientDO.getRegisterNo());
                            ylzMedicalRelationDO.setHisSettleNo(resultJSON.getString("xtgzh0"));
                            ylzMedicalRelationDO.setDeptCode(resultJSON.getString("ksbm00"));

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

@ -2182,4 +2182,39 @@ CREATE TABLE `base_daily_urging_record` (
  `create_user_name` varchar(50) DEFAULT NULL,
  `del` tinyint(2) DEFAULT NULL COMMENT '1有效0无效',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--2022-09-06 wsl
CREATE TABLE `base_opinion_feedback` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `suggest_user_id` varchar(50) DEFAULT NULL COMMENT '反馈用户',
  `suggest_user_name` varchar(50) DEFAULT NULL COMMENT '反馈用户名字',
  `user_type` int(2) DEFAULT NULL COMMENT '反馈用户类型 0家属 1医生 2社工 3教师  4助老员\r\n',
  `feedback_type` int(2) DEFAULT NULL COMMENT '反馈工单类型',
  `suggest_describe` varchar(500) DEFAULT NULL COMMENT '反馈内容',
  `suggest_user_phone` varchar(20) DEFAULT NULL COMMENT '反馈人手机号',
  `suggest_status` int(2) DEFAULT NULL COMMENT '反馈状态 0处理中 1已回复',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '反馈时间',
  `manager_res` varchar(500) DEFAULT NULL COMMENT '回复内容',
  `reply_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
  `suggest_img_url` varchar(2500) DEFAULT NULL COMMENT '图片地址“,”分割',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8mb4 COMMENT='医养意见反馈表';
ALTER table wlyy_user_role add COLUMN `del` int(1) DEFAULT NULL COMMENT '是否生效';
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedback1', NULL, 'opinionFeedbackType', '1', '功能异常', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedback2', NULL, 'opinionFeedbackType', '2', '功能优化', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedback3', NULL, 'opinionFeedbackType', '3', '功能建议', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedback4', NULL, 'opinionFeedbackType', '4', '其他', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedbackUser0', NULL, 'opinionFeedbackUser', '0', '家属', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedbackUser1', NULL, 'opinionFeedbackUser', '1', '社区医生', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedbackUser2', NULL, 'opinionFeedbackUser', '2', '社工', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedbackUser3', NULL, 'opinionFeedbackUser', '3', '教师', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('opinionFeedbackUser4', NULL, 'opinionFeedbackUser', '4', '助老员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- 20220926 lb
alter table base_daily_report_detail add column doubt_read tinyint(2) default null comment '异常效率是否已读0未读1已读';
alter table base_doctor_daily_report_upload add column nice_work_type tinyint(2) default null comment '点赞类型 字典nice_work_type';

+ 12 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/role/WlyyUserRole.java

@ -21,6 +21,18 @@ public class WlyyUserRole extends IdEntity {
    private String role;    // 角色编码
    private String czy;     // 操作员
    private Date czrq;      // 操作日期
    private Integer del;  //是否生效  2022-09-08 添加
    @Column(name = "del")
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
    @Column(name = "user")
    public String getUser() {

+ 11 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java

@ -39,12 +39,13 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    private String workTypeName;//工作分类名称 字典healthUpload下的dailyWorkType
    private String progressType;//工作进展情况 字典healthUpload下的progressType
    private String progressTypeName;//工作进展
    private Integer doubtRead;//效率异常是否已读0未读1已读
    /**
     * 非数据库字段
     */
    private boolean reportItemFlag;
    private String reportItemTitle;
    private boolean reportItemFlag;//新增项目标识
    private String reportItemTitle;//新增项目title
    public String getReportId() {
        return reportId;
@ -248,4 +249,12 @@ public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    public void setProgressTypeName(String progressTypeName) {
        this.progressTypeName = progressTypeName;
    }
    public Integer getDoubtRead() {
        return doubtRead;
    }
    public void setDoubtRead(Integer doubtRead) {
        this.doubtRead = doubtRead;
    }
}

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

@ -23,6 +23,7 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    private String leaveHour;//请假时长
    private String reportDate; //上报日期
    private String totalHour;//上报时长
    private Integer niceWorkType;//点赞类型
    /**
     * 非数据库字段
@ -130,4 +131,12 @@ public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    public void setDoubt(boolean doubt) {
        this.doubt = doubt;
    }
    public Integer getNiceWorkType() {
        return niceWorkType;
    }
    public void setNiceWorkType(Integer niceWorkType) {
        this.niceWorkType = niceWorkType;
    }
}

+ 170 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/patient/BaseOpinionFeedBackEntity.java

@ -0,0 +1,170 @@
package com.yihu.jw.entity.patient;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by wsl on 2022/9/6
 */
@Entity
@Table(name = "base_opinion_feedback")
public class BaseOpinionFeedBackEntity extends IdEntity {
    /**
     * 反馈用户
     */
    private String suggestUserId;
    /**
     * 反馈用户名字
     */
    private String suggestUserName;
    /**
     * 反馈用户类型 0家属 1社工 2助老员
     */
    private Integer userType;
    /**
     * 反馈工单类型
     */
    private Integer feedbackType;
    /**
     * 反馈内容
     */
    private String suggestDescribe;
    /**
     * 反馈人手机号
     */
    private String suggestUserPhone;
    /**
     * 反馈状态 0处理中 1已回复
     */
    private Integer suggestStatus;
    /**
     * 反馈时间
     */
    private Date createTime;
    /**
     * 回复内容
     */
    private String managerRes;
    /**
     * 回复时间
     */
    private Date replyTime;
    /**
     * 图片地址“,”分割
     */
    private String suggestImgUrl;
    @Column(name = "suggest_user_id")
    public String getSuggestUserId() {
        return suggestUserId;
    }
    public void setSuggestUserId(String suggestUserId) {
        this.suggestUserId = suggestUserId;
    }
    @Column(name = "suggest_user_name")
    public String getSuggestUserName() {
        return suggestUserName;
    }
    public void setSuggestUserName(String suggestUserName) {
        this.suggestUserName = suggestUserName;
    }
    @Column(name = "user_type")
    public Integer getUserType() {
        return userType;
    }
    public void setUserType(Integer userType) {
        this.userType = userType;
    }
    @Column(name = "feedback_type")
    public Integer getFeedbackType() {
        return feedbackType;
    }
    public void setFeedbackType(Integer feedbackType) {
        this.feedbackType = feedbackType;
    }
    @Column(name = "suggest_describe")
    public String getSuggestDescribe() {
        return suggestDescribe;
    }
    public void setSuggestDescribe(String suggestDescribe) {
        this.suggestDescribe = suggestDescribe;
    }
    @Column(name = "suggest_user_phone")
    public String getSuggestUserPhone() {
        return suggestUserPhone;
    }
    public void setSuggestUserPhone(String suggestUserPhone) {
        this.suggestUserPhone = suggestUserPhone;
    }
    @Column(name = "suggest_status")
    public Integer getSuggestStatus() {
        return suggestStatus;
    }
    public void setSuggestStatus(Integer suggestStatus) {
        this.suggestStatus = suggestStatus;
    }
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "manager_res")
    public String getManagerRes() {
        return managerRes;
    }
    public void setManagerRes(String managerRes) {
        this.managerRes = managerRes;
    }
    @Column(name = "reply_time")
    public Date getReplyTime() {
        return replyTime;
    }
    public void setReplyTime(Date replyTime) {
        this.replyTime = replyTime;
    }
    @Column(name = "suggest_img_url")
    public String getSuggestImgUrl() {
        return suggestImgUrl;
    }
    public void setSuggestImgUrl(String suggestImgUrl) {
        this.suggestImgUrl = suggestImgUrl;
    }
}

+ 21 - 9
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -800,19 +800,19 @@ public class DateUtil {
    public static String getWeekStr(String sdate) {
        String str = "";
        str = DateUtil.getWeek(sdate);
        if ("1".equals(str)) {
        if ("1".equals(str)||"Sunday".equals(str)) {
            str = "星期日";
        } else if ("2".equals(str)) {
        } else if ("2".equals(str)||"Monday".equals(str)) {
            str = "星期一";
        } else if ("3".equals(str)) {
        } else if ("3".equals(str)||"Tuesday".equals(str)) {
            str = "星期二";
        } else if ("4".equals(str)) {
        } else if ("4".equals(str)||"Wednesday".equals(str)) {
            str = "星期三";
        } else if ("5".equals(str)) {
        } else if ("5".equals(str)||"Thursday".equals(str)) {
            str = "星期四";
        } else if ("6".equals(str)) {
        } else if ("6".equals(str)||"Friday".equals(str)) {
            str = "星期五";
        } else if ("7".equals(str)) {
        } else if ("7".equals(str)||"Saturday".equals(str)) {
            str = "星期六";
        }
        return str;
@ -1108,8 +1108,8 @@ public class DateUtil {
        }
        while (startCal.compareTo(endCal) <= 0) {
            //如果不是周六或者周日则工作日+1
            if (startCal.get(Calendar.DAY_OF_WEEK) != 7 && startCal.get(Calendar.DAY_OF_WEEK) != 1) {
            //工作日+1
            if (!Holiday.isHoliday((startCal.getTime()))){
                day++;
            }
            startCal.add(Calendar.DAY_OF_MONTH, 1);
@ -1118,6 +1118,17 @@ public class DateUtil {
    }
    /**
     * 判断一天是不是工作日
     *
     * @param date 日期
     * @return true:休息日,false:工作日
     * @date 2020/10/26
     */
    public static boolean isHoliday(Date date) {
        return Holiday.isHoliday(date);
    }
    /**
     * 获取当月第一天
     * @return
@ -1682,4 +1693,5 @@ public class DateUtil {
        String[] weekDays = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
        return weekDays[getWeekByString(date)];
    }
}

+ 324 - 0
common/common-util/src/main/java/com/yihu/jw/util/date/Holiday.java

@ -0,0 +1,324 @@
package com.yihu.jw.util.date;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
 * 原生java调用(除开JSON)
 * 线程不安全
 *
 * @author holate
 */
public class Holiday {
    /**
     * 网址前缀
     */
    private static final String BASE_PREFIX = "https://gitee.com/holate/public-holiday/raw/master/holidays/year/";
    /**
     * 网址后缀
     */
    private static final String BASE_SUFFIX = ".json";
    /**
     * 使用读写锁(单线程忽略)
     */
    private static final ReadWriteLock READ_WRITE_LOCK = new ReentrantReadWriteLock();
    /**
     * 法律规定的放假日期,30+366*2/7向上取整
     */
    private static final Set<String> LAW_HOLIDAYS = new HashSet<>(135);
    /**
     * 由于放假需要额外工作的周末,366*5/7向上取整
     */
    private static final Set<String> EXTRA_WORKDAYS = new HashSet<>(262);
    /**
     * 调用接口获取过的年份,大小设置为4年
     */
    private static final Set<Integer> ALREADY_OBTAIN = new HashSet<>(4);
    /**
     * 格式化日期到天
     */
    private static final String TO_DAY = "yyyy-MM-dd";
    /**
     * 调用接口每天调用一次,记录上一次调用日期
     */
    private static String initDate = "";
    /**
     * 返回指定日期后{@param days}个工作日的日期
     *
     * @param startDate 开始日期
     * @param days      工作日数
     * @return {@link Date}
     * @date 2020/10/26
     * @author holate
     */
    public static Date calculateWorkDay(Date startDate, int days) {
        // 每日清理节假日重新从接口获取
        cleanDate();
        if (startDate == null) {
            return null;
        }
        READ_WRITE_LOCK.readLock().lock();
        try {
            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
            cal.setTime(startDate);
            //累加自然日
            for (int i = 1; i <= days; i++) {
                cal.add(Calendar.DATE, 1);
                Integer year = cal.get(Calendar.YEAR);
                //如果那一年的数据没有获取过,则获取数据
                if (!ALREADY_OBTAIN.contains(year)) {
                    getHolidayForMonth(year);
                }
                //如果是假日,延后一天
                if (isHoliday(cal)) {
                    days++;
                }
            }
            return cal.getTime();
        } finally {
            READ_WRITE_LOCK.readLock().unlock();
        }
    }
    /**
     * 返回指定日期后{@param days}个自然日的日期
     *
     * @param startDate 开始日期
     * @param days      自然日数
     * @return {@link Date}
     * @date 2020/10/26
     * @author holate
     */
    public static Date calculateNormalDay(Date startDate, int days) {
        if (startDate == null) {
            return null;
        }
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
        cal.setTime(startDate);
        cal.add(Calendar.DATE, days);
        return cal.getTime();
    }
    /**
     * 返回指定日期后{@param days}个节假日的日期
     *
     * @param startDate 开始日期
     * @param days      自然日数
     * @return {@link Date}
     * @date 2020/10/26
     * @author holate
     */
    public static Date calculateNextHoliday(Date startDate, int days) {
        // 每日清理节假日重新从接口获取
        cleanDate();
        if (startDate == null) {
            return null;
        }
        READ_WRITE_LOCK.readLock().lock();
        try {
            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
            cal.setTime(startDate);
            //累加自然日
            for (int i = 1; i <= days; i++) {
                cal.add(Calendar.DATE, 1);
                Integer year = cal.get(Calendar.YEAR);
                //如果那一年的数据没有获取过,则获取数据
                if (!ALREADY_OBTAIN.contains(year)) {
                    getHolidayForMonth(year);
                }
                //如果是假日,延后一天
                if (!isHoliday(cal)) {
                    days++;
                }
            }
            return cal.getTime();
        } finally {
            READ_WRITE_LOCK.readLock().unlock();
        }
    }
    /**
     * 判断一天是不是工作日
     *
     * @param date 日期
     * @return true:休息日,false:工作日
     * @date 2020/10/26
     */
    public static boolean isHoliday(Date date) {
        cleanDate();
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
        cal.setTime(date);
        Integer year = cal.get(Calendar.YEAR);
        if (!ALREADY_OBTAIN.contains(year)) {
            getHolidayForMonth(year);
        }
        return isHoliday(cal);
    }
    /**
     * 判断一天是不是休息日
     *
     * @param cal 日期
     * @return true:休息日,false:工作日
     * @date 2020/10/26
     */
    private static boolean isHoliday(Calendar cal) {
        SimpleDateFormat simpleFormat = new SimpleDateFormat(TO_DAY);
        String day = simpleFormat.format(cal.getTime());
        // 法定节假日必定是休息日
        if (LAW_HOLIDAYS.contains(day)) {
            return true;
        }
        // 排除法定节假日外的非周末必定是工作日
        if (!isWeekend(cal)) {
            return false;
        }
        // 所有周末中只有非补班的才是休息日
        return !EXTRA_WORKDAYS.contains(day);
    }
    /**
     * 判断是否为周末
     *
     * @param cal 日期
     * @return true:是周末,false:不是周末
     * @date 2020/10/26
     * @author holate
     */
    private static boolean isWeekend(Calendar cal) {
        return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
    }
    /**
     * 每天清空日期
     *
     * @date 2020/10/26
     * @author holate
     */
    private static void cleanDate() {
        SimpleDateFormat simpleFormat = new SimpleDateFormat(TO_DAY);
        String day = simpleFormat.format(new Date());
        //如果初始化时间不为当天
        if (!day.equals(initDate)) {
            READ_WRITE_LOCK.writeLock().lock();
            try {
                if (!day.equals(initDate)) {
                    ALREADY_OBTAIN.clear();
                    EXTRA_WORKDAYS.clear();
                    LAW_HOLIDAYS.clear();
                    initDate = day;
                }
            } finally {
                READ_WRITE_LOCK.writeLock().unlock();
            }
        }
    }
    /**
     * 通过年月查询第三方节假日,获取节日和调休的工作日
     *
     * @param year 年份
     * @return {@link Set<Calendar>}
     * @date 2020/10/26
     * @author holate
     */
    @SuppressWarnings("unchecked")
    private static void getHolidayForMonth(Integer year) {
        //json对象,获取值使用的键
        String holiday = "holiday";
        //访问url
        String url = BASE_PREFIX + year + BASE_SUFFIX;
        String json = getUrl(url);
        if (json.length() == 0) {
            return;
        }
        //构建json对象
        JSONObject body = JSON.parseObject(json);
        Map<String, JSONObject> days = (Map<String, JSONObject>) body.get(holiday);
        for (Map.Entry<String, JSONObject> entry : days.entrySet()) {
            Boolean isHoliday = (Boolean) entry.getValue().get(holiday);
            if (isHoliday) {
                LAW_HOLIDAYS.add(year + "-" + entry.getKey());
            } else {
                EXTRA_WORKDAYS.add(year + "-" + entry.getKey());
            }
        }
        ALREADY_OBTAIN.add(year);
    }
    /**
     * 使用get请求访问url
     *
     * @param url 网址
     * @return {@link String} 返回响应内容
     * @date 2020/10/26
     * @author holate
     */
    private static String getUrl(String url) {
        //访问返回结果
        StringBuilder result = new StringBuilder();
        //读取访问结果
        BufferedReader read = null;
        try {
            //创建url
            URL realUrl = new URL(url);
            //打开连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/5.0");
            //建立连接
            connection.connect();
            // 定义 BufferedReader输入流来读取URL的响应
            read = new BufferedReader(new InputStreamReader(
                connection.getInputStream(), StandardCharsets.UTF_8));
            String line;//循环读取
            while ((line = read.readLine()) != null) {
                result.append(line).append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeReader(read);
        }
        return result.toString();
    }
    /**
     * 关闭读取字符流
     *
     * @param reader 读取字符流
     * @date 2020/10/26
     * @author holate
     */
    private static void closeReader(Reader reader) {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

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

@ -69,6 +69,10 @@ zuul:
    svr-base-yg:
      path: /cityihealth/baseygTest/**
      serviceId: svr-base-yg
#药柜设备备用地址2
    svr-base-prod:
      path: /cityihealth/baseProd/**
      serviceId: svr-base-prod
#药柜后台预发布
    svr-authentication-yg:
      path: /cityihealth/authygTest/**

+ 12 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/patient/BaseOpinionFeedbackDao.java

@ -0,0 +1,12 @@
package com.yihu.jw.base.dao.patient;
import com.yihu.jw.entity.patient.BaseOpinionFeedBackEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
 * Created by wsl on 2022/9/6
 */
public interface BaseOpinionFeedbackDao extends JpaRepository<BaseOpinionFeedBackEntity,String>, JpaSpecificationExecutor<BaseOpinionFeedBackEntity> {
}

+ 110 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/customerService/CustomerServiceController.java

@ -0,0 +1,110 @@
package com.yihu.jw.base.endpoint.customerService;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.service.customerService.CustomerService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
 * Created by wsl on 2022/9/7
 */
@RestController
@RequestMapping(value = "CustomerService/", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "客服管理", description = "客服管理接口", tags = {"wlyy基础服务 - 客服管理"})
public class CustomerServiceController extends EnvelopRestEndpoint {
    @Autowired
    private CustomerService customerService;
    @GetMapping("findByCustomerService")
    @ApiOperation("获取所有客服")
    public ObjEnvelop findByCustomerService(@RequestParam(value = "name",required = false) String name,
                                             @RequestParam(value = "page") Integer page,
                                             @RequestParam(value = "pageSize") Integer pageSize){
        try {
            JSONObject byCustomerService = customerService.findByCustomerService(name, page, pageSize);
            return success(byCustomerService);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("服务端异常");
        }
    }
    @GetMapping("findByUserPhone")
    @ApiOperation("查找用户")
    public ObjEnvelop findByUserPhone(@RequestParam(value = "phone") String phone) {
        try {
            Map byUserPhone = customerService.findByUserPhone(phone);
            if (byUserPhone != null) {
                return ObjEnvelop.getSuccess("查找成功", byUserPhone, 200);
            } else {
                return ObjEnvelop.getError("账号不存在", 400);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("服务端异常");
        }
    }
    @PostMapping("addCustomerServiceUser")
    @ApiOperation("添加客服")
    public Envelop addCustomerServiceUser(@RequestParam(value = "id") String id) {
        try {
            Integer result = customerService.addCustomerServiceUser(id);
           if (result == 0){
                return Envelop.getError("添加失败!当前已存在一个生效客服!",500);
            }else if (result == -1){
                return Envelop.getError("添加失败!当前客服已存在未生效状态!",500);
            }else if (result == -2){
               return Envelop.getError("添加失败!添加用户非管理员!",500);
           }else {
               return success("添加成功");
           }
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("服务端异常");
        }
    }
    @PostMapping("invalidCustomerService")
    @ApiOperation("失效/生效客服")
    public Envelop invalidCustomerService(@RequestParam(value = "id") String id,
                                          @RequestParam(value = "status") Integer status){
        try {
            Integer result = customerService.invalidCustomerService(id, status);
            if (-1==result){
                return Envelop.getError("已存在一个生效客服!");
            }
            return success("修改成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("服务端异常");
        }
    }
    @PostMapping("delCustomerService")
    @ApiOperation("删除客服")
    public Envelop delCustomerService(@RequestParam(value = "id") String id){
        try {
            customerService.delCustomerService(id);
            return success("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("服务端异常");
        }
    }
}

+ 65 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/opinionFeedback/OpinionFeedbackController.java

@ -0,0 +1,65 @@
package com.yihu.jw.base.endpoint.opinionFeedback;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.service.opinionFeedback.OpinionFeedbackService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
/**
 * Created by wsl on 2022/9/7
 */
@RestController
@RequestMapping(value = "suggestionManage/", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "意见反馈", description = "意见反馈接口", tags = {"wlyy基础服务 - 意见反馈管理"})
public class OpinionFeedbackController extends EnvelopRestEndpoint {
    @Autowired
    private OpinionFeedbackService opinionFeedbackService;
    @GetMapping("findOpinionFeedbackList")
    @ApiOperation("查找列表")
    public ObjEnvelop findOpinionFeedbackList(@RequestParam(value = "suggestUserName", required = false) String suggestUserName,
                                              @RequestParam(value = "feedbackType", required = false) Integer feedbackType,
                                              @RequestParam(value = "userType", required = false) Integer userType,
                                              @RequestParam(value = "suggestStatus", required = false) Integer suggestStatus,
                                              @RequestParam(value = "page", required = false) Integer page,
                                              @RequestParam(value = "pageSize", required = false) Integer pageSize,
                                              @RequestParam(value = "id", required = false) String id) {
        try {
            JSONObject opinionFeedbackList = opinionFeedbackService.findOpinionFeedbackList(suggestUserName, feedbackType, userType, suggestStatus, page, pageSize, id);
            return success(opinionFeedbackList);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("服务端异常");
        }
    }
    @PostMapping("saveReply")
    @ApiOperation("保存回复")
    public Envelop saveReply(@RequestParam(value = "id", required = false) Integer id,
                             @RequestParam(value = "managerRes", required = false) String managerRes) {
        try {
            Integer result = opinionFeedbackService.saveReply(id, managerRes);
            if (result==-1) {
                return Envelop.getError("该反馈已回复,请勿重复回复");
            }else{
                return success("保存成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("服务端异常");
        }
    }
}

+ 94 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/customerService/CustomerService.java

@ -0,0 +1,94 @@
package com.yihu.jw.base.service.customerService;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
 * Created by wsl on 2022/9/7
 */
@Service
public class CustomerService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public JSONObject findByCustomerService(String name, Integer page, Integer pageSize) {
        JSONObject result = new JSONObject();
        String sql = "SELECT d.id,d.name,d.idcard,d.mobile,r.del AS `status` FROM base_doctor d INNER JOIN wlyy_user_role r ON d.id = r.`user` " +
                " WHERE 1=1 AND d.del = 1 AND r.role = 'chjd_kf'";
        String sqlTotal = "SELECT count(d.id) FROM base_doctor d INNER JOIN wlyy_user_role r ON d.id = r.`user` " +
                " WHERE 1=1 AND d.del = 1 AND r.role = 'chjd_kf'";
        if (StringUtils.isNotBlank(name)) {
            sql += " and d.name like '%" + name + "%'";
            sqlTotal += " and d.name like '%" + name + "%'";
        }
        sql += "limit " + page + "," + pageSize + "";
        Integer total = jdbcTemplate.queryForObject(sqlTotal, Integer.class);
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        result.put("total",total);
        result.put("data",list);
        return result;
    }
    //查询用户
    public Map findByUserPhone(String phone) {
        String sql = "select id,name,idcard,mobile  from base_doctor where mobile = '" + phone + "' and del = 1";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        if (list.size() > 0) {
            return list.get(0);
        }
        return null;
    }
    //添加客服
    @Transactional(rollbackFor = Exception.class)
    public Integer addCustomerServiceUser(String id) {
        String sql = "select count(id) from wlyy_user_role where del = 1";
        String sqldel = "select count(id) from wlyy_user_role where user ='" + id + "' and del = 0";
        String sqladmin = "select count(id) from wlyy_user_role where user ='" + id + "' and role = '330100'";
        Integer total = jdbcTemplate.queryForObject(sql, Integer.class);
        Integer delTotal = jdbcTemplate.queryForObject(sqldel, Integer.class);
        Integer adminTital = jdbcTemplate.queryForObject(sqladmin, Integer.class);
        if (total > 0) return 0;
        if (delTotal > 0) return -1;
        if (!(adminTital > 0)) return -2;
        String instSql = "INSERT INTO `base`.`wlyy_user_role`(`user`, `role`, `czy`, `czrq`,`del`) VALUES ('" + id + "', 'chjd_kf', NULL, NULL,1);";
        jdbcTemplate.update(instSql);
        return 1;
    }
    @Transactional(rollbackFor = Exception.class)
    public Integer invalidCustomerService(String id, Integer status) {
        if (1 == status) {
            String sqlTotal = "select count(id) from wlyy_user_role where 1=1 and role = 'chjd_kf' and del=1";
            Integer total = jdbcTemplate.queryForObject(sqlTotal, Integer.class);
            if (total >= 1) return -1;
        }
        String sql = "update wlyy_user_role set del = '" + status + "' where user = '" + id + "' and role ='chjd_kf' ";
        jdbcTemplate.update(sql);
        return 1;
    }
    @Transactional(rollbackFor = Exception.class)
    public void delCustomerService(String id) {
        String sql = "delete from wlyy_user_role where user = '" + id + "' and role ='chjd_kf' ";
        jdbcTemplate.execute(sql);
    }
}

+ 106 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/opinionFeedback/OpinionFeedbackService.java

@ -0,0 +1,106 @@
package com.yihu.jw.base.service.opinionFeedback;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.patient.BaseOpinionFeedBackEntity;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
 * Created by wsl on 2022/9/6
 */
@Service
public class OpinionFeedbackService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public JSONObject findOpinionFeedbackList(String suggestUserName, Integer feedbackType, Integer userType, Integer suggestStatus, Integer page, Integer pageSize,String id) {
        JSONObject jsonObject = new JSONObject();
        String sql = "select id,suggest_user_id as suggestUserId,suggest_user_name as suggestUserName,user_type as userType," +
                "feedback_type as feedbackType,suggest_describe as suggestDescribe,suggest_user_phone as suggestUserPhone," +
                "suggest_status as suggestStatus,create_time as createTime,manager_res as managerRes,reply_time as replyTime," +
                "suggest_img_url as suggestImgUrl from base_opinion_feedback where 1=1 ";
        String sqlTotal = "select count(*) from base_opinion_feedback where 1=1 ";
        if (StringUtils.isNotBlank(suggestUserName)) {
            sql += " and suggest_user_name like '%" + suggestUserName + "%'";
            sqlTotal += " and suggest_user_name like '%" + suggestUserName + "%'";
        }
        if (null != feedbackType) {
            sql +=" and feedback_type = "+feedbackType+"";
            sqlTotal +=" and feedback_type = "+feedbackType+"";
        }
        if (null != userType) {
            sql +=" and  user_type = "+userType+"";
            sqlTotal +=" and  user_type = "+userType+"";
        }
        if (null != suggestStatus) {
            sql +=" and  suggest_status = "+suggestStatus+"";
            sqlTotal +=" and  suggest_status = "+suggestStatus+"";
        }
        if (StringUtils.isNotBlank(id)){
            sql +=" and id = '"+id+"'";
            sqlTotal +=" and id = '"+id+"'";
        }
        sql +=" order by create_time DESC ";
        if (StringUtils.isBlank(id)) {
            if (page == null) {
                page = 0;
            }else {
                page = (page - 1) * pageSize;
            }
            if (pageSize == null) {
                pageSize = 10;
            }
            sql+=" LIMIT "+page+","+pageSize+" ";
        }
        List<BaseOpinionFeedBackEntity> entityList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(BaseOpinionFeedBackEntity.class));
        Integer total = jdbcTemplate.queryForObject(sqlTotal, Integer.class);
        jsonObject.put("total",total);
        jsonObject.put("obj",entityList);
        return jsonObject;
    }
   /* public BaseOpinionFeedBackEntity findOpinionFeedback(Integer id){
        String sql = "select * from base_opinion_feedback where id = "+id+"";
        return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(BaseOpinionFeedBackEntity.class));
    }*/
    @Transactional(rollbackFor = Exception.class)
    public Integer saveReply(Integer id,String managerRes){
        String sql ="select count(id) from base_opinion_feedback where suggest_status = 1 and id = '"+id+"' ";
        Integer total = jdbcTemplate.queryForObject(sql, Integer.class);
        if (total>0){
            return -1;
        }
        String updSql = "UPDATE base_opinion_feedback SET suggest_status = 1, manager_res ='"+managerRes+"',reply_time ='"+DateUtil.dateToStrLong(new Date())+"' WHERE id = '"+id+"'";
        jdbcTemplate.update(updSql);
        return 1;
    }
}

+ 12 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/patient/BaseOpinionFeedbackDao.java

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.patient;
import com.yihu.jw.entity.patient.BaseOpinionFeedBackEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
 * Created by wsl on 2022/9/6
 */
public interface BaseOpinionFeedbackDao extends JpaRepository<BaseOpinionFeedBackEntity,String>, JpaSpecificationExecutor<BaseOpinionFeedBackEntity> {
}

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/role/DoctorRoleDao.java

@ -14,6 +14,6 @@ import java.util.List;
public interface DoctorRoleDao extends JpaRepository<DoctorRole, Long> {
    @Query(value = "select b.* from wlyy_user_role a,wlyy_role b where a.role = b.code and a.user = ?1",nativeQuery = true)
    @Query(value = "select b.* from wlyy_user_role a,wlyy_role b where a.role = b.code and a.user = ?1 and ((a.del = 1 OR a.del IS NULL) )  ",nativeQuery = true)
    List<DoctorRole> findUserRole(String user);
}

+ 76 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/OpinionFeedback/OpinionFeedbackController.java

@ -0,0 +1,76 @@
package com.yihu.jw.care.endpoint.OpinionFeedback;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.opinion.UserOpinionFeedbackService;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by wsl on 2022/9/6
 */
@RestController
@RequestMapping("suggestionManage/")
@Api(tags = "意见反馈")
public class OpinionFeedbackController extends BaseController {
    @Autowired
    UserOpinionFeedbackService userOpinionFeedbackService;
    @RequestMapping(value = "saveSuggestion", method = RequestMethod.POST)
    @ApiOperation(value = "保存 意见反馈")
    public String saveOpinionFeedback(@ApiParam(name = "suggestUserId",value = "反馈人")
                                      @RequestParam(value = "suggestUserId",required = true)String suggestUserId,
                                      @ApiParam(name = "suggestUserName",value = "反馈人名字")
                                      @RequestParam(value = "suggestUserName",required = true)String suggestUserName,
                                      @ApiParam(name = "suggestUserPhone",value = "反馈人手机号")
                                      @RequestParam(value = "suggestUserPhone",required = true)String suggestUserPhone,
                                      @ApiParam(name = "suggestDescribe",value = "反馈内容")
                                      @RequestParam(value = "suggestDescribe")String suggestDescribe,
                                      @ApiParam(name = "userType",value = "反馈人类型 0家属 1社工 2助老员")
                                      @RequestParam(value = "userType")Integer userType,
                                      @ApiParam(name = "suggestImgUrl",value = "附件",required = false)
                                      @RequestParam(value = "suggestImgUrl",required = false)String suggestImgUrl,
                                      @ApiParam(name = "feedBackType",value = "反馈类型",required = true)
                                      @RequestParam(value = "feedBackType",required = true)Integer feedBackType){
        try {
            userOpinionFeedbackService.saveOpinionFeedback(suggestUserId,suggestUserName,suggestUserPhone,suggestDescribe,userType,suggestImgUrl,feedBackType);
            return success("保存成功!");
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
    @RequestMapping(value = "findUserOpinioneFeedbackList", method = RequestMethod.POST)
    @ApiOperation(value = "获取意见反馈 列表/详情")
    public ObjEnvelop findUserOpinioneFeedback(@ApiParam(name = "suggestUserId", value = "反馈人")
                                           @RequestParam(value = "suggestUserId", required = false) String suggestUserId,
                                           @ApiParam(name = "id", value = "反馈id",required = false)
                                           @RequestParam(value = "id", required = false) String id,
                                           @RequestParam(value = "page", required = false) Integer page,
                                           @RequestParam(value = "pageSize", required = false) Integer pageSize) {
        try {
            JSONObject userOpinioneFeedback = userOpinionFeedbackService.findUserOpinioneFeedback(suggestUserId, id,page,pageSize);
            return ObjEnvelop.getSuccess("获取成功",userOpinioneFeedback,200);
        } catch (Exception e) {
            error(e);
            return ObjEnvelop.getError("服务端异常");
        }
    }
}

+ 78 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/cutomerService/CustomerServiceController.java

@ -0,0 +1,78 @@
package com.yihu.jw.care.endpoint.cutomerService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.customerService.CustomerService;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * Created by wsl on 2022/9/13
 */
@RestController
@RequestMapping(value = "/customerService/", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "医养客服")
public class CustomerServiceController extends EnvelopRestEndpoint {
    @Autowired
    private CustomerService customerService;
    @ApiOperation("获取生效客服信息")
    @GetMapping(value= "findCustomerServiceInfo")
    public ListEnvelop customerServiceInfo(){
        try {
            List<Map<String, Object>> result = customerService.customerServiceInfo();
            return success(result);
        } catch (Exception e) {
            e.printStackTrace();
            return ListEnvelop.getError("服务端异常!");
        }
    }
    @ApiOperation("获取客服咨询信息")
    @GetMapping(value= "consultList")
    public ListEnvelop consultList(@RequestParam(value = "user_id", required = true) String user_id,
                                   @RequestParam(value = "business_type", required = true) String business_type,
                                   @RequestParam(value = "status", required = true) String status,
                                   @RequestParam(value = "name", required = false) String name,
                                   @RequestParam(value = "search_type", required = true) String search_type,
                                   @RequestParam(value = "page", required = true) Integer page,
                                   @RequestParam(value = "size", required = true) Integer size){
        try {
            JSONArray jsonArray = customerService.consultList(user_id, business_type, status, name, search_type, page, size);
            return success(jsonArray);
        } catch (Exception e) {
            e.printStackTrace();
            return ListEnvelop.getError("服务端异常!");
        }
    }
    @ApiOperation("获取客服咨询未回复数量")
    @GetMapping(value= "consultNoReply")
    public ObjEnvelop consultNoReply(@RequestParam(value = "doctor", required = true) String doctor){
        try {
            JSONObject jsonObject = customerService.consultNoReply(doctor);
            return success(jsonObject);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("服务端异常!");
        }
    }
}

+ 148 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/customerService/CustomerService.java

@ -0,0 +1,148 @@
package com.yihu.jw.care.service.customerService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.util.HttpClientUtilCare;
import com.yihu.jw.im.service.ImService;
import com.yihu.jw.im.util.ImUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * Created by wsl on 2022/9/13
 */
@Service
public class CustomerService {
    @Value("${im.im_list_get}")
    private String im_host;
    //@Autowired
    //private HttpClientUtilCare httpClientUtilCare;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    ImService imService;
    @Autowired
    private ImUtil imUtil;
    // user_id=13&business_type=2&status=0&name=&search_type=1&page=1&size=20
    //获取客服信息
    public List<Map<String, Object>> customerServiceInfo() {
        String sql = "SELECT d.id,d.`name`,d.photo,d.mobile FROM base_doctor d INNER JOIN wlyy_user_role r ON d.id = r.`user` WHERE r.del = 1 AND r.role = 'chjd_kf'  ";
        String listStr = imUtil.getOnlineListByType("helper");
        JSONObject onLineObj = JSONObject.parseObject(listStr);
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        if (200 == onLineObj.getInteger("status")) {
            JSONObject oneLineInfo = onLineObj.getJSONObject("helper");
            for (Map<String, Object> map : list) {
                String doctorCode = map.get("id").toString();
                if (oneLineInfo.containsKey(doctorCode)) {
                    if (oneLineInfo.getInteger(doctorCode) > 0) {
                        map.put("onLineFlag", 1);
                    } else {
                        map.put("onLineFlag", 0);
                    }
                } else {
                    map.put("onLineFlag", 0);
                }
            }
        }
        return list;
    }
    public JSONArray consultList(String user_id, String business_type, String status, String name, String search_type, Integer page, Integer size) {
        if (StringUtils.isBlank(name)) {
            name = "";
        }
        String imAddr = im_host + "api/v2/sessions?user_id=" + user_id + "&business_type=" + business_type + "&status=" + status + "&" +
                "name=" + name + "&search_type=" + search_type + "&page=" + page + "&size=" + size + "";
        HttpClientUtilCare httpClientUtilCare = new HttpClientUtilCare();
        String sing = httpClientUtilCare.get(imAddr, "utf-8");
        JSONArray jsonArray = JSONArray.parseArray(sing);
        JSONArray result = new JSONArray();
        System.out.println("-----imAddr:"+imAddr);
        String sql = "SELECT CASE WHEN archive_type = 1 THEN '老人' WHEN archive_type = 2 THEN '幼儿' WHEN archive_type = 3 THEN '家属' END AS type FROM base_patient  WHERE  id = '<id>' AND del = 1 " +
                "UNION  " +
                "SELECT CASE " +
                " WHEN doctor_level = 2 THEN " +
                " '社工' " +
                "WHEN doctor_level = 4 THEN " +
                "'助老员' " +
                "WHEN doctor_level = 3 THEN " +
                "'教师' " +
                "END AS type FROM base_doctor WHERE id = '<id>'  ";
       for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            System.out.println(jsonObject.get("sender_id") + ":" + jsonObject.get("sender_name"));
           /*  if (jsonObject.get("sender_id") != null && StringUtils.isNotBlank(jsonObject.get("sender_id").toString())&&!jsonObject.get("sender_id").toString().equals(user_id)) {
                String id = jsonObject.get("sender_id").toString();
                String labelSql = sql.replace("<id>",id);
                List<Map<String, Object>> list = jdbcTemplate.queryForList(labelSql);
                if (list.size() > 0) {
                    jsonObject.put("userType", list.get(0).get("type").toString());
                }else {
                    jsonObject.put("userType", "未知");
                }
               *//* for (Map<String, Object> map : list) {
                    switch (map.get("type").toString()){
                        case "老人":
                            String fpatientSql = "SELECT count(id) FROM base_patient_family_member  WHERE  family_member = '"+id+"'";
                            Integer total = jdbcTemplate.queryForObject(fpatientSql, Integer.class);
                            if (total>0){
                                jsonObject.put("userType","家属");
                            }
                            break;
                        default:
                            break;
                    }
                }*//*
            }else {*/
                JSONArray participantsArray = JSONArray.parseArray(jsonObject.get("participantsTimeArray").toString());
                for (Object participantObj : participantsArray) {
                    JSONObject participant = JSONObject.parseObject(participantObj.toString());
                    if (!user_id.equals(participant.getString("id"))) {
                        String id = participant.getString("id");
                        String labelSql = sql.replace("<id>",id);
                        List<Map<String, Object>> list = jdbcTemplate.queryForList(labelSql);
                        if (list.size() > 0) {
                            jsonObject.put("userType", list.get(0).get("type").toString());
                        }else {
                            jsonObject.put("userType", "未知");
                        }
                    }
                }
           /* }*/
            result.add(jsonObject);
       }
        return result;
    }
    public JSONObject consultNoReply(String doctor) {
        JSONObject result = new JSONObject();
        Integer integer = imService.SessionsUnreadMessageCount(doctor,"2");
        result.put("total", integer);
        return result;
    }
}

+ 67 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/opinion/UserOpinionFeedbackService.java

@ -0,0 +1,67 @@
package com.yihu.jw.care.service.opinion;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.patient.BaseOpinionFeedbackDao;
import com.yihu.jw.entity.patient.BaseOpinionFeedBackEntity;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by wsl on 2022/9/6
 */
@Service
public class UserOpinionFeedbackService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BaseOpinionFeedbackDao baseOpinionFeedbackDao;
    @Transactional(rollbackFor = Exception.class)
    public void saveOpinionFeedback(String suggestUserId,String suggestUserName,String suggestUserPhone,String suggestDescribe,Integer userType,String suggestImgUrl,Integer feedBackType){
        BaseOpinionFeedBackEntity entity = new BaseOpinionFeedBackEntity();
        entity.setSuggestUserId(suggestUserId);
        entity.setSuggestUserName(suggestUserName);
        entity.setSuggestDescribe(suggestDescribe);
        entity.setUserType(userType);
        entity.setSuggestUserPhone(suggestUserPhone);
        entity.setSuggestStatus(0);
        entity.setCreateTime(new Date());
        entity.setFeedbackType(feedBackType);
        if (StringUtils.isNotBlank(suggestImgUrl))entity.setSuggestImgUrl(suggestImgUrl);
        baseOpinionFeedbackDao.save(entity);
    }
    public JSONObject findUserOpinioneFeedback(String suggestUserId,String id,Integer page,Integer pageSize){
        String sql = "select <word> from base_opinion_feedback where 1=1 ";
        String sqlTotal = "select count(id) from base_opinion_feedback where 1=1 ";
        JSONObject result = new JSONObject();
        if (StringUtils.isNotBlank(id)){
            sql = sql.replace("<word>","id,suggest_user_id as suggestUserId,suggest_user_name as suggestUserName,user_type as userType,feedback_type as feedbackType,suggest_describe as suggestDescribe,suggest_user_phone as suggestUserPhone,suggest_status as suggestStatus,create_time as createTime,manager_res as managerRes,reply_time as replyTime,suggest_img_url as suggestImgUrl");
            sql+=" and id = '"+id+"'";
        }else {
            sql = sql.replace("<word>","id,suggest_describe as suggestDescribe ,suggest_status as suggestStatus ,create_time as createTime ");
            sql+="and suggest_user_id = '"+suggestUserId+"' ";
            sqlTotal+=" and suggest_user_id = '"+suggestUserId+"' ";
            sql+= " order by create_time DESC limit "+page+","+pageSize+" ";
        }
        Integer integer = jdbcTemplate.queryForObject(sqlTotal, Integer.class);
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        result.put("total",integer);
        result.put("data",list);
        return result;
    }
}

+ 12 - 0
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/channel/DailyReportService.java

@ -72,6 +72,10 @@ public class DailyReportService {
    private Logger logger= LoggerFactory.getLogger(DailyReportService.class);
    public void dailyReportRemind() throws Exception {
        Date date = new Date();
        if (DateUtil.isHoliday(date)){
            return;
        }
        List<BaseDoctorDO> doctorDOList = doctorDao.findByDel();
        String nowDate = DateUtil.getStringDateShort();
        for (BaseDoctorDO doctorDO:doctorDOList){
@ -98,6 +102,10 @@ public class DailyReportService {
     * @throws Exception
     */
    public void dailyReportWsbTotalRemind() throws Exception {
        Date date = new Date();
        if (DateUtil.isHoliday(date)){
            return;
        }
        String boosID = "0592008";//老板id
        String nowDate = DateUtil.getStringDateShort();
        List<BaseDoctorRoleDO> deptAdminRoleList = doctorRoleDao.findByRoleCode("deptAdmin");
@ -165,6 +173,10 @@ public class DailyReportService {
     * @throws Exception
     */
    public void dailyReportTotalRemind() throws Exception {
        Date date = new Date();
        if (DateUtil.isHoliday(date)){
            return;
        }
        String boosID = "0592008";//老板id
        String nowDate = DateUtil.getStringDateShort();
        List<BaseDoctorRoleDO> deptAdminRoleList = doctorRoleDao.findByRoleCode("deptAdmin");

+ 4 - 4
svr/svr-internet-hospital-job/src/main/resources/system.properties

@ -41,11 +41,11 @@ health_upload_weishangbao_remind_job=0 45 8 * * ? *
health_upload_total_remind_job=0 0 9 * * ? *
DailyReportRemindJob=0 50 17 ? * 2,3,4,5,6
DailyReportRemindJob=0 50 17 * * ? *
DailyReportRemindSecondJob=0 0 20 ? * 2,3,4,5,6
DailyReportRemindSecondJob=0 0 20 * * ? *
DailyReportTotalRemindJob=0 0 22 ? * 2,3,4,5,6
DailyReportTotalRemindJob=0 0 22 * * ? *
DailyReportWsbTotalRemindJob=0 0 21 ? * 2,3,4,5,6
DailyReportWsbTotalRemindJob=0 0 21 * * ? *

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

@ -149,6 +149,19 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @PostMapping(value = "thumbsUpDailyReport")
    @ApiOperation(value = "点赞员工日报")
    public ObjEnvelop thumbsUpDailyReport(@ApiParam(name = "id", value = "日报id")
                                         @RequestParam(value = "id", required = true) String id,
                                         @ApiParam(name = "niceWorkType", value = "点赞类型 取自字典")
                                         @RequestParam(value = "niceWorkType", required = true) Integer niceWorkType) {
        try {
            return success(dailyReportUploadService.thumbsUpDailyReport(id,niceWorkType));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @PostMapping(value = "verifiedDoubtItem")
    @ApiOperation(value = "核实每日报表疑虑")
    public ObjEnvelop verifiedDoubtItem(@ApiParam(name = "doctorId", value = "doctorId")
@ -188,8 +201,12 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getUrgingList")
    @ApiOperation(value = "查询催促记录列表")
    public ListEnvelop<BaseDailyUrgingRecordDO> getUrgingList(@ApiParam(name = "code", value = "催促记录code")
    @ApiOperation(value = "查询催促记录列表(本人+管辖人员)")
    public ListEnvelop<BaseDailyUrgingRecordDO> getUrgingList(@ApiParam(name = "user", value = "当前用户")
                                                              @RequestParam(value = "user", required = false) String user,
                                                              @ApiParam(name = "dept", value = "dept")
                                                              @RequestParam(value = "dept", required = false) String dept,
                                                              @ApiParam(name = "code", value = "催促记录code")
                                                              @RequestParam(value = "code", required = false) String code,
                                                              @ApiParam(name = "doctor", value = "催促对象")
                                                              @RequestParam(value = "doctor", required = false) String doctor,
@ -202,14 +219,14 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                                              @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));
            return ListEnvelop.getSuccess("success",dailyReportUploadService.getUrgingList(user,dept,code,doctor,reportId,createUser,startTime,endTime));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "getUrgingDetail")
    @ApiOperation(value = "查询催促记录列表")
    @ApiOperation(value = "查询催促记录详情")
    public ListEnvelop<BaseDailyUrgingRecordDO> getUrgingDetail(@ApiParam(name = "code", value = "催促记录code")
                                                              @RequestParam(value = "code", required = false) String code) {
        try {
@ -252,9 +269,11 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @GetMapping(value = "selectReportById")
    @ApiOperation(value = "根据id查看日报记录")
    public ObjEnvelop selectReportById(@ApiParam(name = "id", value = "日报id")
                                       @RequestParam(value = "id", required = true) String id) {
                                       @RequestParam(value = "id", required = true) String id,
                                        @ApiParam(name = "doctor", value = "doctor")
                                        @RequestParam(value = "id", required = false) String doctor) {
        try {
            BaseDailyReportUploadDO reportUploadDO = dailyReportUploadService.selectReportById(id);
            BaseDailyReportUploadDO reportUploadDO = dailyReportUploadService.selectReportById(doctor,id);
            return ObjEnvelop.getSuccess("success",reportUploadDO);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
@ -304,7 +323,7 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "医生首页")
    public ObjEnvelop selectDailyReportByRole(@ApiParam(name = "dept", value = "院级管理员无需传科室code")
                                        @RequestParam(value = "dept", required = false) String dept,
                                        @ApiParam(name = "level", value = "1院级管理员,2科室管理员")
                                        @ApiParam(name = "level", value = "1院级管理员,2科室管理员3员工")
                                        @RequestParam(value = "level", required = false) Integer level,
                                        @ApiParam(name = "doctorId", value = "医生id")
                                        @RequestParam(value = "doctorId", required = false) String doctorId) {
@ -316,6 +335,8 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "selectHeaderList")
    @ApiOperation(value = "首页按照科室统计")
    public ListEnvelop selectHeaderList(@ApiParam(name = "dept", value = "科室code")
@ -390,8 +411,8 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @GetMapping(value = "selectListInfoByTotal")
    @ApiOperation(value = "获取列表的具体人员信息")
    public ListEnvelop selectListInfoByTotal(@ApiParam(name = "登录用户", value = "登录用户")
                                             @RequestParam(value = "登录用户", required = false) String user,
    public ListEnvelop selectListInfoByTotal(@ApiParam(name = "user", value = "登录用户")
                                             @RequestParam(value = "user", required = false) String user,
                                             @ApiParam(name = "dept", value = "科室code")
                                             @RequestParam(value = "dept", required = false) String dept,
                                             @ApiParam(name = "idType", value = "身份类别")
@ -416,6 +437,31 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "selectListInfoByTotal2")
    @ApiOperation(value = "工作核实、效能异常列表")
    public ListEnvelop selectListInfoByTotal2(@ApiParam(name = "user", value = "登录用户")
                                             @RequestParam(value = "user", required = false) String user,
                                             @ApiParam(name = "dept", value = "科室code")
                                             @RequestParam(value = "dept", required = false) String dept,
                                             @ApiParam(name = "state", value = "核实状态 0未核实 1已核实")
                                             @RequestParam(value = "state", required = false) String state,
                                             @ApiParam(name = "doubtState", value = "存疑0无存疑1存疑")
                                             @RequestParam(value = "doubtState", required = false) Integer doubtState,
                                             @ApiParam(name = "readState", value = "是否已读0未读1已读")
                                             @RequestParam(value = "readState", required = false) Integer readState,
                                             @ApiParam(name = "startDate", value = "开始时间")
                                             @RequestParam(value = "startDate", required = false) String startDate,
                                             @ApiParam(name = "endDate", value = "结束时间")
                                             @RequestParam(value = "endDate", required = false) String endDate,
                                             @ApiParam(name = "name", value = "具体医生姓名")
                                             @RequestParam(value = "name", required = false) String name) {
        try {
            return ListEnvelop.getSuccess("success",dailyReportUploadService.selectListInfoByTotal2(user,dept,state,startDate,endDate,name,doubtState,readState));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectListByTotalDoubt")
    @ApiOperation(value = "获取存疑列表的时间及数量")
    public ListEnvelop selectListByTotalDoubt(@ApiParam(name = "dept", value = "科室code")
@ -667,6 +713,8 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                      @RequestParam(value = "content", required = false) String content,
                                      @ApiParam(name = "state", value = "-1取消,0待办,1已完成")
                                      @RequestParam(value = "state", required = false) Integer state,
                                      @ApiParam(name = "dept", value = "部门code")
                                      @RequestParam(value = "dept", required = false) String dept,
                                      @ApiParam(name = "begin_time", value = "begin_time")
                                      @RequestParam(value = "begin_time", required = false) String begin_time,
                                      @ApiParam(name = "end_time", value = "end_time")
@ -676,7 +724,7 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
                                      @ApiParam(name = "createUserName", value = "createUserName")
                                      @RequestParam(value = "createUserName", required = false) String createUserName) {
        try {
            List<BaseDailyReportItemDO> list = dailyReportUploadService.findReportItemListAdmin(user,projectCode,title,content,state,begin_time,end_time,createUser,createUserName);
            List<BaseDailyReportItemDO> list = dailyReportUploadService.findReportItemListAdmin(user,projectCode,title,content,state,begin_time,end_time,createUser,createUserName,dept);
            return ListEnvelop.getSuccess("success",list);
        } catch (Exception e) {
            return failedListEnvelopException(e);
@ -836,6 +884,16 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @PostMapping(value = "initItemMembers")
    @ApiOperation(value = "初始化项目成员员工")
    public Envelop initItemMembers() {
        try {
            return Envelop.getSuccess(dailyReportUploadService.initItemMembers());
        } catch (Exception e) {
            return failedException(e);
        }
    }
    @RequestMapping(value = "excelControl/getProjectItemReport", method = RequestMethod.GET)
    @ApiOperation("导出项目计划周报月报用时情况")
    public Envelop getProjectItemReport(@ApiParam(name = "user", value = "user")
@ -1034,4 +1092,50 @@ public class DailyReportUploadPoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "weekReportHeaderInfo")
    @ApiOperation(value = "周效能头部信息")
    public ObjEnvelop weekReportHeaderInfo(@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.weekReportHeaderInfo(user,projectCode,item_id,dept,memberId,startDate,endDate));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "weekReportListInfo")
    @ApiOperation(value = "周效能列表信息")
    public ObjEnvelop weekReportListInfo(@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.weekReportListInfo(user,projectCode,item_id,dept,memberId,startDate,endDate));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
}

+ 8 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/service/consult/SysDictService.java

@ -7,6 +7,7 @@ import net.sf.json.JSONObject;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@ -19,6 +20,8 @@ public class SysDictService {
    private SysDictDao sysDictDao;
    @Autowired
    private HibenateUtils hibenateUtils;
    @Value("${spring.profiles}")
    private String profiles;
    /**
     * 新增&更新社区医生邀请专家配置
@ -91,6 +94,8 @@ public class SysDictService {
        Map<String,Object> params = new HashedMap();
        String sql ="SELECT " +
                " a.id AS \"id\", " +
                " a.saas_id AS \"saasId\", " +
                " a.py_code AS \"pyCode\", " +
                " a.dict_name AS \"dictName\", " +
                " a.dict_code AS \"dictCode\", " +
                " a.dict_value AS \"dictValue\" " +
@ -105,6 +110,9 @@ public class SysDictService {
            sql+=" AND a.dict_name =:dictName";
            params.put("dictName",dictName);
        }
        if ("ZjxlProd".equals(profiles)){//日报字典排序
            sql +=" order by a.saas_id asc, a.py_code asc,a.sort asc ";
        }
        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, params);
        return  list;
    }