|
@ -1,8 +1,8 @@
|
|
|
package com.yihu.jw.dailyReport.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
|
|
|
import com.yihu.jw.dailyReport.dao.*;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
|
|
@ -10,9 +10,6 @@ import com.yihu.jw.doctor.dao.BaseDoctorRoleDao;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
|
|
|
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
|
|
|
import com.yihu.jw.entity.base.wx.WxPushLogDO;
|
|
|
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
|
|
|
import com.yihu.jw.entity.dailyReport.*;
|
|
|
import com.yihu.jw.entity.healthUpload.BaseDoctorMemberDO;
|
|
|
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
|
|
@ -31,20 +28,12 @@ import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
|
|
|
import com.yihu.jw.wechat.enterprise.EnterpriseService;
|
|
|
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseUserDao;
|
|
|
import com.yihu.jw.wechat.service.WxAccessTokenService;
|
|
|
import jxl.Workbook;
|
|
|
import jxl.write.*;
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.util.WorkbookUtil;
|
|
|
import org.jsoup.Jsoup;
|
|
|
import org.jsoup.nodes.Document;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
@ -368,35 +357,53 @@ public class DailyReportUploadService {
|
|
|
dailyReportUploadDO.setLeaveHour(leaveHour);
|
|
|
dailyReportUploadDO.setTotalHour(totalHour);
|
|
|
dailyReportUploadDO = dailyReportUploadDao.save(dailyReportUploadDO);
|
|
|
if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
|
|
|
|
|
|
}else {
|
|
|
throw new Exception("您不是部门人员,无法上传日报信息");
|
|
|
}
|
|
|
|
|
|
for (BaseDailyReportDetailDO tmp :detailDOList){
|
|
|
tmp.setReportId(dailyReportUploadDO.getId());
|
|
|
if (tmp.isReportItemFlag()==true){//新则自建关联项目
|
|
|
String title = tmp.getReportItemTitle();
|
|
|
BaseDailyReportItemDO reportItemDO = new BaseDailyReportItemDO();
|
|
|
reportItemDO.setState(0);
|
|
|
reportItemDO.setDel(1);
|
|
|
reportItemDO.setProjectCode(tmp.getProjectCode());
|
|
|
reportItemDO.setProjectName(tmp.getProjectName());
|
|
|
reportItemDO.setTitle(title);
|
|
|
reportItemDO.setContent(tmp.getReportContent());
|
|
|
reportItemDO.setBeginTime(null);
|
|
|
reportItemDO.setEndTime(null);
|
|
|
reportItemDO.setCreateTime(new Date());
|
|
|
reportItemDO.setCreateUser(doctorId);
|
|
|
reportItemDO.setCreateUserName(doctorDO.getName());
|
|
|
if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
|
|
|
reportItemDO.setDept(doctorHospitalDOS.get(0).getDeptCode());
|
|
|
reportItemDO.setDeptName(doctorHospitalDOS.get(0).getDeptName());
|
|
|
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 {
|
|
|
reportItemDO = new BaseDailyReportItemDO();
|
|
|
reportItemDO.setState(0);
|
|
|
reportItemDO.setDel(1);
|
|
|
reportItemDO.setProjectCode(tmp.getProjectCode());
|
|
|
reportItemDO.setProjectName(tmp.getProjectName());
|
|
|
reportItemDO.setTitle(title);
|
|
|
reportItemDO.setContent(tmp.getReportContent());
|
|
|
reportItemDO.setBeginTime(null);
|
|
|
reportItemDO.setEndTime(null);
|
|
|
reportItemDO.setCreateTime(new Date());
|
|
|
reportItemDO.setCreateUser(doctorId);
|
|
|
reportItemDO.setCreateUserName(doctorDO.getName());
|
|
|
|
|
|
if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
|
|
|
reportItemDO.setDept(doctorHospitalDOS.get(0).getDeptCode());
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
reportItemDO = reportItemDao.save(reportItemDO);
|
|
|
|
|
|
BaseDailyReportItemMembersDO membersDOTmp = new BaseDailyReportItemMembersDO();
|
|
|
membersDOTmp.setReportItemId(reportItemDO.getId());
|
|
|
membersDOTmp.setUserId(doctorId);
|
|
|
membersDOTmp.setUserName(doctorDO.getName());
|
|
|
membersDOTmp.setDel(1);
|
|
|
reportItemMembersDao.save(membersDOTmp);
|
|
|
tmp.setReportItemId(reportItemDO.getId());
|
|
|
tmp.setReportItemName(title);
|
|
|
}
|
|
@ -963,7 +970,7 @@ public class DailyReportUploadService {
|
|
|
logger.info("deptSql=="+deptSql);
|
|
|
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(deptSql);
|
|
|
for (Map<String,Object> deptMap:mapList){
|
|
|
String day = DateUtil.getWorkDays(endDate, startDate)+"";
|
|
|
String day = DateUtil.getWorkDays(startDate, endDate)+"";
|
|
|
Integer doctorTotal = 0;
|
|
|
Integer total=0;
|
|
|
Integer yishangbaoTotal=0;
|
|
@ -975,16 +982,12 @@ public class DailyReportUploadService {
|
|
|
if (deptMap.get("doctorTotal")!=null){
|
|
|
doctorTotal = Integer.parseInt(deptMap.get("doctorTotal").toString());
|
|
|
//总人次
|
|
|
if (!day.equalsIgnoreCase("0")) {
|
|
|
total = doctorTotal * (Integer.parseInt(day)+1);
|
|
|
} else {
|
|
|
total = doctorTotal;
|
|
|
}
|
|
|
total = doctorTotal * (Integer.parseInt(day));
|
|
|
}
|
|
|
if (deptMap.get("yishangbaoTotal")!=null) {
|
|
|
yishangbaoTotal = Integer.parseInt(deptMap.get("yishangbaoTotal").toString());
|
|
|
}
|
|
|
weishangbaoTotal = total-yishangbaoTotal;
|
|
|
weishangbaoTotal = total-yishangbaoTotal>0?total-yishangbaoTotal:0;
|
|
|
if (deptMap.get("notVerified")!=null) {
|
|
|
notVerified = Integer.parseInt(deptMap.get("notVerified").toString());
|
|
|
}
|
|
@ -1556,7 +1559,7 @@ public class DailyReportUploadService {
|
|
|
startDate = DateUtil.getFristDayOfMonth();
|
|
|
endDate = DateUtil.getLastDayOfMonth();
|
|
|
}
|
|
|
String day = DateUtil.getWorkDays(endDate, startDate)+"";
|
|
|
String day = DateUtil.getWorkDays(startDate, endDate)+"";
|
|
|
String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and d.identity=0 ";
|
|
|
Integer total = 0;//总人次
|
|
|
String sqlCondition = "";
|
|
@ -1576,11 +1579,7 @@ public class DailyReportUploadService {
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(doctorTotal)) {
|
|
|
//总人次
|
|
|
if (!day.equalsIgnoreCase("0")) {
|
|
|
total = Integer.parseInt(doctorTotal) * (Integer.parseInt(day)+1);
|
|
|
} else {
|
|
|
total = Integer.parseInt(doctorTotal);
|
|
|
}
|
|
|
total = Integer.parseInt(doctorTotal) * (Integer.parseInt(day));
|
|
|
}
|
|
|
Integer yishangbaoTotal = 0;
|
|
|
Integer weishangbaoTotal = 0;
|
|
@ -1596,7 +1595,7 @@ public class DailyReportUploadService {
|
|
|
}
|
|
|
}
|
|
|
//未上报
|
|
|
weishangbaoTotal = total - yishangbaoTotal;
|
|
|
weishangbaoTotal = total - yishangbaoTotal>0?total - yishangbaoTotal:0;
|
|
|
|
|
|
//上传总次数
|
|
|
Integer shangchuanTotal = 0;
|
|
@ -1706,7 +1705,7 @@ public class DailyReportUploadService {
|
|
|
*/
|
|
|
public JSONObject selectHeaderTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
|
|
|
JSONObject object = new JSONObject();
|
|
|
String day = DateUtil.getWorkDays(endDate, startDate)+"";
|
|
|
String day = DateUtil.getWorkDays(startDate, endDate)+"";
|
|
|
|
|
|
String doctorSql = " select COUNT(1) as \"total\" from base_doctor d where d.del=1 and d.identity=0 ";
|
|
|
Integer total = 0;//总人次
|
|
@ -1740,11 +1739,7 @@ public class DailyReportUploadService {
|
|
|
|
|
|
Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql,Integer.class);
|
|
|
|
|
|
if (!day.equalsIgnoreCase("0")) {
|
|
|
total = doctorTotal * (Integer.parseInt(day)+1);
|
|
|
} else {//当天
|
|
|
total = doctorTotal;
|
|
|
}
|
|
|
total = doctorTotal * (Integer.parseInt(day));
|
|
|
|
|
|
Integer yishangbaoTotal=0;//上传人数
|
|
|
Integer weishangbaoTotal=0;//未上报
|
|
@ -1772,7 +1767,7 @@ public class DailyReportUploadService {
|
|
|
|
|
|
yishangbaoTotal = jdbcTemplate.queryForObject(sql,Integer.class);
|
|
|
//未上报
|
|
|
weishangbaoTotal = total - yishangbaoTotal;
|
|
|
weishangbaoTotal = total - yishangbaoTotal>0?total - yishangbaoTotal:0;
|
|
|
|
|
|
|
|
|
String shangchuanTotalSql = "select COUNT(1) as \"total\" from base_doctor_daily_report_upload d where 1=1 ";
|
|
@ -1863,7 +1858,18 @@ public class DailyReportUploadService {
|
|
|
if (null==doctorDO){
|
|
|
throw new Exception("用户不存在无权操作");
|
|
|
}
|
|
|
BaseDailyReportItemDO reportItemDO = new BaseDailyReportItemDO();
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = baseDoctorHospitalDao.findByDoctorCode(user);
|
|
|
if (null !=doctorHospitalDOs&&doctorHospitalDOs.size()!=0){
|
|
|
|
|
|
}else {
|
|
|
throw new Exception("您不是部门人员,无法创建");
|
|
|
}
|
|
|
BaseDailyReportItemDO reportItemDO = reportItemDao.findByTitleAndDeptAndProjectCode(title,doctorHospitalDOs.get(0).getDeptCode(),projectCode);
|
|
|
if (reportItemDO!=null){
|
|
|
throw new Exception("该项目已存在,不可创建");
|
|
|
}else {
|
|
|
reportItemDO = new BaseDailyReportItemDO();
|
|
|
}
|
|
|
reportItemDO.setState(0);
|
|
|
reportItemDO.setDel(1);
|
|
|
reportItemDO.setProjectCode(projectCode);
|
|
@ -1875,7 +1881,7 @@ public class DailyReportUploadService {
|
|
|
reportItemDO.setCreateTime(new Date());
|
|
|
reportItemDO.setCreateUser(user);
|
|
|
reportItemDO.setCreateUserName(doctorDO.getName());
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = baseDoctorHospitalDao.findByDoctorCode(user);
|
|
|
|
|
|
if (null !=doctorHospitalDOs&&doctorHospitalDOs.size()!=0){
|
|
|
reportItemDO.setDept(doctorHospitalDOs.get(0).getDeptCode());
|
|
|
reportItemDO.setDeptName(doctorHospitalDOs.get(0).getDeptName());
|
|
@ -1937,6 +1943,12 @@ public class DailyReportUploadService {
|
|
|
if (null==doctorDO){
|
|
|
throw new Exception("用户不存在无权操作");
|
|
|
}
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = baseDoctorHospitalDao.findByDoctorCode(user);
|
|
|
if (null !=doctorHospitalDOs&&doctorHospitalDOs.size()!=0){
|
|
|
|
|
|
}else {
|
|
|
throw new Exception("您不是部门人员,无法创建");
|
|
|
}
|
|
|
BaseDailyReportItemDO reportItemDO = reportItemDao.findOne(item_id);
|
|
|
if (null==reportItemDO){
|
|
|
throw new Exception("日报项目不存在");
|
|
@ -1944,6 +1956,12 @@ public class DailyReportUploadService {
|
|
|
if (1==reportItemDO.getState()){
|
|
|
throw new Exception("日报项目已完成无法修改");
|
|
|
}
|
|
|
sql = " select id from base_daily_report_item where title='"+title+"' and dept='"+doctorHospitalDOs.get(0).getDeptCode()+"' " +
|
|
|
" and project_code='"+projectCode+"' and id<>'"+item_id+"' ";
|
|
|
List<String> existList = jdbcTemplate.queryForList(sql,String.class);
|
|
|
if(existList.size()>0){
|
|
|
throw new Exception("该项目已存在,修改失败");
|
|
|
}
|
|
|
reportItemDO.setState(state);
|
|
|
reportItemDO.setDel(1);
|
|
|
reportItemDO.setProjectCode(projectCode);
|
|
@ -1955,7 +1973,6 @@ public class DailyReportUploadService {
|
|
|
reportItemDO.setUpdateTime(new Date());
|
|
|
reportItemDO.setUpdateUser(user);
|
|
|
reportItemDO.setUpdateUserName(doctorDO.getName());
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = baseDoctorHospitalDao.findByDoctorCode(user);
|
|
|
if (null !=doctorHospitalDOs&&doctorHospitalDOs.size()!=0){
|
|
|
reportItemDO.setDept(doctorHospitalDOs.get(0).getDeptCode());
|
|
|
reportItemDO.setDeptName(doctorHospitalDOs.get(0).getDeptName());
|
|
@ -2126,10 +2143,13 @@ public class DailyReportUploadService {
|
|
|
/**
|
|
|
* 员工获取所有日报项目
|
|
|
*/
|
|
|
public List<BaseDailyReportItemDO> findReportItemList(String user,String title,String content,Integer state,String begin_time,String end_time,String createUser,String createUserName) throws Exception {
|
|
|
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 " +
|
|
|
"where i.del=1 and mem.del=1 and mem.user_id='"+user+"' " ;
|
|
|
|
|
|
if (StringUtils.isNotBlank(projectCode)){
|
|
|
sql += " and i.project_code='"+projectCode+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(title)){
|
|
|
sql +=" and i.title like '%"+title+"%' ";
|
|
|
}
|
|
@ -2161,9 +2181,9 @@ public class DailyReportUploadService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 管理员日报项目统计
|
|
|
* 管理员日报项目统计一级
|
|
|
*/
|
|
|
public List<Map<String,Object>> statisticReportProjectList(String user, String projectCode,String startDate, String endDate) throws Exception {
|
|
|
public List<Map<String,Object>> statisticReportProjectList(String user, String projectCode,String startDate, String endDate,String dept,String member) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
@ -2180,33 +2200,73 @@ public class DailyReportUploadService {
|
|
|
if (StringUtils.isNotBlank(projectCode)){
|
|
|
sqlCondition += " and i.project_code='"+projectCode+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(dept)){//查询指定部门
|
|
|
sqlCondition += " and i.dept='"+dept+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(member)){//查询指定员工
|
|
|
sqlCondition += " and up.doctor_id='"+member+"' ";
|
|
|
}
|
|
|
String sqlList = " select dict.dict_code project_code,dict.dict_value projectName,IFNULL( A.completionHour,0) 'completionHour', " +
|
|
|
" IFNULL(A.doctorTotal,0) 'doctorTotal' 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, " +
|
|
|
" 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 and up.report_date>='2022-08-01' " +
|
|
|
" and up.report_date<='2022-08-13' where i.del=1 "+sqlCondition+" GROUP BY i.project_code )A " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where i.del=1 "+sqlCondition+" GROUP BY i.project_code )A " +
|
|
|
"on A.project_code = dict.dict_code where dict.dict_name='daily_report_project' ";
|
|
|
if (StringUtils.isNotBlank(projectCode)){
|
|
|
sqlList +=" and dict.dict_code='"+projectCode+"' ";
|
|
|
}
|
|
|
sqlList += " order by completionHour desc ";
|
|
|
sqlList += " order by sort, completionHour desc ";
|
|
|
return jdbcTemplate.queryForList(sqlList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 管理员日报项目统计二级
|
|
|
*/
|
|
|
public List<Map<String,Object>> statisticReportProjectDeptList(String user, String projectCode,String startDate, String endDate,String dept,String member) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
|
throw new Exception("您无权限操作");
|
|
|
}
|
|
|
String 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 i.dept='"+dept+"' ";
|
|
|
}
|
|
|
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, " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where i.del=1 "+sqlCondition+" GROUP BY i.project_code,i.dept ";
|
|
|
|
|
|
sqlList += " order by completionHour desc ";
|
|
|
return jdbcTemplate.queryForList(sqlList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 管理员日报项目统计
|
|
|
* 管理员日报项目统计三级
|
|
|
*/
|
|
|
public PageEnvelop statisticReportItemList(String user, String projectCode,String title, String content, Integer state,
|
|
|
String startDate, String endDate, String createUser,String createUserName, Integer page, Integer size) throws Exception {
|
|
|
String startDate, String endDate, String createUser,String createUserName, Integer page, Integer size,
|
|
|
String dept,String member) throws Exception {
|
|
|
page = page>0?page-1:0;
|
|
|
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<>();
|
|
|
List<Map<String,Object>> itemDOS = new ArrayList<>();
|
|
|
String sqlCondition = " ";
|
|
|
String updateTimeSql="";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
@ -2215,10 +2275,18 @@ public class DailyReportUploadService {
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
updateTimeSql += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
String sqlList = " 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,count(distinct up.doctor_id) as doctorTotal " +
|
|
|
" from base_daily_report_item i LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id "+updateTimeSql+" where i.del=1 ";
|
|
|
if (StringUtils.isNotBlank(member)){
|
|
|
updateTimeSql += " and up.doctor_id='"+member+"' ";
|
|
|
}
|
|
|
|
|
|
String sqlList = " 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,IFNULL(A.completionHour,'0') completionHour ,IFNULL(A.doctorTotal,0) doctorTotal " +
|
|
|
" from base_daily_report_item i LEFT JOIN( " +
|
|
|
" select de.report_item_id,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour, " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal " +
|
|
|
" from base_daily_report_detail de Inner JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +updateTimeSql+
|
|
|
" group by de.report_item_id " +
|
|
|
" )A on i.id = A.report_item_id where i.del=1 ";
|
|
|
String sqlCount = " select count(distinct i.id) from base_daily_report_item i where i.del=1 ";
|
|
|
if (StringUtils.isNotBlank(title)){
|
|
|
sqlCondition +=" and i.title like '%"+title+"%' ";
|
|
@ -2238,59 +2306,120 @@ public class DailyReportUploadService {
|
|
|
if (StringUtils.isNotBlank(projectCode)){
|
|
|
sqlCondition += " and i.project_code='"+projectCode+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(dept)){//查询指定部门
|
|
|
sqlCondition += " and i.dept='"+dept+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(member)){
|
|
|
sqlCondition += " and exists (select 1 from base_daily_report_item_members mem where i.id =mem.report_item_id and mem.user_id='"+member+"' and mem.del=1 )";
|
|
|
}
|
|
|
|
|
|
sqlList +=sqlCondition+ " group by i.id order by i.create_time,i.id desc limit "+page*size+","+size;
|
|
|
itemDOS = jdbcTemplate.query(sqlList,new BeanPropertyRowMapper<>(BaseDailyReportItemDO.class));
|
|
|
itemDOS = jdbcTemplate.queryForList(sqlList);
|
|
|
Long count = jdbcTemplate.queryForObject(sqlCount+sqlCondition,Long.class);
|
|
|
return PageEnvelop.getSuccessListWithPage("查询成功",itemDOS,page,size,count);
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> statisticReportItemById(String user,String item_id,Integer type) throws Exception {
|
|
|
public List<Map<String,Object>> statisticReportItemById(String user,String item_id,Integer type,String startDate,String endDate,
|
|
|
String dept,String member) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
|
throw new Exception("您无权限操作");
|
|
|
}
|
|
|
String updateTimeSql = " ";
|
|
|
String itemSql = " ";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
|
updateTimeSql += " and up.report_date>='"+startDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
updateTimeSql += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(member)){
|
|
|
updateTimeSql += " and up.doctor_id='"+member+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(dept)){
|
|
|
itemSql += " and i.dept='"+dept+"' ";
|
|
|
}
|
|
|
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', " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +
|
|
|
"where 1=1 and i.id='"+item_id+"' " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +itemSql+
|
|
|
"group by i.id,DATE_FORMAT(de.create_time,'%Y-%m-%d') order by time asc ";
|
|
|
}else if (2==type){//按周
|
|
|
sql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
|
|
|
" CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m-%d') as 'time', " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +
|
|
|
"where 1=1 and i.id='"+item_id+"' " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +itemSql+
|
|
|
"group by i.id,DATE_FORMAT(de.create_time,'%Y%v') order by time asc ";
|
|
|
}else if (3==type){//月
|
|
|
sql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime,i.end_time endTime,i.create_user_name createUserName, " +
|
|
|
" CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour,DATE_FORMAT(de.create_time,'%Y-%m') as 'time', " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal from base_daily_report_item i LEFT JOIN base_daily_report_detail de " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +
|
|
|
"where 1=1 and i.id='"+item_id+"' " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +itemSql+
|
|
|
"group by i.id,DATE_FORMAT(de.create_time,'%Y-%m') order by time asc ";
|
|
|
}else {
|
|
|
throw new Exception("查询失败,请检查传入参数");
|
|
|
}
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
//计算平均值和占比
|
|
|
if (list.size()>0){
|
|
|
Set<String> resultTimeList = new HashSet<>();
|
|
|
Date startDateTmp = DateUtil.strToDate(startDate);
|
|
|
Date endDateTmp = DateUtil.strToDate(endDate);
|
|
|
if (type==1){
|
|
|
for (;!startDateTmp.after(endDateTmp);){
|
|
|
resultTimeList.add(DateUtil.dateToStr(startDateTmp,DateUtil.YYYY_MM_DD));
|
|
|
startDateTmp = DateUtil.getNextDay1(startDateTmp,1);
|
|
|
}
|
|
|
} else if (type==2) {
|
|
|
for (;!startDateTmp.after(endDateTmp);){
|
|
|
resultTimeList.add(DateUtil.getSundayOfThisWeek(startDateTmp));
|
|
|
startDateTmp = DateUtil.getNextWeek(startDateTmp,1);
|
|
|
}
|
|
|
}else if (type==3){
|
|
|
for (;!startDateTmp.after(endDateTmp);){
|
|
|
resultTimeList.add(DateUtil.dateToStr(startDateTmp,DateUtil.YYYY_MM));
|
|
|
startDateTmp = DateUtil.getNextMonthReturnDate(startDateTmp,1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
OptionalDouble avg = list.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).average();
|
|
|
Double totalHour = list.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).sum();
|
|
|
Double avgValue = avg.getAsDouble();
|
|
|
for (Map<String,Object>tmp :list){
|
|
|
Iterator<Map<String,Object>> it = list.iterator();
|
|
|
//计算平均值和占比
|
|
|
while (it.hasNext()){
|
|
|
Map<String, Object> tmp = it.next();
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
Double completionHour = Double.valueOf(tmp.get("completionHour").toString());
|
|
|
tmp.put("timeRange",getRangeDouble(completionHour,totalHour));
|
|
|
if(2==type){//获取周的最后一天
|
|
|
String time = tmp.get("time").toString();
|
|
|
String sunday = DateUtil.getSundayOfThisWeek(DateUtil.strToDate(time));
|
|
|
tmp.put("time",sunday);
|
|
|
}
|
|
|
String tmpTime = tmp.get("time").toString();
|
|
|
if (resultTimeList.contains(tmpTime)){
|
|
|
resultTimeList.remove(tmpTime);
|
|
|
}
|
|
|
}
|
|
|
for (String tmpTime:resultTimeList){
|
|
|
Map<String, Object> tmp = new HashMap<>();
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
tmp.put("time",tmpTime);
|
|
|
tmp.put("completionHour","0");
|
|
|
tmp.put("doctorTotal","0");
|
|
|
list.add(tmp);
|
|
|
}
|
|
|
list.sort(Comparator.comparing(obj -> obj.get("time").toString()));
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> statisticReportItemMembersById(String user,String item_id,Integer type,String member) throws Exception {
|
|
|
public List<Map<String,Object>> statisticReportItemMembersById(String user,String item_id,Integer type,String member,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){
|
|
@ -2300,50 +2429,85 @@ public class DailyReportUploadService {
|
|
|
if (StringUtils.isNotBlank(member)){
|
|
|
memberSql = " and up.doctor_id='"+member+"' ";
|
|
|
}
|
|
|
String updateTimeSql = " ";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
|
updateTimeSql += " and up.report_date>='"+startDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
updateTimeSql += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
|
|
|
String searchTimeFormat = "";
|
|
|
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'," +
|
|
|
" 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 " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +memberSql+
|
|
|
"group by i.id,up.doctor_id order by completionHour desc ";
|
|
|
searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}
|
|
|
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', " +
|
|
|
"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 " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +
|
|
|
"group by i.id,up.doctor_id,DATE_FORMAT(de.create_time,'%Y-%m-%d') order by time asc ";
|
|
|
"group by i.id,up.doctor_id order by time asc ";
|
|
|
searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
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', " +
|
|
|
"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 " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +memberSql+
|
|
|
"group by i.id,up.doctor_id,DATE_FORMAT(de.create_time,'%Y%v') order by time asc ";
|
|
|
"group by i.id,up.doctor_id order by time asc ";
|
|
|
searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
|
|
|
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', " +
|
|
|
"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 " +
|
|
|
"on i.id = de.report_item_id INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +updateTimeSql+
|
|
|
"where 1=1 and i.id='"+item_id+"' " +memberSql+
|
|
|
"group by i.id,up.doctor_id,DATE_FORMAT(de.create_time,'%Y-%m') order by time asc ";
|
|
|
"group by i.id,up.doctor_id order by time asc ";
|
|
|
searchTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m') ";
|
|
|
}else {
|
|
|
throw new Exception("查询失败,请检查传入参数");
|
|
|
}
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
//计算平均值和占比
|
|
|
if (list.size()>0){
|
|
|
|
|
|
Set<String> resultTimeList = new HashSet<>();
|
|
|
Date startDateTmp = DateUtil.strToDate(startDate);
|
|
|
Date endDateTmp = DateUtil.strToDate(endDate);
|
|
|
if (type==1){
|
|
|
for (;!startDateTmp.after(endDateTmp);){
|
|
|
resultTimeList.add(DateUtil.dateToStr(startDateTmp,DateUtil.YYYY_MM_DD));
|
|
|
startDateTmp = DateUtil.getNextDay1(startDateTmp,1);
|
|
|
}
|
|
|
} else if (type==2) {
|
|
|
for (;!startDateTmp.after(endDateTmp);){
|
|
|
startDateTmp = DateUtil.strToDate(DateUtil.getSundayOfThisWeek(startDateTmp));
|
|
|
resultTimeList.add(DateUtil.getSundayOfThisWeek(startDateTmp));
|
|
|
startDateTmp = DateUtil.getNextWeek(startDateTmp,1);
|
|
|
}
|
|
|
}else if (type==3){
|
|
|
for (;!startDateTmp.after(endDateTmp);){
|
|
|
resultTimeList.add(DateUtil.dateToStr(startDateTmp,DateUtil.YYYY_MM));
|
|
|
startDateTmp = DateUtil.getNextMonthReturnDate(startDateTmp,1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
OptionalDouble avg = list.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).average();
|
|
|
Double totalHour = list.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).sum();
|
|
|
Double avgValue = avg.getAsDouble();
|
|
@ -2351,14 +2515,33 @@ public class DailyReportUploadService {
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
Double completionHour = Double.valueOf(tmp.get("completionHour").toString());
|
|
|
tmp.put("timeRange",getRangeDouble(completionHour,totalHour));
|
|
|
String searchTime =tmp.get("searchTime").toString();
|
|
|
String doctorId = tmp.get("doctor_id").toString();
|
|
|
sql = " select up.doctor_name,up.report_date,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour " +
|
|
|
" from base_daily_report_detail de INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +
|
|
|
"where de.report_item_id='"+item_id+"' and up.doctor_id='"+doctorId+"' " +
|
|
|
"and "+searchTimeFormat+"='"+searchTime+"' " +
|
|
|
"GROUP BY up.report_date ORDER BY up.report_date asc ";
|
|
|
sql = " select up.doctor_name,"+uploadTimeFormat+" as report_date ,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour " +
|
|
|
" from base_daily_report_detail de INNER JOIN base_doctor_daily_report_upload up on de.report_id = up.id " +updateTimeSql+
|
|
|
"where de.report_item_id='"+item_id+"' and up.doctor_id='"+doctorId+"' " +
|
|
|
"GROUP BY "+searchTimeFormat+" ORDER BY report_date asc ";
|
|
|
List<Map<String,Object>> timeUseList = jdbcTemplate.queryForList(sql);
|
|
|
Set searchTimeList = new HashSet();
|
|
|
for (Map<String,Object>timeUseTmp :timeUseList){
|
|
|
if (2==type){
|
|
|
String time = timeUseTmp.get("report_date").toString();
|
|
|
String sunday = DateUtil.getSundayOfThisWeek(DateUtil.strToDate(time));
|
|
|
timeUseTmp.put("report_date",sunday);
|
|
|
}
|
|
|
String time = timeUseTmp.get("report_date").toString();
|
|
|
searchTimeList.add(time);
|
|
|
}
|
|
|
if (type!=0){
|
|
|
for (String tmpTime:resultTimeList){
|
|
|
if (!searchTimeList.contains(tmpTime)){
|
|
|
Map<String,Object> mapTmp = new HashMap<>();
|
|
|
mapTmp.put("report_date",tmpTime);
|
|
|
mapTmp.put("completionHour",0);
|
|
|
timeUseList.add(mapTmp);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
timeUseList.sort(Comparator.comparing(obj -> obj.get("report_date").toString()));
|
|
|
tmp.put("timeUseList",timeUseList);
|
|
|
}
|
|
|
|
|
@ -2367,6 +2550,273 @@ public class DailyReportUploadService {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取某个部门的项目趋势图一级
|
|
|
*/
|
|
|
public List<Map<String,Object>> statisticDeptProjectTrend(String user,String dept,String startDate,String endDate,Integer type) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
|
throw new Exception("您无权限操作");
|
|
|
}
|
|
|
String sqlCondition = " ";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
|
sqlCondition += " and up.report_date>='"+startDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
sqlCondition += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
String groupTimeFormat = "";
|
|
|
String uploadTimeFormat = "";
|
|
|
if(0==type){//全部
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(1==type){//日
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(2==type){//周
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}
|
|
|
else if(3==type){//月
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m') ";
|
|
|
}else {
|
|
|
throw new Exception("查询失败,请检查传入参数");
|
|
|
}
|
|
|
String projectSql = " select dict.dict_code project_code,dict.dict_value projectName " +
|
|
|
" from wlyy_hospital_sys_dict dict INNER JOIN base_daily_report_item i on i.project_code = dict.dict_code " +
|
|
|
" where dict.dict_name='daily_report_project' and i.dept='"+dept+"'" +
|
|
|
"GROUP BY dict.dict_code ";
|
|
|
List<Map<String,Object>> deptProjectList = jdbcTemplate.queryForList(projectSql);
|
|
|
String sqlList = " select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour, " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
|
|
|
" from base_daily_report_item i LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where i.del=1 and i.dept='"+dept+"' and i.project_code='{project_code}' "+sqlCondition+
|
|
|
" GROUP BY "+groupTimeFormat+" order by time asc";
|
|
|
for (Map<String,Object>tmp:deptProjectList){
|
|
|
String project_code = tmp.get("project_code").toString();
|
|
|
List<Map<String,Object>> useTimeList = jdbcTemplate.queryForList(sqlList.replace("{project_code}",project_code));
|
|
|
if (useTimeList.size()>0){
|
|
|
OptionalDouble avg = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).average();
|
|
|
Double totalHour = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).sum();
|
|
|
Double avgValue = avg.getAsDouble();
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
tmp.put("totalHour",totalHour);
|
|
|
if(2==type){//获取周的最后一天
|
|
|
for (Map<String,Object>useTimeTmp :useTimeList){
|
|
|
String time = useTimeTmp.get("time").toString();
|
|
|
String sunday = DateUtil.getSundayOfThisWeek(DateUtil.strToDate(time));
|
|
|
useTimeTmp.put("time",sunday);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
tmp.put("useTimeList",useTimeList);
|
|
|
}
|
|
|
return deptProjectList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取某个部门的某个项目详情趋势图二级
|
|
|
*/
|
|
|
public List<Map<String,Object>> statisticDeptProjectItemTrend(String user,String dept,String projectCode,String startDate,String endDate,Integer type) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
|
throw new Exception("您无权限操作");
|
|
|
}
|
|
|
String sqlCondition = " ";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
|
sqlCondition += " and up.report_date>='"+startDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
sqlCondition += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
String groupTimeFormat = "";
|
|
|
String uploadTimeFormat = "";
|
|
|
if(0==type){//全部
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(1==type){//日
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(2==type){//周
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}
|
|
|
else if(3==type){//月
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m') ";
|
|
|
}else {
|
|
|
throw new Exception("查询失败,请检查传入参数");
|
|
|
}
|
|
|
String projectSql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime, " +
|
|
|
" i.end_time endTime, i.create_user_name createUserName " +
|
|
|
" from base_daily_report_item i where i.project_code='"+projectCode+"' and i.dept='"+dept+"' " +
|
|
|
" GROUP BY i.id ";
|
|
|
List<Map<String,Object>> deptProjectItemList = jdbcTemplate.queryForList(projectSql);
|
|
|
String sqlList = " select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour, " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
|
|
|
" from base_daily_report_item i LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where i.del=1 and i.dept='"+dept+"' and i.id='{itemId}' "+sqlCondition+
|
|
|
" GROUP BY "+groupTimeFormat+" order by time asc";
|
|
|
for (Map<String,Object>tmp:deptProjectItemList){
|
|
|
String itemId = tmp.get("id").toString();
|
|
|
List<Map<String,Object>> useTimeList = jdbcTemplate.queryForList(sqlList.replace("{itemId}",itemId));
|
|
|
if (useTimeList.size()>0){
|
|
|
OptionalDouble avg = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).average();
|
|
|
Double totalHour = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).sum();
|
|
|
Double avgValue = avg.getAsDouble();
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
tmp.put("totalHour",totalHour);
|
|
|
if(2==type){//获取周的最后一天
|
|
|
for (Map<String,Object>useTimeTmp :useTimeList){
|
|
|
String time = useTimeTmp.get("time").toString();
|
|
|
String sunday = DateUtil.getSundayOfThisWeek(DateUtil.strToDate(time));
|
|
|
useTimeTmp.put("time",sunday);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
tmp.put("useTimeList",useTimeList);
|
|
|
}
|
|
|
return deptProjectItemList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取员工项目趋势图一级
|
|
|
*/
|
|
|
public List<Map<String,Object>> statisticDoctorProjectTrend(String user,String dept,String memberId,String startDate,String endDate,Integer type) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
|
throw new Exception("您无权限操作");
|
|
|
}
|
|
|
String sqlCondition = " ";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
|
sqlCondition += " and up.report_date>='"+startDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
sqlCondition += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
String groupTimeFormat = "";
|
|
|
String uploadTimeFormat = "";
|
|
|
if(0==type){//全部
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(1==type){//日
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(2==type){//周
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}
|
|
|
else if(3==type){//月
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m') ";
|
|
|
}else {
|
|
|
throw new Exception("查询失败,请检查传入参数");
|
|
|
}
|
|
|
String projectSql = " select dict.dict_code project_code,dict.dict_value projectName,i.dept " +
|
|
|
" from wlyy_hospital_sys_dict dict INNER JOIN base_daily_report_item i on i.project_code = dict.dict_code " +
|
|
|
" INNER JOIN base_daily_report_item_members mem on i.id =mem.report_item_id " +
|
|
|
" where dict.dict_name='daily_report_project' and i.dept='"+dept+"' and mem.user_id='"+memberId+"' and mem.del=1 " +
|
|
|
" GROUP BY dict.dict_code; ";
|
|
|
List<Map<String,Object>> deptProjectList = jdbcTemplate.queryForList(projectSql);
|
|
|
String sqlList = " select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour, " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
|
|
|
" from base_daily_report_item i LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where up.doctor_id='"+memberId+"' and i.del=1 and i.dept='"+dept+"' and i.project_code='{project_code}' "+sqlCondition+
|
|
|
" GROUP BY "+groupTimeFormat+" order by time asc";
|
|
|
for (Map<String,Object>tmp:deptProjectList){
|
|
|
String project_code = tmp.get("project_code").toString();
|
|
|
List<Map<String,Object>> useTimeList = jdbcTemplate.queryForList(sqlList.replace("{project_code}",project_code));
|
|
|
if (useTimeList.size()>0){
|
|
|
OptionalDouble avg = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).average();
|
|
|
Double totalHour = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).sum();
|
|
|
Double avgValue = avg.getAsDouble();
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
tmp.put("totalHour",totalHour);
|
|
|
if(2==type){//获取周的最后一天
|
|
|
for (Map<String,Object>useTimeTmp :useTimeList){
|
|
|
String time = useTimeTmp.get("time").toString();
|
|
|
String sunday = DateUtil.getSundayOfThisWeek(DateUtil.strToDate(time));
|
|
|
useTimeTmp.put("time",sunday);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
tmp.put("useTimeList",useTimeList);
|
|
|
}
|
|
|
return deptProjectList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取员工某个项目详情趋势图二级
|
|
|
*/
|
|
|
public List<Map<String,Object>> statisticDoctorProjectItemTrend(String user,String dept,String memberId,String projectCode,String startDate,String endDate,Integer type) throws Exception {
|
|
|
String sql = " select * from base_doctor_role where doctor_code='"+user+"' ";
|
|
|
List<Map<String,Object>> userRoles = jdbcTemplate.queryForList(sql);
|
|
|
if (userRoles.size()==0){
|
|
|
throw new Exception("您无权限操作");
|
|
|
}
|
|
|
String sqlCondition = " ";
|
|
|
if (StringUtils.isNotBlank(startDate)){
|
|
|
sqlCondition += " and up.report_date>='"+startDate+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate)){
|
|
|
sqlCondition += " and up.report_date<='"+endDate+"' ";
|
|
|
}
|
|
|
String groupTimeFormat = "";
|
|
|
String uploadTimeFormat = "";
|
|
|
if(0==type){//全部
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(1==type){//日
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m-%d') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}else if(2==type){//周
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y%v') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m-%d') ";
|
|
|
}
|
|
|
else if(3==type){//月
|
|
|
groupTimeFormat=" DATE_FORMAT(de.create_time,'%Y-%m') ";
|
|
|
uploadTimeFormat=" DATE_FORMAT(up.report_date,'%Y-%m') ";
|
|
|
}else {
|
|
|
throw new Exception("查询失败,请检查传入参数");
|
|
|
}
|
|
|
String projectSql = " select i.id,CONCAT(i.title,'(',i.dept_name,')') title,i.content,i.state,i.begin_time beginTime, " +
|
|
|
" i.end_time endTime, i.create_user_name createUserName " +
|
|
|
" from base_daily_report_item i INNER JOIN base_daily_report_item_members mem on i.id =mem.report_item_id " +
|
|
|
" where i.project_code='"+projectCode+"' and mem.user_id='"+memberId+"' and mem.del=1 and i.dept='"+dept+"' " +
|
|
|
" GROUP BY i.id ";
|
|
|
List<Map<String,Object>> deptProjectItemList = jdbcTemplate.queryForList(projectSql);
|
|
|
String sqlList = " select i.project_code,CAST((sum(IFNULL(de.actual_completion_hour,IFNULL(de.completion_hour,'0')))) as char ) as completionHour, " +
|
|
|
" count(distinct up.doctor_id) as doctorTotal, "+uploadTimeFormat+" as 'time' " +
|
|
|
" from base_daily_report_item i LEFT JOIN base_daily_report_detail de on i.id = de.report_item_id " +
|
|
|
" INNER JOIN base_doctor_daily_report_upload up on up.id = de.report_id where i.del=1 and up.doctor_id='"+memberId+"' and i.dept='"+dept+"' and i.id='{itemId}' "+sqlCondition+
|
|
|
" GROUP BY "+groupTimeFormat+" order by time asc";
|
|
|
for (Map<String,Object>tmp:deptProjectItemList){
|
|
|
String itemId = tmp.get("id").toString();
|
|
|
List<Map<String,Object>> useTimeList = jdbcTemplate.queryForList(sqlList.replace("{itemId}",itemId));
|
|
|
if (useTimeList.size()>0){
|
|
|
OptionalDouble avg = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).average();
|
|
|
Double totalHour = useTimeList.stream().mapToDouble(t -> t.get("completionHour") == null ? 0.0 :Double.parseDouble(t.get("completionHour").toString())).sum();
|
|
|
Double avgValue = avg.getAsDouble();
|
|
|
tmp.put("avgValue",avgValue);
|
|
|
tmp.put("totalHour",totalHour);
|
|
|
if(2==type){//获取周的最后一天
|
|
|
for (Map<String,Object>useTimeTmp :useTimeList){
|
|
|
String time = useTimeTmp.get("time").toString();
|
|
|
String sunday = DateUtil.getSundayOfThisWeek(DateUtil.strToDate(time));
|
|
|
useTimeTmp.put("time",sunday);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
tmp.put("useTimeList",useTimeList);
|
|
|
}
|
|
|
return deptProjectItemList;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 导出项目计划周报月报用时情况
|
|
|
* @param user
|
|
@ -2404,7 +2854,7 @@ public class DailyReportUploadService {
|
|
|
throw new Exception("导出失败,请检查传入参数");
|
|
|
}
|
|
|
//项目耗时情况
|
|
|
sql = " select CONCAT(it.title,'(',i.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(IFNULL(pd.actual_completion_hour,IFNULL(pd.completion_hour,0))) 'completion_hour' ," +
|
|
|
" CASE it.state WHEN 1 THEN '已完成' ELSE '未完成' END as 'state',DATE_FORMAT(it.create_time,'%Y-%m-%d %H:%i:%S') create_time,it.create_user_name " +
|
|
|
"from base_daily_report_item it LEFT JOIN base_daily_report_detail pd " +
|
|
|
"on it.id = pd.report_item_id " +
|
|
@ -2425,7 +2875,7 @@ public class DailyReportUploadService {
|
|
|
"INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1 LEFT JOIN " +
|
|
|
"base_daily_report_detail rd on up.id = rd.report_id " +
|
|
|
"LEFT JOIN base_daily_report_item it on rd.report_item_id = it.id " +
|
|
|
"where 1=1 and rd.create_time>='"+startTime+"' and rd.create_time<='"+endTime+"' " ;
|
|
|
"where 1=1 and up.create_time>='"+startTime+"' and up.create_time<='"+endTime+"' " ;
|
|
|
if (!adminFlag){
|
|
|
sql +=" and up.doctor_id in ( select distinct dh2.doctor_code from base_doctor_hospital dh " +
|
|
|
"INNER JOIN base_doctor_hospital dh2 on dh.dept_code = dh2.dept_code " +
|
|
@ -2484,7 +2934,7 @@ public class DailyReportUploadService {
|
|
|
"INNER JOIN base_doctor_hospital dh on doc.id = dh.doctor_code and dh.del=1 LEFT JOIN " +
|
|
|
"base_daily_report_detail rd on up.id = rd.report_id " +
|
|
|
"LEFT JOIN base_daily_report_item it on rd.report_item_id = it.id " +
|
|
|
"where 1=1 and rd.create_time>='"+startTime+"' and rd.create_time<='"+endTime+"' " ;
|
|
|
"where 1=1 and up.create_time>='"+startTime+"' and up.create_time<='"+endTime+"' " ;
|
|
|
if (!adminFlag){
|
|
|
sql +=" and up.doctor_id in ( select distinct dh2.doctor_code from base_doctor_hospital dh " +
|
|
|
"INNER JOIN base_doctor_hospital dh2 on dh.dept_code = dh2.dept_code " +
|