| 
					
				 | 
			
			
				@ -1,5 +1,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.service.channel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.dailyReport.dao.BaseDailyReportDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.dailyReport.dao.BaseDailyReportUploadDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.doctor.dao.BaseDoctorDao; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -30,9 +31,8 @@ import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.jdbc.core.JdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by Bing on 2022/7/26. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -259,4 +259,119 @@ public class DailyReportService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void dailyReportMonth(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String 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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            boosID = boosSenderIds.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql = "select id,name,mobile from base_doctor where del=1 and identity=0 and id<>'"+boosID+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String,Object>> patientList = jdbcTemplate.queryForList(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Date lastMonth= DateUtil.getNextMonthReturnDate(new Date(),-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String monthStartDay = DateUtil.getFristDayOfMonthThisDate(lastMonth); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String monthEndDay = DateUtil.getLastDayOfMonthThisDate(lastMonth); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        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){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            doubtTypeObj = JSONObject.parseObject(dictValues.get(0)).getJSONObject("dailyReportDoubtTypeName"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String monthStr = DateUtil.dateToStr(lastMonth,"MM"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (Map<String,Object>tmp:patientList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String msg = "{name},{month}月份月报:效能异常:{doubtTotal}次,请假:{leaveHour}个小时,未上报:{weishangbao}次,{doubtTypeMsg},项目催促:{xmcc}次,效能异常超过3次扣绩效! "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String user = tmp.get("id").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String name = null==tmp.get("name")?"":tmp.get("name").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String mobile = null==tmp.get("mobile")?"":tmp.get("mobile").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //效能异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           sql = "select count(distinct d1.id)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+"' and d1.report_date>='"+monthStartDay+"' and d1.report_date<='"+monthEndDay+"'  and de.doubt=1 "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           Integer doubtTotal = jdbcTemplate.queryForObject(sql,Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (doubtTotal>3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //请假 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Double leaveHour = 0d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = " select sum(cast(IFNULL(leave_hour,IFNULL(leave_hour,0)) as decimal(18,2))) from base_doctor_daily_report_upload up where up.doctor_id='"+user+"' and up.report_date>='"+monthStartDay+"' and up.report_date<='"+monthEndDay+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            leaveHour = jdbcTemplate.queryForObject(sql,Double.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            leaveHour = null==leaveHour?0:leaveHour; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //未上报 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Long weishangbao=0l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Long workDays=0l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isNotBlank(monthStartDay)&&StringUtils.isNotBlank(monthEndDay)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                workDays = DateUtil.getWorkDays(monthStartDay, monthEndDay); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = " select count(id) from base_doctor_daily_report_upload up where up.doctor_id='"+user+"' and up.report_date>='"+monthStartDay+"' and up.report_date<='"+monthEndDay+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Long yishangbao = jdbcTemplate.queryForObject(sql,Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            weishangbao = (workDays-yishangbao)<0?0:workDays-yishangbao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = " select count(distinct up.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 and up.state=1 where 1=1 " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    " and doc.id='"+user+"' and up.report_date>='"+monthStartDay+"' and up.report_date<='"+monthEndDay+"'  group by rd.doubt_type"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<Map<String,Object>> doubtTypeList = jdbcTemplate.queryForList(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<Map<String,Object>> personDoubtList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Map<String,Object>doubtTmp:doubtTypeList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (doubtTmp.get("doubt_type")==null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    String doubtType = doubtTmp.get("doubt_type").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(doubtTypeObj.containsKey(doubtType)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        doubtTmp.put("doubtTypeName",doubtTypeObj.get(doubtType)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        doubtTmp.put("doubtTypeName","其他"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    personDoubtList.add(doubtTmp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<String> doubtListStr = personDoubtList.stream().map(e -> e.get("doubt_type").toString()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (String key:doubtTypeObj.keySet()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (!doubtListStr.contains(key)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    Map<String,Object>doubtTmp = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    doubtTmp.put("doubt_type",key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    doubtTmp.put("doubtTypeName",doubtTypeObj.get(key)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    doubtTmp.put("total",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    personDoubtList.add(doubtTmp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            personDoubtList.sort((Comparator.comparing(e->e.get("doubt_type").toString()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<String> doubtTypeMsgs = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Map<String,Object> personDoubt:personDoubtList ){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String doubtName = personDoubt.get("doubtTypeName").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String total = personDoubt.get("total").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                doubtTypeMsgs.add(doubtName+total+"次"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String doubtTypeMsg = doubtTypeMsgs.stream().map(String::valueOf).collect(Collectors.joining(",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //项目催促 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Integer xmcc=0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = " select count(id) from base_daily_urging_record where receive_doctor='"+user+"' and create_time>='"+monthStartDay +" 00:00:00' and create_time<='"+monthEndDay+" 23:59:59' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            xmcc = jdbcTemplate.queryForObject(sql,Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId, mobile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (enterpriseUserDO == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    logger.info("该用户" + name + "没有企业微信手机号,无法推送模版消息,用户ID:" + user + "wechatId:" + wechatId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    String title = "月报反馈"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    String des = msg.replace("{name}",name).replace("{name}",name).replace("{month}",monthStr+"") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            .replace("{doubtTotal}",doubtTotal+"").replace("{leaveHour}",leaveHour+"") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            .replace("{weishangbao}",weishangbao+"").replace("{doubtTypeMsg}",doubtTypeMsg).replace("{xmcc}",xmcc+""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    logger.info(des); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/home/index"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    String res = enterpriseService.sendTWMesByDoctor(wechatId, user, title, des, url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |