소스 검색

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

LAPTOP-KB9HII50\70708 2 년 전
부모
커밋
47828ebab2
24개의 변경된 파일2664개의 추가작업 그리고 18개의 파일을 삭제
  1. 20 0
      business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportDetailDao.java
  2. 36 0
      business/base-service/src/main/java/com/yihu/jw/dailyReport/dao/BaseDailyReportUploadDao.java
  3. 1294 0
      business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java
  4. 62 1
      common/common-entity/sql记录
  5. 127 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportDetailDO.java
  6. 92 0
      common/common-entity/src/main/java/com/yihu/jw/entity/dailyReport/BaseDailyReportUploadDO.java
  7. 12 2
      gateway/ag-basic/src/main/resources/application.yml
  8. 7 0
      gateway/ag-basic/src/main/resources/bootstrap.yml
  9. 31 0
      server/svr-authentication/src/main/resources/application.yml
  10. 7 1
      server/svr-authentication/src/main/resources/bootstrap.yml
  11. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/child/ChildManageService.java
  12. 53 0
      svr/svr-base/src/main/resources/application.yml
  13. 7 0
      svr/svr-base/src/main/resources/bootstrap.yml
  14. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/child/ChildNewsListService.java
  15. 30 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportRemindJob.java
  16. 30 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportRemindSecondJob.java
  17. 30 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportTotalRemindJob.java
  18. 30 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportWsbTotalRemindJob.java
  19. 250 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/service/channel/DailyReportService.java
  20. 59 0
      svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/JobController.java
  21. 19 11
      svr/svr-internet-hospital-job/src/main/resources/system.properties
  22. 425 0
      svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/dailyReport/DailyReportUploadPoint.java
  23. 33 0
      svr/svr-iot/src/main/resources/application.yml
  24. 7 0
      svr/svr-iot/src/main/resources/bootstrap.yml

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

@ -0,0 +1,20 @@
package com.yihu.jw.dailyReport.dao;
import com.yihu.jw.entity.dailyReport.BaseDailyReportDetailDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 */
public interface BaseDailyReportDetailDao extends PagingAndSortingRepository<BaseDailyReportDetailDO,String>,
        JpaSpecificationExecutor<BaseDailyReportDetailDO> {
    void deleteByReportIdAndState(String reportID,Integer state);
    List<BaseDailyReportDetailDO> findByReportIdAndState(String reportId,Integer state);
    List<BaseDailyReportDetailDO> findByReportId(String reportId);
}

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

@ -0,0 +1,36 @@
package com.yihu.jw.dailyReport.dao;
import com.yihu.jw.entity.care.device.BaseSleepPlanDetail;
import com.yihu.jw.entity.dailyReport.BaseDailyReportUploadDO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Date;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 */
public interface BaseDailyReportUploadDao extends PagingAndSortingRepository<BaseDailyReportUploadDO, String>,
        JpaSpecificationExecutor<BaseDailyReportUploadDO> {
    List<BaseDailyReportUploadDO> findByDoctorId(String doctorID);
    @Query("select b from BaseDailyReportUploadDO b where b.doctorId=?1 and b.reportDate=?2")
    BaseDailyReportUploadDO findByDoctorIdAndReportDate(String doctorID,String reportDate);
    @Query("select b from BaseDailyReportUploadDO b where b.doctorId=?1 order by b.reportDate desc")
    List<BaseDailyReportUploadDO> findByDoctorIdLastOne(String doctorID);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 and a.reportDate>=?2 and a.reportDate<=?3 order by a.reportDate desc")
    Page<BaseDailyReportUploadDO> selectDailyReportByDoctorAndDateAndPage(String doctor, String startDate, String endDate, Pageable pageRequest);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 and a.reportDate>=?2 and a.reportDate<=?3 order by a.reportDate desc")
    List<BaseDailyReportUploadDO> selectDailyReportByDoctorAndDate(String doctor, String startDate, String endDate);
    @Query("select a from BaseDailyReportUploadDO a where a.doctorId=?1 order by a.reportDate desc")
    Page<BaseDailyReportUploadDO> selectDailyReportByDoctor(String doctor, Pageable pageRequest);
}

+ 1294 - 0
business/base-service/src/main/java/com/yihu/jw/dailyReport/service/DailyReportUploadService.java

@ -0,0 +1,1294 @@
package com.yihu.jw.dailyReport.service;
import com.alibaba.fastjson.JSONArray;
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;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
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.BaseDailyReportDetailDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportUploadDO;
import com.yihu.jw.entity.healthUpload.BaseDoctorMemberDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseUserDO;
import com.yihu.jw.healthUpload.dao.BaseDoctorMemberDao;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.util.common.PwdUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.idcard.IdCardUtil;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.wechat.dao.WxPushLogDao;
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 org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
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.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.OutputStream;
import java.util.*;
/**
 * Created by Bing on 2022/7/25.
 */
@Service
public class DailyReportUploadService {
    @Autowired
    private BaseDailyReportUploadDao dailyReportUploadDao;
    @Autowired
    private BaseDailyReportDetailDao reportDetailDao;
    @Autowired
    private BaseDoctorMemberDao doctorMemberDao;
    @Autowired
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private BaseDoctorRoleDao doctorRoleDao;
    @Autowired
    private WlyyHospitalSysDictDao hospitalSysDictDao;
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    @Autowired
    private BaseDoctorHospitalDao baseDoctorHospitalDao;
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    @Autowired
    private WeixinMessagePushUtils weixinMessagePushUtils;
    @Autowired
    private WxPushLogDao wxPushLogDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private WxEnterpriseUserDao wxEnterpriseUserDao;
    @Value("${wechat.id}")
    private String wechatId;
    @Autowired
    private EnterpriseService enterpriseService;
    private static Logger logger = LoggerFactory.getLogger(DailyReportUploadService.class);
    /**
     * 新增医生成员关系
     *
     * @param doctorId
     * @param ids      逗号隔开
     * @return
     */
    public List<BaseDoctorMemberDO> saveAndCreateMember(String doctorId, String ids) {
        String str[] = ids.split(",");
        List<BaseDoctorMemberDO> baseDoctorMemberDOList = new ArrayList<>();
        for (int i = 0; i < str.length; i++) {
            String memberId = str[i];
            BaseDoctorMemberDO memberDO = doctorMemberDao.findByDoctorIdAndMemberIdAndDel(doctorId, memberId);
            if (memberDO == null) {
                BaseDoctorMemberDO baseDoctorMemberDO = new BaseDoctorMemberDO();
                baseDoctorMemberDO.setDel(1);
                baseDoctorMemberDO.setDoctorId(doctorId);
                baseDoctorMemberDO.setMemberId(memberId);
                baseDoctorMemberDO.setCreateTime(new Date());
                baseDoctorMemberDO.setUpdateTime(new Date());
                baseDoctorMemberDO = doctorMemberDao.save(baseDoctorMemberDO);
                baseDoctorMemberDOList.add(baseDoctorMemberDO);
            }
        }
        return baseDoctorMemberDOList;
    }
    /**
     * 删除某个成员
     *
     * @param id 成员id
     * @return
     */
    public BaseDoctorMemberDO delDoctorMember(String id) {
        BaseDoctorMemberDO baseDoctorMemberDO = doctorMemberDao.findById(id);
        baseDoctorMemberDO.setDel(0);
        baseDoctorMemberDO = doctorMemberDao.save(baseDoctorMemberDO);
        return baseDoctorMemberDO;
    }
    /**
     * 查询医生的成员列表
     *
     * @param doctorId
     * @return
     */
    public List<BaseDoctorMemberDO> selectByDoctorId(String doctorId) {
        List<BaseDoctorMemberDO> baseDoctorMemberDOList = doctorMemberDao.findByDoctorIdAndDel(doctorId);
        BaseDoctorMemberDO memberDO1 = doctorMemberDao.findByDoctorIdAndMemberIdAndDel(doctorId, doctorId);
        //添加本人
        if (memberDO1 == null) {
            BaseDoctorMemberDO baseDoctorMemberDO = new BaseDoctorMemberDO();
            baseDoctorMemberDO.setDel(1);
            baseDoctorMemberDO.setDoctorId(doctorId);
            baseDoctorMemberDO.setMemberId(doctorId);
            baseDoctorMemberDO.setCreateTime(new Date());
            baseDoctorMemberDO.setUpdateTime(new Date());
            baseDoctorMemberDO = doctorMemberDao.save(baseDoctorMemberDO);
        }
        for (BaseDoctorMemberDO memberDO : baseDoctorMemberDOList) {
            BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(memberDO.getMemberId());
            if (baseDoctorDO != null) {
                memberDO.setBaseDoctorDO(baseDoctorDO);
            }
        }
        return baseDoctorMemberDOList;
    }
    /**
     * 新增加医生信息
     *
     * @param photo
     * @param name
     * @param idcard
     * @param sex
     * @param mobile
     * @param dept
     * @param deptName
     * @param idCardType
     * @param idType
     * @return
     */
    public BaseDoctorDO saveDoctorInfo(String id, String photo, String name, String idcard, String sex, String mobile, String dept, String deptName, String idCardType, String idType, Integer mark) throws Exception {
        BaseDoctorDO baseDoctorDO = new BaseDoctorDO();
        if (StringUtils.isNoneBlank(id)) {
            baseDoctorDO = baseDoctorDao.findById(id);
            baseDoctorDO.setIdCardType(idCardType);
            baseDoctorDO.setIdType(idType);
            baseDoctorDO.setPhoto(photo);
            baseDoctorDO.setName(name);
            baseDoctorDO.setIdcard(idcard);
            baseDoctorDO.setSex(Integer.parseInt(sex));
            baseDoctorDO.setMobile(mobile);
            baseDoctorDO.setMark(mark);
            String deptCode = dept;
            baseDoctorDO.setChargeType("1");
            baseDoctorDO = baseDoctorDao.save(baseDoctorDO);
            List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(baseDoctorDO.getId());
            if (null != baseDoctorHospitalDOS && baseDoctorHospitalDOS.size() > 0) {
                baseDoctorHospitalDao.delete(baseDoctorHospitalDOS);
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            } else {
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            }
        } else {
            baseDoctorDO.setIdcard(idcard);
            baseDoctorDO.setBirthday(IdCardUtil.getBirthdayForIdcard(idcard));
            baseDoctorDO.setSex(Integer.parseInt(sex));
            baseDoctorDO.setLocked(0);
            baseDoctorDO.setEnabled(1);
            baseDoctorDO.setMark(mark);
            String disableFlag = "0";
            //互联网医院:1停用,0使用  转 i健康:1正常,0作废
            baseDoctorDO.setDel("1".equals(disableFlag) ? "0" : "1");
            baseDoctorDO.setMobile("0");
            baseDoctorDO.setName(name);
            baseDoctorDO.setIsFamous(0);
            baseDoctorDO.setCreateTime(new Date());
            baseDoctorDO.setUpdateTime(new Date());
            baseDoctorDO.setIdCardType(idCardType);
            baseDoctorDO.setIdType(idType);
            baseDoctorDO.setPhoto(photo);
            baseDoctorDO.setMobile(mobile);
            baseDoctorDO.setChargeType("1");
            if (StringUtils.isNotBlank(mobile)) {
                baseDoctorDO.setSalt(PwdUtil.randomString(5));
                try {
                    baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex(baseDoctorDO.getMobile().substring(baseDoctorDO.getMobile().length() - 6) + "{" + baseDoctorDO.getSalt() + "}"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                baseDoctorDO.setPassword(com.yihu.utils.security.MD5.md5Hex("123456" + "{" + baseDoctorDO.getSalt() + "}"));
            }
            // 用医生和机构id、部门判断数据是否存在,若不存在则保存医生机构关联关系
            String deptCode = dept;
            baseDoctorDO = baseDoctorDao.save(baseDoctorDO);
            List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(baseDoctorDO.getId());
            if (null != baseDoctorHospitalDOS && baseDoctorHospitalDOS.size() > 0) {
                baseDoctorHospitalDao.delete(baseDoctorHospitalDOS);
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            } else {
                BaseDoctorHospitalDO baseDoctorHospitalDO = new BaseDoctorHospitalDO();
                baseDoctorHospitalDO.setOrgCode("350211A1002");
                baseDoctorHospitalDO.setOrgName("马銮湾医院");
                baseDoctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                baseDoctorHospitalDO.setDeptCode(deptCode);
                baseDoctorHospitalDO.setDeptName(deptName);
                baseDoctorHospitalDO.setDel("1");
                baseDoctorHospitalDO.setCreateTime(new Date());
                baseDoctorHospitalDao.save(baseDoctorHospitalDO);
            }
        }
        return baseDoctorDO;
    }
    /**
     * 查询医生的成员列表带有已上报次数
     * @param doctorId
     * @return
     */
    public List<BaseDoctorMemberDO> selectCountByDoctorId(String doctorId){
        List<BaseDoctorMemberDO> baseDoctorMemberDOList = doctorMemberDao.findByDoctorIdAndDel(doctorId);
        for (BaseDoctorMemberDO memberDO : baseDoctorMemberDOList) {
            BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(memberDO.getMemberId());
            if (baseDoctorDO != null) {
                memberDO.setBaseDoctorDO(baseDoctorDO);
            }
            List<BaseDailyReportUploadDO> dailyReportUploadDOS = dailyReportUploadDao.findByDoctorId(doctorId);
            memberDO.setCount(dailyReportUploadDOS.size()+"");
        }
        return baseDoctorMemberDOList;
    }
    /**
     * 查询某一个成员id
     *
     * @param id 成员id
     * @return
     */
    public BaseDoctorMemberDO selectById(String id) {
        BaseDoctorMemberDO baseDoctorMemberDO = doctorMemberDao.findById(id);
        if (baseDoctorMemberDO==null){
            return null;
        }
        BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(baseDoctorMemberDO.getMemberId());
        if (baseDoctorDO != null) {
            baseDoctorMemberDO.setBaseDoctorDO(baseDoctorDO);
        }
        List<BaseDoctorHospitalDO> doctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(baseDoctorMemberDO.getMemberId());
        baseDoctorMemberDO.setDoctorHospitalDOS(doctorHospitalDOS);
        return baseDoctorMemberDO;
    }
    /**
     * 提交每日上报信息
     * @param doctorId
     * @param report_date
     * @param week_name
     * @param detailDOList
     * @return
     * @throws Exception
     */
    @Transactional(rollbackFor = Exception.class)
    public BaseDailyReportUploadDO createDailyReport(String doctorId,String report_date,Integer leaveState,String leaveHour,String week_name, List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        List<BaseDoctorHospitalDO> doctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(doctorId);
        if (null==doctorDO){
            throw new Exception("上报人不存在");
        }
        if (1==leaveState){
            if (StringUtils.isNotBlank(leaveHour)){
                if (Integer.parseInt(leaveHour)<8&&detailDOList.size()==0){
                    throw new Exception("上传失败,请假未满8小时需要提交完成内容");
                }
            }
        }
        if (StringUtil.isBlank(report_date)){
            report_date = DateUtil.getStringDateShort();
            week_name = DateUtil.getWeek(report_date);
        }
        BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctorId,report_date);
        if (null==dailyReportUploadDO){
            dailyReportUploadDO = new BaseDailyReportUploadDO();
            dailyReportUploadDO.setState(0);
        }else{
            reportDetailDao.deleteByReportIdAndState(dailyReportUploadDO.getId(),0);
        }
        dailyReportUploadDO.setDoctorId(doctorId);
        dailyReportUploadDO.setDoctorName(doctorDO.getName());
        dailyReportUploadDO.setReportDate(report_date);
        dailyReportUploadDO.setWeekName(week_name);
        dailyReportUploadDO.setLeaveState(leaveState);
        dailyReportUploadDO.setLeaveHour(leaveHour);
        dailyReportUploadDO = dailyReportUploadDao.save(dailyReportUploadDO);
        for (BaseDailyReportDetailDO tmp :detailDOList){
            tmp.setReportId(dailyReportUploadDO.getId());
        }
        if (detailDOList.size()>0){
            reportDetailDao.save(detailDOList);
        }
        List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
        if (reportDetailDao.findByReportIdAndState(dailyReportUploadDO.getId(),0).size()>0){
            dailyReportUploadDO.setState(0);
        }
        String senderID="";//日报发送对象
        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);
        }
        List<BaseDoctorRoleDO> roleDOS = doctorRoleDao.findByDoctorCode(doctorId);
        if (roleDOS.size()==0){//普通员工 需要查询对应上级人员
            if (doctorHospitalDOS != null && doctorHospitalDOS.size() != 0) {
                BaseDoctorHospitalDO doctorHospitalDO = doctorHospitalDOS.get(0);
                sql = " select role.doctor_code from base_doctor_role role INNER JOIN base_doctor_hospital dh  " +
                        "on role.doctor_code = dh.doctor_code and dh.dept_code='"+doctorHospitalDO.getDeptCode()+"'  " +
                        "where role.role_code='deptAdmin' ";
                List<String> deptAdmins = jdbcTemplate.queryForList(sql,String.class);
                if (deptAdmins.size()>0){
                    senderID = deptAdmins.get(0);
                }else {
                    senderID=boosID;
                }
            }
        }else {//部门管理员 发送对象为老板
            senderID = boosID;
        }
        if (StringUtils.isNotBlank(senderID)){
            BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(senderID);
            if (remindDoctorDO != null) {
                try {
                    WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,remindDoctorDO.getMobile());
                    if(enterpriseUserDO==null){
                        logger.info("该用户"+doctorDO.getName()+"没有企业微信手机号,无法推送模版消息,用户ID:"+doctorDO.getId()+"wechatId:"+wechatId);
                    }else{
                        String title = "待办事项";
                        String des = "您好,"+doctorDO.getName()+"已提交每日日报,请点击前往审核。";
                        String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/workSummary/commit?mode=verify&id="+dailyReportUploadDO.getId();
                        String res = enterpriseService.sendTWMesByDoctor(wechatId,remindDoctorDO.getId(),title,des,url);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        dailyReportUploadDao.save(dailyReportUploadDO);
        dailyReportUploadDO.setDetailDOList(detailDOS);
        return dailyReportUploadDO;
    }
    /**
     * 核实审核信息
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public BaseDailyReportUploadDO verifiedItem(String doctorId,String reportId,List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (null==doctorDO){
            throw  new Exception("无权限审核");
        }
        BaseDailyReportUploadDO dailyReportUploadDO = null;
        dailyReportUploadDO = dailyReportUploadDao.findOne(reportId);
        if (null==dailyReportUploadDO){
            throw  new Exception("核实记录未查询到");
        }
        if(detailDOList.size()>0){//无完成事项内容
            boolean doubt  =false;
            for (BaseDailyReportDetailDO tmp:detailDOList){
                if (1==tmp.getDoubt()){
                    doubt = true;
                }
                tmp.setVerificationTime(new Date());
            }
            reportDetailDao.save(detailDOList);
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
            dailyReportUploadDO.setDetailDOList(detailDOS);
            if (reportDetailDao.findByReportIdAndState(dailyReportUploadDO.getId(),0).size()==0){
                dailyReportUploadDO.setState(1);
                dailyReportUploadDao.save(dailyReportUploadDO);
            }
            if (doubt==true){//有疑惑,推送给总经办"0592181"和老板"0592008";//老板id
                String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='MRRB_DOUBT_SENDER'  ";
                List<String> doubtSendUser = jdbcTemplate.queryForList(sql,String.class);
                for (String senderUser:doubtSendUser){
                    try {
                        BaseDoctorDO remindDoctorDO = baseDoctorDao.findById(senderUser);
                        if (remindDoctorDO != null) {
                            try {
                                WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,remindDoctorDO.getMobile());
                                if(enterpriseUserDO==null){
                                    logger.info("该用户"+doctorDO.getName()+"没有企业微信手机号,无法推送模版消息,用户ID:"+doctorDO.getId()+"wechatId:"+wechatId);
                                }else{
                                    String title = "待办事项";
                                    String des = "您好,"+doctorDO.getName()+"对"+dailyReportUploadDO.getDoctorName()+"已提交的每日日报有存疑,请点击前往审核。";
                                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/workSummary/commit?mode=verify&id="+dailyReportUploadDO.getId();
                                    String res = enterpriseService.sendTWMesByDoctor(wechatId,remindDoctorDO.getId(),title,des,url);
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        }else {
            dailyReportUploadDO.setState(1);
            dailyReportUploadDao.save(dailyReportUploadDO);
        }
        return dailyReportUploadDO;
    }
    /**
     *核实每日报表疑惑
     */
    @Transactional(rollbackFor = Exception.class)
    public  BaseDailyReportUploadDO verifiedDoubtItem(String doctorId,List<BaseDailyReportDetailDO> detailDOList) throws Exception {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (null==doctorDO){
            throw new Exception("无权限审核");
        }
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='MRRB_DOUBT_SENDER'  ";
        List<String> doubtSendUser = jdbcTemplate.queryForList(sql,String.class);
        if (!doubtSendUser.contains(doctorId)){
            throw new Exception("无权限审核");
        }
        BaseDailyReportUploadDO dailyReportUploadDO = new BaseDailyReportUploadDO();
        if(detailDOList.size()>0) {
            dailyReportUploadDO = dailyReportUploadDao.findOne(detailDOList.get(0).getReportId());
            if (null == dailyReportUploadDO) {
                throw new Exception("核实记录未查询到");
            }
            reportDetailDao.save(detailDOList);
        }
        return dailyReportUploadDO;
    }
    /**
     * 获取当天日报上传记录
     * @param doctor
     * @return
     */
    public BaseDailyReportUploadDO selectReportByDoctorId2(String doctor){
        String nowDate = DateUtil.getStringDateShort();
        BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctor,nowDate);
        if (null==dailyReportUploadDO){
            return null;
        }else{
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
            dailyReportUploadDO.setDetailDOList(detailDOS);
        }
        return dailyReportUploadDO;
    }
    /**
     * 查询成员的日报上传记录
     * @param doctorId
     * @param startDate
     * @param endDate
     * @param page
     * @param pageSize
     * @return
     */
    public Page<BaseDailyReportUploadDO> selectReportByDoctorId(String doctorId,String startDate,String endDate,Integer page,Integer pageSize){
        PageRequest pageRequest = new PageRequest(page - 1, pageSize);
        Page<BaseDailyReportUploadDO> list = null;
        if (StringUtils.isNoneBlank(startDate)) {
            list = dailyReportUploadDao.selectDailyReportByDoctorAndDateAndPage(doctorId, startDate, endDate, pageRequest);
        }else {
            list = dailyReportUploadDao.selectDailyReportByDoctor(doctorId, pageRequest);
        }
        for (BaseDailyReportUploadDO tmp:list){
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(tmp.getId());
            tmp.setDetailDOList(detailDOS);
        }
        return list;
    }
    /**
     * 根据id查看日报记录
     * @param reportId
     * @return
     * @throws Exception
     */
    public BaseDailyReportUploadDO selectReportById(String reportId) throws Exception {
        BaseDailyReportUploadDO reportUploadDO = dailyReportUploadDao.findOne(reportId);
        if (null==reportUploadDO){
            throw new Exception("未找到日报记录");
        }else {
            List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(reportUploadDO.getId());
            reportUploadDO.setDetailDOList(detailDOS);
        }
        return reportUploadDO;
    }
    /**
     * 医生首页
     * @param dept
     * @param level
     * @param doctorId
     * @return
     */
    public JSONObject selectDailyReportByRole(String dept,Integer level,String doctorId){
        JSONObject result = new JSONObject();
        String nowDate = DateUtil.getStringDateShort();
        BaseDailyReportUploadDO reportUploadDO = dailyReportUploadDao.findByDoctorIdAndReportDate(doctorId,nowDate);
        if (null==reportUploadDO){
            reportUploadDO = new BaseDailyReportUploadDO();
        }
        //今日本人上报数量
        String benrenTotalSql = " select count(1) from base_doctor_daily_report_upload where doctor_id='"+doctorId+"' and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //本人已上报数量
        String benrenshangbaoTotalSql = " select count(1) from base_doctor_daily_report_upload where doctor_id='"+doctorId+"'  ";
        //本人上级未核实事项数
        String benrenVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                " where up.doctor_id='"+doctorId+"' and  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //本人上级已核实事项数
        String benrenNotVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                " where up.doctor_id='"+doctorId+"' and  de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        //科室总人数
        String doctorTotalSql = "";
        //科室总上报人数
        String sqlTotalSql = "";
        //科室已核实人数
        String verifiedSql = "";
        //科室未核实人数
        String notVerifiedSql = "";
        if (level == 1) {
            //总人数
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
            //今日上报人数
            sqlTotalSql = " select count(1) from base_doctor_daily_report_upload  where  report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
            //今日核实数量
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
            //今日未核实数量
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where   de.state=0 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"' ";
        } else if (level == 2) {
            //总人次
            doctorTotalSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 and id  " +
                    " IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            //今日上报人数
            sqlTotalSql = " select count(1) from base_doctor_daily_report_upload  where  report_date>='"+nowDate+"' and report_date<='"+nowDate+"' " +
                    " and doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
            //今日核实数量
            verifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " where  de.state=1 and report_date>='"+nowDate+"' and report_date<='"+nowDate+"'" +
                    " and up.doctor_id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )  ";
            //今日未核实数量
            notVerifiedSql = " select count(distinct up.id) from base_doctor_daily_report_upload up inner join base_daily_report_detail de on up.id = de.report_id" +
                    " 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 ) ";
        }
        Integer benrenTotal =  jdbcTemplate.queryForObject(benrenTotalSql,Integer.class);
        Integer benrenshangbaoTotal = jdbcTemplate.queryForObject(benrenshangbaoTotalSql,Integer.class);
        Integer benrenVerified = jdbcTemplate.queryForObject(benrenVerifiedSql,Integer.class);
        Integer benrenNotVerified = jdbcTemplate.queryForObject(benrenNotVerifiedSql,Integer.class);
        result.put("benrenTotal", benrenTotal);//今日本人提交
        result.put("benrenshangbaoTotal", benrenshangbaoTotal);//本人已上报数量
        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("reportUploadDO",reportUploadDO);
        return result;
    }
    /**
     * 首页按照科室列表统计
     *
     * @param dept
     * @param idType
     * @param state     核实状态
     * @param startDate
     * @param endDate
     * @return
     */
    public List<Map<String, Object>> selectHeaderList(String dept, String idType, String state, String startDate, String endDate, String name) {
        String reportCondition = "";
        if (StringUtils.isNoneBlank(startDate)) {//上传过滤条件
            reportCondition += " and up.report_date >='" + startDate + "' and up.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNotBlank(state)){
            reportCondition += " and up.state ='"+state+"' ";
        }
        String doctorSqlCondition = "";//医生过滤条件
        if (StringUtils.isNoneBlank(idType)) {
            doctorSqlCondition += " and d.id_type = '" + idType + "' ";
        }
        if (StringUtils.isNoneBlank(name)) {
            doctorSqlCondition += " and d.name like '%" + name + "%' ";
        }
        //填报人数、未填报人数、上级已核实、未核实
        String deptSql = " select code,name,dh1.doctorTotal,dh2.yishangbaoTotal,dh3.verified,dh4.notVerified,dh5.shangchuanTotal  from dict_hospital_dept hd  " +
                "LEFT JOIN (select count(1) as 'doctorTotal',dh.dept_code from base_doctor d LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "WHERE d.del = 1 AND dh.del = 1 "+doctorSqlCondition+" GROUP BY dh.dept_code)dh1 ON hd.CODE = dh1.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'yishangbaoTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+doctorSqlCondition+reportCondition+")dh2 ON hd.CODE = dh2.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'verified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=1 "+doctorSqlCondition+reportCondition+" )dh3 ON hd.CODE = dh3.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(distinct up.id) 'notVerified' from base_doctor_daily_report_upload up LEFT JOIN base_daily_report_detail de on up.id = de.report_id " +
                "INNER JOIN base_doctor d on up.doctor_id = d.id LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 and de.state=0 "+doctorSqlCondition+reportCondition+")dh4 ON hd.CODE = dh4.dept_code " +
                "LEFT JOIN(select dh.dept_code,count(up.id) 'shangchuanTotal' from base_doctor_daily_report_upload up INNER JOIN base_doctor d on up.doctor_id = d.id " +
                "LEFT JOIN base_doctor_hospital dh ON dh.doctor_code = d.id " +
                "where 1=1 "+reportCondition+")dh5 ON hd.CODE = dh2.dept_code  " +
                " WHERE hd.consult_dept_flag = 1 ";
        if (StringUtils.isNoneBlank(name)) {
            deptSql += " and hd.code IN(SELECT dha.dept_code FROM base_doctor_hospital dha LEFT JOIN base_doctor da ON da.id=dha.doctor_code where da.name LIKE '%" + name + "%') ";
        }
        if (StringUtils.isNoneBlank(dept)) {
            deptSql += " and hd.code = '" + dept + "' ";
        }
        List<Map<String, Object>> mapList = jdbcTemplate.queryForList(deptSql);
        for (Map<String,Object> deptMap:mapList){
            String day = DateUtil.getTwoDay(endDate, startDate);
            Integer doctorTotal = 0;
            Integer total=0;
            Integer yishangbaoTotal=0;
            Integer weishangbaoTotal=0;
            Integer notVerified=0;
            Integer verified=0;
            Integer shangchuanTotal=0;
            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;
                }
            }
            if (deptMap.get("yishangbaoTotal")!=null) {
                yishangbaoTotal = Integer.parseInt(deptMap.get("yishangbaoTotal").toString());
            }
            weishangbaoTotal = total-yishangbaoTotal;
            if (deptMap.get("notVerified")!=null) {
                notVerified = Integer.parseInt(deptMap.get("notVerified").toString());
            }
            if (deptMap.get("verified")!=null) {
                verified = Integer.parseInt(deptMap.get("verified").toString());
            }
            if (deptMap.get("shangchuanTotal")!=null) {
                shangchuanTotal = Integer.parseInt(deptMap.get("shangchuanTotal").toString());
            }
           deptMap.put("total", total);//总人次
           deptMap.put("yishangbaoTotal", yishangbaoTotal);//已上报
           deptMap.put("weishangbaoTotal", weishangbaoTotal);//未上报
           deptMap.put("notVerified", notVerified);//未核实数量
           deptMap.put("verified", verified);//已核实数量
           deptMap.put("shangchuanTotal", shangchuanTotal);//上传总次数
        }
        return mapList;
    }
    /**
     * 具体每一个统计时间列表
     *
     * @param dept
     * @param idType
     * @param status
     * @param state
     * @param startDate
     * @param endDate
     * @return
     */
    public JSONArray selectListByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
        do{
            startTime = DateUtil.getPreDays(startTime, i);
            String str = DateUtil.dateToStrShort(startTime);
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        JSONArray array = new JSONArray();
        for ( i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
            String deptCondition = "";
            if (StringUtils.isNoneBlank(dept)) {
                deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            }
            String idTypeCondition = " ";
            if (StringUtils.isNoneBlank(idType)) {
                idTypeCondition += "  (select d1.id from base_doctor d1 where 1=1 and d1.id_type = '" + idType + "')";
            }
            if (StringUtils.isNoneBlank(deptCondition)) {
                doctorSql += " and d.id IN " + deptCondition;
            }
            if (StringUtils.isNoneBlank(idTypeCondition)) {
                doctorSql += " and d.id IN " + idTypeCondition;
            }
            if (StringUtils.isNoneBlank(status)) {
                if (status.equalsIgnoreCase("1")) {//已上报
                    doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                } else if (status.equalsIgnoreCase("2")) {//未上报
                    doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                }
            }
            if (StringUtils.isNoneBlank(state)) {//核实状态
                doctorSql +=" and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date +"' and d1.state='"+state+"' ) ";
            }
            if (StringUtils.isNoneBlank(name)) {
                doctorSql += " and d.name LIKE  '%" + name + "%' ";
            }
            Map<String, Object> map = jdbcTemplate.queryForMap(doctorSql);
            Integer total = 0;
            if (map != null) {
                if (map.get("total") != null) {
                    total = Integer.parseInt(map.get("total").toString());
                }
            }
            JSONObject object = new JSONObject();
            object.put("time", date);
            object.put("total", total);
            array.add(object);
        }
        return array;
    }
    /**
     * 获取列表的具体人员信息
     *
     * @param dept
     * @param idType
     * @param status
     * @param state
     * @param startDate
     * @param endDate
     * @param name      total
     * @return
     */
    public JSONArray selectListInfoByTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
        List<String> list = new ArrayList<>();
        Date startTime = DateUtil.strToDateShort(startDate);
        Date endDateTime = DateUtil.strToDateShort(endDate);
        int i=0;
        do{
            startTime = DateUtil.getPreDays(startTime, i);
            String str = DateUtil.dateToStrShort(startTime);
            list.add(str);
            i=1;
        }while (startTime.before(endDateTime));
        JSONArray array = new JSONArray();
        for (i = 0; i < list.size(); i++) {
            String date = list.get(i);
            String doctorSql = " select d.name,d.id,d.job_title_name as jobTitleName,d.photo from base_doctor d where d.del=1 ";
            String deptCondition = "";
            if (StringUtils.isNoneBlank(dept)) {
                deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
            }
            String idTypeCondition = " ";
            if (StringUtils.isNoneBlank(idType)) {
                idTypeCondition += "  (select d1.id from base_doctor d1 where 1=1 and d1.id_type = '" + idType + "')";
            }
            if (StringUtils.isNoneBlank(deptCondition)) {
                doctorSql += " and d.id IN " + deptCondition;
            }
            if (StringUtils.isNoneBlank(idTypeCondition)) {
                doctorSql += " and d.id IN " + idTypeCondition;
            }
            if (StringUtils.isNoneBlank(status)) {
                if (status.equalsIgnoreCase("1")) {//已上报
                    doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                } else if (status.equalsIgnoreCase("2")) {//未上报
                    doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' ) ";
                }
            }
            if (StringUtils.isNoneBlank(state)) {//核实状态
                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + date + "' and d1.report_date<='" + date + "' and d1.state='" + state + "' ) ";
            }
            if (StringUtils.isNoneBlank(name)) {
                doctorSql += " and d.name LIKE  '%" + name + "%' ";
            }
            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(doctorSql);
            for (Map<String, Object> map : mapList) {
                String id = map.get("id").toString();
                List<BaseDoctorHospitalDO> hospitalDOList = baseDoctorHospitalDao.findByDoctorCode(id);
                map.put("deptInfo", hospitalDOList);
                String stateCondition = "";//核实状态
                if (StringUtils.isNoneBlank(state)) {
                    stateCondition += " and d1.state='"+state+"' ";
                }
                String sql = " select d1.id,d1.state from base_doctor_daily_report_upload d1 where d1.doctor_id='"+id+"' and d1.report_date>='"+date+"' and d1.report_date<='"+date+"' ORDER BY report_date desc ";
                List<Map<String, Object>> mapList1 = jdbcTemplate.queryForList(sql);
                if (mapList1 != null && mapList1.size() != 0) {
                    for (Map<String, Object> map1 : mapList1) {
                        String stateMap = map1.get("state").toString();
                        if("1".equals(stateMap)){
                            map1.put("verifiedState", "已核实");
                        } else {
                            map1.put("verifiedState", "未核实");
                        }
                        map.put("uploadState", "已上报");
                        map.put("uploadId", map1.get("id").toString());
                    }
                    map.put("recordList", mapList1);
                } else {
                    map.put("verifiedState", "未知");
                    map.put("uploadState", "未上报");
                    map.put("uploadId", "");
                    map.put("report_date", "");
                    map.put("recordList", mapList1);
                }
            }
            JSONObject object = new JSONObject();
            object.put("time", date);
            object.put("list", mapList);
            array.add(object);
        }
        return array;
    }
//    /**
//     * 报表导出
//     *
//     * @param startDate
//     * @param endDate
//     * @return
//     */
//    public JSONArray pushListWriteDailyReport(OutputStream os, String startDate, String endDate, String dept) throws Exception {
//        List<String> list = new ArrayList<>();
//        Date startTime = DateUtil.strToDateShort(startDate);
//        Date endDateTime = DateUtil.strToDateShort(endDate);
//        int i=0;
//        do{
//            startTime = DateUtil.getPreDays(startTime, i);
//            String str = DateUtil.dateToStrShort(startTime);
//            list.add(str);
//            i++;
//        }while (startTime.before(endDateTime));
//        JSONArray array = new JSONArray();
//        for (i = 0; i < list.size(); i++) {
//            String date = list.get(i);
//            String doctorSql = " select id,name,job_title_name from base_doctor d where d.del=1 ";
//            if (StringUtils.isNoneBlank(dept)) {
//                doctorSql += " and d.id in (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
//            }
//            List<Map<String, Object>> mapList = jdbcTemplate.queryForList(doctorSql);
//
//            for (Map<String, Object> map : mapList) {
//                String id = map.get("id").toString();
//                List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(id);
//                if (baseDoctorHospitalDOS != null && baseDoctorHospitalDOS.size() != 0) {
//                    map.put("deptName", baseDoctorHospitalDOS.get(0).getDeptName());
//                }
//            }
//            JSONObject object = new JSONObject();
//            object.put("time", date);
//            object.put("list", mapList);
//            array.add(object);
//        }
//        pushListWritePriceTotal(os, array, startDate, endDate);
//        return array;
//    }
    /**
     * 查下上报最新一次记录
     * @param doctor
     * @return
     */
    public BaseDailyReportUploadDO selectRecordByDoctorIdAndConsumer(String doctor){
        List<BaseDailyReportUploadDO> dailyReportUploadDOs = dailyReportUploadDao.findByDoctorIdLastOne(doctor);
        BaseDailyReportUploadDO dailyReportUploadDO = null;
        if (dailyReportUploadDOs.size()>0){
            dailyReportUploadDO = dailyReportUploadDOs.get(0);
            if (null==dailyReportUploadDO){
                return null;
            }else{
                List<BaseDailyReportDetailDO> detailDOS = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
                dailyReportUploadDO.setDetailDOList(detailDOS);
            }
        }
        return dailyReportUploadDO;
    }
    /**
     *
     * @param orgCode
     * @param dept
     * @param doctorCode
     * @param key
     * @param flag 是否核实1是0否
     * @return
     */
    public List<Map<String, Object>> findDoctorByHospitalAndDept(String orgCode, String dept, String doctorCode,String key, Integer flag) {
        String sql = "SELECT " +
                " d.id AS \"id\", " +
                " d.photo AS \"photo\", " +
                " d.name AS \"name\", " +
                " d.expertise AS \"expertise\"," +
                " d.introduce AS \"introduce\"," +
                " d.job_title_code AS \"jobTitleCode\", " +
                " d.job_title_name AS \"jobTitleName\"," +
                " d.charge_type AS \"chargeType\"," +
                " d.outpatient_type AS \"outpatientType\"," +
                " d.consult_status AS \"consultStatus\"," +
                " h.dept_code AS \"deptCode\","+
                " h.dept_name AS \"deptName\","+
                " h.org_code AS \"orgCode\","+
                " h.org_name AS \"orgName\","+
                " t.photo AS \"hosptialphoto\","+
                " d.id_type AS \"idType\","+
                " d.id_card_type AS \"idCardType\" "+
                " FROM " +
                " base_doctor d " +
                " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
                " left join base_org t on t.id = h.org_code" +
                " WHERE  " +
                " 1=1 and d.del=1 ";
        if (StringUtils.isNotBlank(dept)) {
            sql += " AND h.dept_code = '" + dept + "'";
        }
        if (StringUtils.isNotBlank(orgCode)) {
            sql += " AND h.org_code = '" + orgCode + "'";
        }
        if (StringUtils.isNotBlank(key)) {
            sql += " AND (h.dept_name like '%" + key + "%' OR d.name like '%" + key + "%' OR d.expertise like '%" + key + "%') ";
        }
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:list){
            String id = map.get("id").toString();
            List<BaseDailyReportUploadDO> dailyReportUploadDOS = dailyReportUploadDao.selectDailyReportByDoctorAndDate(id,DateUtil.getStringDateShort(),DateUtil.getStringDateShort());
            if (dailyReportUploadDOS!=null&&dailyReportUploadDOS.size()!=0){
                BaseDailyReportUploadDO dailyReportUploadDO = dailyReportUploadDOS.get(0);
                List<BaseDailyReportDetailDO> detailDOList = reportDetailDao.findByReportId(dailyReportUploadDO.getId());
                dailyReportUploadDO.setDetailDOList(detailDOList);
                String verifiedName = "";
                if ("1".equals(dailyReportUploadDO.getState())) {
                    verifiedName = "已核实";
                } else {
                    verifiedName = "未核实";
                }
                map.put("verifiedName",verifiedName);
                map.put("reportUploadDO",dailyReportUploadDO);
            }else {
                map.put("reportUploadDO",null);
            }
        }
        if (list != null && list.size() > 0 && StringUtils.isNotBlank(doctorCode)) {
            //排序
            for (int i = 0; i < list.size(); i++) {
                String id = (String) list.get(i).get("id");
                if (doctorCode.equals(id)) {
                    Collections.swap(list, 0, i);
                }
            }
        }
        return list;
    }
    /**
     * 首页上报分析
     *
     * @param flag 1周2月
     * @param dept
     * @param level  1院级管理员,2科室管理员
     * @return
     */
    public JSONObject selectIndexTotalCircle(Integer flag,String dept, int level) {
        JSONObject object = new JSONObject();
        String startDate="";
        String endDate="";
        if (flag==1){
            startDate = DateUtil.getMondayOfThisWeek();
            endDate = DateUtil.getSundayOfThisWeek();
        }else if (flag==2){
            startDate = DateUtil.getFristDayOfMonth();
            endDate = DateUtil.getLastDayOfMonth();
        }
        String day = DateUtil.getTwoDay(endDate, startDate);
        String doctorSql = " select COUNT(1) as 'total' from base_doctor d where d.del=1 ";
        Integer total = 0;//总人次
        String sqlCondition = "";
        if (level==2){
            sqlCondition =" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        String sql = " SELECT SUM(d1.total) as total from (select COUNT(DISTINCT d.doctor_id) as 'total',date_format(d.report_date ,'%Y-%m-%d' ) " +
                " from base_doctor_daily_report_upload d where 1=1 "+sqlCondition+"  and  d.report_date >='"+startDate+"' and d.report_date<='"+endDate+"' " +
                " GROUP BY date_format(d.report_date ,'%Y-%m-%d' ))d1  ";
        if (level==2){
            doctorSql +=" and d.id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Map<String, Object> map = jdbcTemplate.queryForMap(doctorSql);
        String doctorTotal = "";
        if (map != null) {
            doctorTotal = map.get("total").toString();
        }
        if (StringUtils.isNoneBlank(doctorTotal)) {
            //总人次
            if (!day.equalsIgnoreCase("0")) {
                total = Integer.parseInt(doctorTotal) * (Integer.parseInt(day)+1);
            } else {
                total = Integer.parseInt(doctorTotal);
            }
        }
        Integer yishangbaoTotal = 0;
        Integer weishangbaoTotal = 0;
        Integer verifiedTotal = 0;
        Integer notVerifiedTotal = 0;
        //已上传
        Map<String, Object> yishangchaungMap = jdbcTemplate.queryForMap(sql);
        if (yishangchaungMap != null) {
            if (yishangchaungMap.get("total") != null) {
                yishangbaoTotal = Integer.parseInt(yishangchaungMap.get("total").toString());
            }
        }
        //未上报
        weishangbaoTotal = total - yishangbaoTotal;
        //上传总次数
        Integer shangchuanTotal = 0;
        String shangchuanTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where 1=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            shangchuanTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            shangchuanTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        Map<String, Object> shangchuanMap = jdbcTemplate.queryForMap(shangchuanTotalSql);
        if (shangchuanMap != null) {
            if (shangchuanMap.get("total") != null) {
                shangchuanTotal = Integer.parseInt(shangchuanMap.get("total").toString());
            }
        }
        //已核实、未核实
        String verifiedTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where  state=1 ";
        if (StringUtils.isNoneBlank(startDate)) {
            verifiedTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            verifiedTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        //已核实
        Map<String, Object> zhengchangMap = jdbcTemplate.queryForMap(verifiedTotalSql);
        if (zhengchangMap != null) {
            if (zhengchangMap.get("total") != null) {
                verifiedTotal = Integer.parseInt(zhengchangMap.get("total").toString());
            }
        }
        //未核实
        String notVerifiedTotalSql = "select COUNT(1) as 'total' from base_doctor_daily_report_upload d where  state=0  ";
        if (StringUtils.isNoneBlank(startDate)) {
            notVerifiedTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (level==2){
            notVerifiedTotalSql +=" and d.doctor_id IN (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 ) ";
        }
        //正常
        Map<String, Object> yichangMap = jdbcTemplate.queryForMap(notVerifiedTotalSql);
        if (yichangMap != null) {
            if (yichangMap.get("total") != null) {
                notVerifiedTotal = Integer.parseInt(yichangMap.get("total").toString());
            }
        }
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
        object.put("verifiedTotal", verifiedTotal);//已核实
        object.put("notVerifiedTotal", notVerifiedTotal);//未核实
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        return object;
    }
    /**
     * 首页统计
     *
     * @param dept
     * @param idType
     * @param status
     * @param state
     * @param startDate
     * @param endDate
     * @return
     */
    public JSONObject selectHeaderTotal(String dept, String idType, String status, String state, String startDate, String endDate, String name) {
        JSONObject object = new JSONObject();
        String day = DateUtil.getTwoDay(endDate, startDate);
        String doctorSql = " select COUNT(1) as \"total\" from base_doctor d where d.del=1 ";
        Integer total = 0;//总人次
        String sql = "select COUNT(DISTINCT d.id) as \"total\" from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where 1=1 ";
        String deptCondition = "";
        if (StringUtils.isNoneBlank(dept)) {
            deptCondition += " (select dh.doctor_code from base_doctor_hospital dh where dh.dept_code = '" + dept + "' and dh.del=1 )";
        }
        String idTypeCondition = " ";
        if (StringUtils.isNoneBlank(idType)) {
            idTypeCondition += "  (select d1.id from base_doctor d1 where 1=1 and d1.id_type = '" + idType + "')";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            doctorSql += " and d.id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            doctorSql += " and d.id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            doctorSql += " and d.name like '%" + name + "%' ";
        }
//        if (StringUtils.isNoneBlank(status)) {
//            if (status.equalsIgnoreCase("1")) {//已上报
//                doctorSql += " and d.id in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + startDate + "' and d1.report_date<='" + endDate + "' ) ";
//            } else if (status.equalsIgnoreCase("2")) {//未上报
//                doctorSql += " and d.id not in(select d1.doctor_id from base_doctor_daily_report_upload d1 where 1=1 and d1.report_date >='" + startDate + "' and d1.report_date<='" + endDate + "' ) ";
//            }
//        }
        Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql,Integer.class);
        if (!day.equalsIgnoreCase("0")) {
            total = doctorTotal * (Integer.parseInt(day)+1);
        } else {//当天
            total = doctorTotal;
        }
        Integer yishangbaoTotal=0;//上传人数
        Integer weishangbaoTotal=0;//未上报
        Integer notVerified=0;//未核实
        Integer verified=0;//已核实
        Integer shangchuanTotal=0;//上传总次数
        if (StringUtils.isNoneBlank(startDate)) {
            sql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(state)) {
            sql += " and d.state='"+state+"' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            sql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            sql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            sql += " and d.doctor_name like '%" + name + "%'";
        }
        yishangbaoTotal = jdbcTemplate.queryForObject(sql,Integer.class);
        //未上报
        weishangbaoTotal = total - yishangbaoTotal;
        String shangchuanTotalSql = "select COUNT(1) as \"total\" from base_doctor_daily_report_upload d where 1=1  ";
        if (StringUtils.isNoneBlank(startDate)) {
            shangchuanTotalSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            shangchuanTotalSql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            shangchuanTotalSql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            shangchuanTotalSql += " and d.doctor_name like '%" + name + "%'";
        }
        //未核实数量
        String notVerifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=0 ";
        //已核实数量
        String verifiedSql = "select COUNT(DISTINCT d.id) as 'total' from base_doctor_daily_report_upload d inner join base_daily_report_detail de " +
                " on d.id = de.report_id where de.state=1 ";
        if (StringUtils.isNoneBlank(startDate)) {
            notVerifiedSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
            verifiedSql += " and d.report_date >='" + startDate + "' and d.report_date<='" + endDate + "' ";
        }
        if (StringUtils.isNoneBlank(deptCondition)) {
            notVerifiedSql += " and d.doctor_id IN " + deptCondition;
            verifiedSql += " and d.doctor_id IN " + deptCondition;
        }
        if (StringUtils.isNoneBlank(idTypeCondition)) {
            notVerifiedSql += " and d.doctor_id IN " + idTypeCondition;
            verifiedSql += " and d.doctor_id IN " + idTypeCondition;
        }
        if (StringUtils.isNoneBlank(name)) {
            notVerifiedSql += " and d.doctor_name like '%" + name + "%'";
            verifiedSql += " and d.doctor_name like '%" + name + "%'";
        }
        notVerified = jdbcTemplate.queryForObject(notVerifiedSql,Integer.class);
        verified = jdbcTemplate.queryForObject(verifiedSql,Integer.class);
        //上传总次数
        shangchuanTotal = jdbcTemplate.queryForObject(shangchuanTotalSql,Integer.class);
        object.put("total", total);//总人次
        object.put("yishangbaoTotal", yishangbaoTotal);//已上报
        object.put("weishangbaoTotal", weishangbaoTotal);//未上报
        object.put("notVerified", notVerified);//未核实数量
        object.put("verified", verified);//已核实数量
        object.put("shangchuanTotal", shangchuanTotal);//上传总次数
        return object;
    }
}

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

@ -1946,4 +1946,65 @@ INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_
-- 2022-07-08 xyq 把视频表视频和图片全路径改成半路径
UPDATE base_video set url = REPLACE(url,'https://zhyzh.gongshu.gov.cn/',''),img = REPLACE(img,'https://zhyzh.gongshu.gov.cn/','');
UPDATE base_video set url = REPLACE(url,'https://zhyzh.gongshu.gov.cn/',''),img = REPLACE(img,'https://zhyzh.gongshu.gov.cn/','');
CREATE TABLE `base_doctor_daily_report_upload` (
  `id` varchar(50) NOT NULL,
	`doctor_id` varchar(50) DEFAULT NULL COMMENT '医生id',
  `doctor_name` varchar(50) DEFAULT NULL COMMENT '医生名字',
	 week_name varchar(50) default null,
	 report_date varchar(50) default null COMMENT '上报日期',
	 state tinyint(4) default null comment '是否全部核实 0未核实1已核实',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '操作日期',
  `update_user` varchar(50) DEFAULT NULL,
  `update_user_name` varchar(50) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `create_user` varchar(50) DEFAULT NULL,
  `create_user_name` varchar(50) DEFAULT NULL,
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `base_daily_report_detail` (
  `id` varchar(50) NOT NULL,
	`report_id` varchar(50) DEFAULT NULL COMMENT '每日日报id',
	 sort TINYINT(4) default null comment '序号',
  `report_content` varchar(255) DEFAULT NULL COMMENT '上报内容事项',
	 completion_schedule varchar(255) default null COMMENT '完成进度',
	 completion_hour varchar(50)  DEFAULT NULL  COMMENT '完成时长',
	 state tinyint(4) default null comment '是否核实 0未核实1已核实',
	 verification_time timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '核实时间',
	 remark VARCHAR(255) DEFAULT null comment '备注内容',
  `update_time` timestamp NULL DEFAULT  CURRENT_TIMESTAMP COMMENT '操作日期',
  `update_user` varchar(50) DEFAULT NULL,
  `update_user_name` varchar(50) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `create_user` varchar(50) DEFAULT NULL,
  `create_user_name` varchar(50) DEFAULT NULL,
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2022-07-20 wsl
CREATE TABLE `base_child_manage` (
  `id` varchar(50) NOT NULL,
  `type` int(2) DEFAULT NULL COMMENT '类型1图文辅导,2视频辅导,3喜讯详细 ',
  `org_name` varchar(50) DEFAULT NULL COMMENT '机构名字',
  `org` varchar(50) DEFAULT NULL COMMENT '机构',
  `title` varchar(50) DEFAULT NULL COMMENT '标题',
  `url` text COMMENT 'url/文章内容',
  `img` varchar(255) DEFAULT NULL COMMENT '封面图片',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `del` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1可用,0禁用',
  `click` int(5) DEFAULT '0' COMMENT '视频点击播放量',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='幼儿管理\r\n';
-- 2022-07-27
alter table base_daily_report_detail add column doubt TINYINT(2) default null COMMENT '疑惑0无疑惑1存疑';
alter table base_daily_report_detail add column doubt_state TINYINT(2) default null COMMENT '疑惑核实状态0未核实1已核实';
alter table base_daily_report_detail add column doubt_remark varchar(255) default null COMMENT '疑惑核实备注';
alter table base_daily_report_detail add column `actual_completion_hour` varchar(50) DEFAULT NULL COMMENT '实际完成时长';
alter table base_doctor_daily_report_upload add column `leave_state` tinyint(4) DEFAULT NULL COMMENT '请假状态0未请假1请假';
alter table base_doctor_daily_report_upload add column `leave_hour` varchar(50) DEFAULT NULL COMMENT '请假时长';

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

@ -0,0 +1,127 @@
package com.yihu.jw.entity.dailyReport;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by Bing on 2022/7/25.
 * 上报内容
 */
@Entity
@Table(name="base_daily_report_detail")
public class BaseDailyReportDetailDO extends UuidIdentityEntityWithOperator {
    private String reportId;//每日日报id
    private Integer sort;//序号
    private String reportContent;//上报内容事项
    private String completionSchedule;//完成进度
    private String completionHour;//完成时长
    private Integer state;//是否核实 0未核实1已核实
    private Date verificationTime;//核实时间
    private String remark; //备注内容
    private Integer doubt; //疑惑0无疑惑1存疑
    private Integer doubtState; //疑惑核实状态0未核实1已核实
    private String doubtRemark; //疑惑核实备注
    private String actualCompletionHour; //实际完成时长
    public String getReportId() {
        return reportId;
    }
    public void setReportId(String reportId) {
        this.reportId = reportId;
    }
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    public String getReportContent() {
        return reportContent;
    }
    public void setReportContent(String reportContent) {
        this.reportContent = reportContent;
    }
    public String getCompletionSchedule() {
        return completionSchedule;
    }
    public void setCompletionSchedule(String completionSchedule) {
        this.completionSchedule = completionSchedule;
    }
    public String getCompletionHour() {
        return completionHour;
    }
    public void setCompletionHour(String completionHour) {
        this.completionHour = completionHour;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getVerificationTime() {
        return verificationTime;
    }
    public void setVerificationTime(Date verificationTime) {
        this.verificationTime = verificationTime;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getDoubt() {
        return doubt;
    }
    public void setDoubt(Integer doubt) {
        this.doubt = doubt;
    }
    public Integer getDoubtState() {
        return doubtState;
    }
    public void setDoubtState(Integer doubtState) {
        this.doubtState = doubtState;
    }
    public String getDoubtRemark() {
        return doubtRemark;
    }
    public void setDoubtRemark(String doubtRemark) {
        this.doubtRemark = doubtRemark;
    }
    public String getActualCompletionHour() {
        return actualCompletionHour;
    }
    public void setActualCompletionHour(String actualCompletionHour) {
        this.actualCompletionHour = actualCompletionHour;
    }
}

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

@ -0,0 +1,92 @@
package com.yihu.jw.entity.dailyReport;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 * 每日日上报记录
 */
@Entity
@Table(name = "base_doctor_daily_report_upload")
public class BaseDailyReportUploadDO extends UuidIdentityEntityWithOperator {
    private String doctorId;
    private String doctorName;
    private String weekName;
    private Integer state;//是否全部核实 0未核实1已核实
    private Integer leaveState;//请假状态0未请假1请假
    private String leaveHour;//请假时长
    private String reportDate; //上报日期
    private List<BaseDailyReportDetailDO> detailDOList;
    public String getDoctorId() {
        return doctorId;
    }
    public void setDoctorId(String doctorId) {
        this.doctorId = doctorId;
    }
    public String getDoctorName() {
        return doctorName;
    }
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
    public String getWeekName() {
        return weekName;
    }
    public void setWeekName(String weekName) {
        this.weekName = weekName;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public String getReportDate() {
        return reportDate;
    }
    public void setReportDate(String reportDate) {
        this.reportDate = reportDate;
    }
    @Transient
    public List<BaseDailyReportDetailDO> getDetailDOList() {
        return detailDOList;
    }
    public void setDetailDOList(List<BaseDailyReportDetailDO> detailDOList) {
        this.detailDOList = detailDOList;
    }
    public Integer getLeaveState() {
        return leaveState;
    }
    public void setLeaveState(Integer leaveState) {
        this.leaveState = leaveState;
    }
    public String getLeaveHour() {
        return leaveHour;
    }
    public void setLeaveHour(String leaveHour) {
        this.leaveHour = leaveHour;
    }
}

+ 12 - 2
gateway/ag-basic/src/main/resources/application.yml

@ -240,8 +240,18 @@ spring:
  redis:
     host: 59.61.92.90 # Redis server host.
     port: 9054  # Redis server port.
     password: jkzlehr
     password: o!a1#B74&m
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: wlyy
    password: jkzlehr@123
  redis:
    host: 10.95.22.142 # Redis server host.
    port: 6380  # Redis server port.
    password: o!a1#B74&m
---
spring:
  profiles: jwystest

+ 7 - 0
gateway/ag-basic/src/main/resources/bootstrap.yml

@ -104,6 +104,13 @@ spring:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:

+ 31 - 0
server/svr-authentication/src/main/resources/application.yml

@ -359,6 +359,37 @@ im:
kick:
    ##互踢 1开通 0关闭
    eachOther: 1
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: wlyy_new
    password: J4&y9sk#1G
  redis:
    host: 10.95.22.142 # Redis server host.
    port: 6380  # Redis server port.
    password: o!a1#B74&m
  ##发现服务
## i健康用户信息接口,开放出来给互联网医院登录同步用户信息用
iHealth:
  user-info-uri: http://ehr.yihu.com/wlyy/iHealth/userInfo
fastDFS:
  fastdfs_file_url: http://172.26.0.110:8888/
wlyy:
  url: http://10.95.22.10:8011/wlyy/
#文件服务器上传配置 0本地,1.I健康,2.内网调用
testPattern:
  sign: 0
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
wechat:
  id: xm_ykyy_wx  # base库中,wx_wechat 的id字段
im:
  im_list_get: http://172.26.0.105:3000/
kick:
  ##互踢 1开通 0关闭
  eachOther: 1
---
spring:

+ 7 - 1
server/svr-authentication/src/main/resources/bootstrap.yml

@ -106,7 +106,13 @@ spring:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: jwystest

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/child/ChildManageService.java

@ -71,7 +71,7 @@ public class ChildManageService {
            baseChildManage.setCreateTime(new Date());
        }
        if (baseChildManage.getType()==2&&null==baseChildManage.getId()&&baseChildManage.getClick()==null) {
        if (baseChildManage.getType()==2&&baseChildManage.getClick()==null) {
            baseChildManage.setClick(0);
        }
        baseChildManageDao.save(baseChildManage);

+ 53 - 0
svr/svr-base/src/main/resources/application.yml

@ -481,6 +481,59 @@ testPattern:
  sign: 1
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: wlyy_new
    password: J4&y9sk#1G
  #    url: jdbc:mysql://172.19.103.77/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
  #    username: root
  #    password: 123456
  elasticsearch:
    cluster-name: jkzl #集群名 默认elasticsearch
    cluster-nodes: 10.95.91.4:9200,10.95.91.5:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
    client-transport-sniff: false
    jest:
      uris: http://10.95.91.4:9200,http://10.95.91.5:9300
      connection-timeout: 60000 # Connection timeout in milliseconds.
      multi-threaded: true # Enable connection requests from multiple execution threads.
  activemq:
    broker-url: tcp://172.19.103.87:61616
    user: admin
    password: admin
  redis:
    host: 10.90.32.3 # Redis server host.
    port: 20008  # Redis server port.
    password: jkzlehr
fast-dfs:
  tracker-server: 10.90.32.3:20003 #服务器地址
fastDFS:
  fastdfs_file_url: http://www.xmtyw.cn/
demo:
  flag: true
hospital:
  url: https://wx.xmzsh.com
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
wlyy:
  url: http://10.95.22.10:8011/wlyy/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040
  flag: false
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
pay:
  flag: false
#文件服务器上传配置 0本地,1.I健康,2.内网调用
testPattern:
  sign: 1
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
---
##==心脏中心外 ===============================================================================
spring:

+ 7 - 0
svr/svr-base/src/main/resources/bootstrap.yml

@ -86,6 +86,13 @@ spring:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.spring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/child/ChildNewsListService.java

@ -30,8 +30,8 @@ public class ChildNewsListService {
        JSONObject jsonObject = new JSONObject();
        String sql = "select * from base_child_manage where  1=1 and type = "+type+" ";
        String totalSql = "select count(id) total from  base_child_manage where 1=1 and type = "+type+" ";
        String sql = "select * from base_child_manage where  1=1 and del = 1  and type = "+type+" ";
        String totalSql = "select count(id) total from  base_child_manage where 1=1 and  del =1 and type = "+type+" ";
        String commonSql = "";
        String limitSql = "";

+ 30 - 0
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportRemindJob.java

@ -0,0 +1,30 @@
package com.yihu.jw.job.dailyReport;
import com.yihu.jw.service.channel.DailyReportService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Bing on 2022/7/26.
 */
public class DailyReportRemindJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(DailyReportRemindJob.class);
    @Autowired
    private DailyReportService dailyReportService;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("START========DailyReportRemindJob========");
        try {
            dailyReportService.dailyReportRemind();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===DailyReportRemindJob,message:"+e.getMessage());
        }
    }
}

+ 30 - 0
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportRemindSecondJob.java

@ -0,0 +1,30 @@
package com.yihu.jw.job.dailyReport;
import com.yihu.jw.service.channel.DailyReportService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Bing on 2022/7/26.
 */
public class DailyReportRemindSecondJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(DailyReportRemindSecondJob.class);
    @Autowired
    private DailyReportService dailyReportService;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("START========DailyReportRemindSecondJob========");
        try {
            dailyReportService.dailyReportRemind();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===DailyReportRemindSecondJob,message:"+e.getMessage());
        }
    }
}

+ 30 - 0
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportTotalRemindJob.java

@ -0,0 +1,30 @@
package com.yihu.jw.job.dailyReport;
import com.yihu.jw.service.channel.DailyReportService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Bing on 2022/7/26.
 */
public class DailyReportTotalRemindJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(DailyReportTotalRemindJob.class);
    @Autowired
    private DailyReportService dailyReportService;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("START========DailyReportTotalRemindJob========");
        try {
            dailyReportService.dailyReportTotalRemind();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===DailyReportTotalRemindJob,message:" + e.getMessage());
        }
    }
}

+ 30 - 0
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/job/dailyReport/DailyReportWsbTotalRemindJob.java

@ -0,0 +1,30 @@
package com.yihu.jw.job.dailyReport;
import com.yihu.jw.service.channel.DailyReportService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * Created by Bing on 2022/7/26.
 */
public class DailyReportWsbTotalRemindJob implements Job {
    private static final Logger logger = LoggerFactory.getLogger(DailyReportWsbTotalRemindJob.class);
    @Autowired
    private DailyReportService dailyReportService;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("START========DailyReportWsbTotalRemindJob========");
        try {
            dailyReportService.dailyReportWsbTotalRemind();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("END===ERROE===DailyReportWsbTotalRemindJob,message:" + e.getMessage());
        }
    }
}

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

@ -0,0 +1,250 @@
package com.yihu.jw.service.channel;
import com.yihu.jw.dailyReport.dao.BaseDailyReportDetailDao;
import com.yihu.jw.dailyReport.dao.BaseDailyReportUploadDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
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.BaseDailyReportUploadDO;
import com.yihu.jw.entity.hospital.enterprise.WxEnterpriseUserDO;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.wechat.dao.WxPushLogDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.dao.WxTemplateDao;
import com.yihu.jw.wechat.enterprise.EnterpriseService;
import com.yihu.jw.wechat.enterprise.dao.WxEnterpriseUserDao;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import org.apache.commons.lang3.StringUtils;
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.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2022/7/26.
 */
@Service
public class DailyReportService {
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    @Autowired
    private WxTemplateDao wxTemplateDao;
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    @Autowired
    private WeixinMessagePushUtils weixinMessagePushUtils;
    @Autowired
    private BaseDailyReportDetailDao reportDetailDao;
    @Autowired
    private BaseDailyReportUploadDao reportUploadDao;
    @Value("${wechat.id}")
    private String wechatId;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private WxPushLogDao wxPushLogDao;
    @Autowired
    private WxEnterpriseUserDao wxEnterpriseUserDao;
    @Autowired
    private EnterpriseService enterpriseService;
    @Autowired
    private BaseDoctorRoleDao doctorRoleDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BaseDoctorHospitalDao baseDoctorHospitalDao;
    private Logger logger= LoggerFactory.getLogger(DailyReportService.class);
    public void dailyReportRemind() throws Exception {
        List<BaseDoctorDO> doctorDOList = doctorDao.findByDel();
        String nowDate = DateUtil.getStringDateShort();
        for (BaseDoctorDO doctorDO:doctorDOList){
            if ("0592008".equals(doctorDO.getId())){
                continue;
            }
            BaseDailyReportUploadDO reportUploadDO = reportUploadDao.findByDoctorIdAndReportDate(doctorDO.getId(),nowDate);
            if (null==reportUploadDO){
                WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId,doctorDO.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";
                    String res = enterpriseService.sendTWMesByDoctor(wechatId,doctorDO.getId(),title,des,url);
                }
            }
        }
    }
    /**
     * 日报未上传通知
     * @throws Exception
     */
    public void dailyReportWsbTotalRemind() throws Exception {
        String boosID = "0592008";//老板id
        String nowDate = DateUtil.getStringDateShort();
        List<BaseDoctorRoleDO> deptAdminRoleList = doctorRoleDao.findByRoleCode("deptAdmin");
        //管理员
        for (BaseDoctorRoleDO adminRole : deptAdminRoleList) {
            BaseDoctorDO doctorDO = doctorDao.findById(adminRole.getDoctorCode());
            String dept_code = "";
            if (doctorDO != null) {
                List<BaseDoctorHospitalDO> doctorHospitalDOs = baseDoctorHospitalDao.findByDoctorCode(doctorDO.getId());
                if (doctorHospitalDOs.size() > 0) {
                    dept_code = doctorHospitalDOs.get(0).getDeptCode();
                }
            }
            WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId, doctorDO.getMobile());
            if (enterpriseUserDO == null) {
                logger.info("该用户" + doctorDO.getName() + "没有企业微信手机号,无法推送模版消息,用户ID:" + doctorDO.getId() + "wechatId:" + wechatId);
            } else {
                //获取部门人员
                if (StringUtils.isNotBlank(dept_code)) {
                    String doctorSql = " select COUNT(distinct d.id) as 'total' from base_doctor d  INNER JOIN base_doctor_hospital dh on d.id = dh.doctor_code " +
                            "where d.del=1 and dh.del=1 and dh.dept_code='" + dept_code + "'  ";
                    Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql, Integer.class);
                    //查询出已经上传人数
                    String uploadSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.doctor_id in ( " +
                            " select d.id from base_doctor d  INNER JOIN base_doctor_hospital dh on d.id = dh.doctor_code " +
                            "where d.del=1 and dh.del=1 and dh.dept_code='" + dept_code + "' )  ";
                    Integer sqlTotal = jdbcTemplate.queryForObject(uploadSql, Integer.class);
                    Integer weishangbaoTotal = doctorTotal - sqlTotal;
                    String title = "每日日报未上报汇总";
                    String des = "今日还有" + weishangbaoTotal + "人未提交健康信息,点击查看。";
                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/home/index";
                    String res = enterpriseService.sendTWMesByDoctor(wechatId, doctorDO.getId(), title, des, url);
                }
            }
        }
        String adminDoctorSql = " select distinct doctor_code from base_doctor_role where doctor_code<>'0592008'  ";
        List<String> adminDoctorS = jdbcTemplate.queryForList(adminDoctorSql,String.class);
        if (adminDoctorS.size()>0){
            BaseDoctorDO doctorDO = doctorDao.findById(boosID);
            if (doctorDO!=null){
                WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId, doctorDO.getMobile());
                if (enterpriseUserDO == null) {
                    logger.info("该用户" + doctorDO.getName() + "没有企业微信手机号,无法推送模版消息,用户ID:" + doctorDO.getId() + "wechatId:" + wechatId);
                } else {
                    String doctorSql = " select COUNT(distinct d.id) as 'total' from base_doctor d and d.id in ( "+adminDoctorSql+" )  ";
                    Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql, Integer.class);
                    //查询出已经上传人数
                    String uploadSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.doctor_id in ( "+adminDoctorSql+" )  ";
                    Integer sqlTotal = jdbcTemplate.queryForObject(uploadSql, Integer.class);
                    Integer weishangbaoTotal = doctorTotal - sqlTotal;
                    String title = "每日日报未上报汇总";
                    String des = "今日还有" + weishangbaoTotal + "人未提交健康信息,点击查看。";
                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/home/index";
                    String res = enterpriseService.sendTWMesByDoctor(wechatId, doctorDO.getId(), title, des, url);
                }
            }
        }
    }
    /**
     * 日报上传统计
     * @throws Exception
     */
    public void dailyReportTotalRemind() throws Exception {
        String boosID = "0592008";//老板id
        String nowDate = DateUtil.getStringDateShort();
        List<BaseDoctorRoleDO> deptAdminRoleList = doctorRoleDao.findByRoleCode("deptAdmin");
        //管理员
        for (BaseDoctorRoleDO adminRole : deptAdminRoleList) {
            BaseDoctorDO doctorDO = doctorDao.findById(adminRole.getDoctorCode());
            String dept_code = "";
            if (doctorDO != null) {
                List<BaseDoctorHospitalDO> doctorHospitalDOs = baseDoctorHospitalDao.findByDoctorCode(doctorDO.getId());
                if (doctorHospitalDOs.size() > 0) {
                    dept_code = doctorHospitalDOs.get(0).getDeptCode();
                }
            }
            WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId, doctorDO.getMobile());
            if (enterpriseUserDO == null) {
                logger.info("该用户" + doctorDO.getName() + "没有企业微信手机号,无法推送模版消息,用户ID:" + doctorDO.getId() + "wechatId:" + wechatId);
            } else {
                //获取部门人员
                if (StringUtils.isNotBlank(dept_code)) {
                    String doctorSql = " select COUNT(distinct d.id) as 'total' from base_doctor d  INNER JOIN base_doctor_hospital dh on d.id = dh.doctor_code " +
                            "where d.del=1 and dh.del=1 and dh.dept_code='" + dept_code + "'  ";
                    Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql, Integer.class);
                    //查询出已经上传人数
                    String uploadSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.doctor_id in ( " +
                            " select d.id from base_doctor d  INNER JOIN base_doctor_hospital dh on d.id = dh.doctor_code " +
                            "where d.del=1 and dh.del=1 and dh.dept_code='" + dept_code + "' )  ";
                    Integer yishangbaoTotal = jdbcTemplate.queryForObject(uploadSql, Integer.class);
                    Integer weishangbaoTotal = doctorTotal - yishangbaoTotal;
                    //已核实
                    String verifiedTotalSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.state=1 and up.doctor_id in ( " +
                            " select d.id from base_doctor d  INNER JOIN base_doctor_hospital dh on d.id = dh.doctor_code " +
                            "where d.del=1 and dh.del=1 and dh.dept_code='" + dept_code + "' )  ";
                    Integer verifiedTotal = jdbcTemplate.queryForObject(verifiedTotalSql,Integer.class);
                    //未核实
                    String notVerifiedTotalSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.state=0 and up.doctor_id in ( " +
                            " select d.id from base_doctor d  INNER JOIN base_doctor_hospital dh on d.id = dh.doctor_code " +
                            "where d.del=1 and dh.del=1 and dh.dept_code='" + dept_code + "' )  ";
                    Integer notVerifiedTotal = jdbcTemplate.queryForObject(notVerifiedTotalSql,Integer.class);
                    String title = "每日日报上报汇总";
                    String des = "今日上报情况:已上报:"+yishangbaoTotal+" 未上报:"+weishangbaoTotal+" 已核实:"+verifiedTotal+" 未核实:" + notVerifiedTotal + ";点击查看;";
                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/home/index";
                    String res = enterpriseService.sendTWMesByDoctor(wechatId, doctorDO.getId(), title, des, url);
                }
            }
        }
        String adminDoctorSql = " select distinct doctor_code from base_doctor_role where doctor_code<>'0592008'  ";
        List<String> adminDoctorS = jdbcTemplate.queryForList(adminDoctorSql,String.class);
        if (adminDoctorS.size()>0){
            BaseDoctorDO doctorDO = doctorDao.findById(boosID);
            if (doctorDO!=null){
                WxEnterpriseUserDO enterpriseUserDO = wxEnterpriseUserDao.findByEnterpriseIdAndMobile(wechatId, doctorDO.getMobile());
                if (enterpriseUserDO == null) {
                    logger.info("该用户" + doctorDO.getName() + "没有企业微信手机号,无法推送模版消息,用户ID:" + doctorDO.getId() + "wechatId:" + wechatId);
                } else {
                    String doctorSql = " select COUNT(distinct d.id) as 'total' from base_doctor d where 1=1 and d.id in ( "+adminDoctorSql+" )  ";
                    Integer doctorTotal = jdbcTemplate.queryForObject(doctorSql, Integer.class);
                    //查询出已经上传人数
                    String uploadSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.doctor_id in ( "+adminDoctorSql+" )  ";
                    Integer yishangbaoTotal = jdbcTemplate.queryForObject(uploadSql, Integer.class);
                    Integer weishangbaoTotal = doctorTotal - yishangbaoTotal;
                    //已核实
                    String verifiedTotalSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.state=1 and up.doctor_id in ( "+adminDoctorSql+" )  ";
                    Integer verifiedTotal = jdbcTemplate.queryForObject(verifiedTotalSql,Integer.class);
                    //未核实
                    String notVerifiedTotalSql = " select count(1) from base_doctor_daily_report_upload up " +
                            "where up.report_date>='" + nowDate + "' and up.report_date<='" + nowDate + "' and up.state=0 and up.doctor_id in ( "+adminDoctorSql+" )  ";
                    Integer notVerifiedTotal = jdbcTemplate.queryForObject(notVerifiedTotalSql,Integer.class);
                    String title = "每日日报上报汇总";
                    String des = "今日上报情况:已上报:"+yishangbaoTotal+" 未上报:"+weishangbaoTotal+"已核实:"+verifiedTotal+"未核实:" + notVerifiedTotal + ";点击查看;";
                    String url = "https://ehr.yihu.com/hlwyy/zjxl/dailyReport/#/home/index";
                    String res = enterpriseService.sendTWMesByDoctor(wechatId, doctorDO.getId(), title, des, url);
                }
            }
        }
    }
}

+ 59 - 0
svr/svr-internet-hospital-job/src/main/java/com/yihu/jw/web/quota/JobController.java

@ -10,6 +10,10 @@ import com.yihu.jw.internet.service.InternetService;
import com.yihu.jw.internet.service.YkyyCommonService;
import com.yihu.jw.internet.service.ykyy.YkyyInternetService;
import com.yihu.jw.job.*;
import com.yihu.jw.job.dailyReport.DailyReportRemindJob;
import com.yihu.jw.job.dailyReport.DailyReportRemindSecondJob;
import com.yihu.jw.job.dailyReport.DailyReportTotalRemindJob;
import com.yihu.jw.job.dailyReport.DailyReportWsbTotalRemindJob;
import com.yihu.jw.job.yk.YKYYDataUploadJob;
import com.yihu.jw.job.ykyy.UnCheckPrescriptionJob;
import com.yihu.jw.job.ykyy.UnSettledHISPrescriptionJob;
@ -324,7 +328,47 @@ public class JobController extends BaseController {
                    } else {
                        logger.info("data_ykupload_job_2  job exist");
                    }
                    break;
                case "DailyReportRemindJob" :
                    //日报待上报提醒
                    if (!quartzHelper.isExistJob("DailyReportRemindJob")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("DailyReportRemindJob");
                        quartzHelper.addJob(DailyReportRemindJob.class, trigger, "DailyReportRemindJob", new HashMap<String, Object>());
                        logger.info("DailyReportRemindJob  job success");
                    } else {
                        logger.info("DailyReportRemindJob  job exist");
                    }
                    break;
                case "DailyReportRemindSecondJob" :
                    //日报待上报提醒
                    if (!quartzHelper.isExistJob("DailyReportRemindSecondJob")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("DailyReportRemindSecondJob");
                        quartzHelper.addJob(DailyReportRemindSecondJob.class, trigger, "DailyReportRemindSecondJob", new HashMap<String, Object>());
                        logger.info("DailyReportRemindSecondJob  job success");
                    } else {
                        logger.info("DailyReportRemindSecondJob  job exist");
                    }
                    break;
                case "DailyReportTotalRemindJob" :
                    //日报上报统计
                    if (!quartzHelper.isExistJob("DailyReportTotalRemindJob")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("DailyReportTotalRemindJob");
                        quartzHelper.addJob(DailyReportTotalRemindJob.class, trigger, "DailyReportTotalRemindJob", new HashMap<String, Object>());
                        logger.info("DailyReportTotalRemindJob  job success");
                    } else {
                        logger.info("DailyReportTotalRemindJob  job exist");
                    }
                    break;
                case "DailyReportWsbTotalRemindJob" :
                    //日报未上报通知
                    if (!quartzHelper.isExistJob("DailyReportWsbTotalRemindJob")) {
                        String trigger = SystemConf.getInstance().getSystemProperties().getProperty("DailyReportWsbTotalRemindJob");
                        quartzHelper.addJob(DailyReportWsbTotalRemindJob.class, trigger, "DailyReportWsbTotalRemindJob", new HashMap<String, Object>());
                        logger.info("DailyReportWsbTotalRemindJob  job success");
                    } else {
                        logger.info("DailyReportWsbTotalRemindJob  job exist");
                    }
                    break;
                default :
            }
@ -970,4 +1014,19 @@ public class JobController extends BaseController {
        }
    }
    @RequestMapping(value = "/testNow", method = RequestMethod.POST)
    @ApiOperation("立即执行")
    public String executeSignFamilyPayResultJob(String className) {
        try {
            String uuid = getUID();
            Class c1 = Class.forName(className);//com.yihu.jw.care.job.consult.FinishConsultJob
            quartzHelper.startNow(c1, uuid, null);
            quartzHelper.removeJob(uuid);
            return write(200, "启动成功");
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
}

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

@ -1,27 +1,27 @@
#-------------------------中山医院-----------------------------#
# 健康频道状态
#-------------------------\u4E2D\u5C71\u533B\u9662-----------------------------#
# \u5065\u5EB7\u9891\u9053\u72B6\u6001
prescriptionStatus_update_job=0 */2 * * * ?
# 门诊记录过期job,每天1 点触发
# \u95E8\u8BCA\u8BB0\u5F55\u8FC7\u671Fjob\uFF0C\u6BCF\u59291 \u70B9\u89E6\u53D1
prescription_overdue_job=0 0 2 * * ?
# 0 */1 * * * ?
prescription_auto_delete_job = 0 30 0 ? * *
#每天13 点触发
#\u6BCF\u592913 \u70B9\u89E6\u53D1
data_upload_job=0 0 2 * * ?
#每10分钟触发一次
#-------------------------中山医院end-----------------------------#
#-------------------------眼科医院-----------------------------#
#\u6BCF10\u5206\u949F\u89E6\u53D1\u4E00\u6B21
#-------------------------\u4E2D\u5C71\u533B\u9662end-----------------------------#
#-------------------------\u773C\u79D1\u533B\u9662-----------------------------#
data_ykupload_job=0 0 0 * * ?
#每间隔1分钟触发
#\u6BCF\u95F4\u96941\u5206\u949F\u89E6\u53D1
unsettled_prescription_notice_job=0 */1 * * * ?
pay_status_notice_job=0 */1 * * * ?
CSTXJOB=0 */1 * * * ?
#-------------------------眼科医院end-----------------------------#
#-------------------------监管平台通用医院-----------------------------#
#-------------------------\u773C\u79D1\u533B\u9662end-----------------------------#
#-------------------------\u76D1\u7BA1\u5E73\u53F0\u901A\u7528\u533B\u9662-----------------------------#
data_common_upload_job=0 0 0 * * ?
#-------------------------眼科医院-----------------------------#
#-------------------------\u773C\u79D1\u533B\u9662-----------------------------#
data_ykupload_job_2=0 0 0 * * ?
@ -41,3 +41,11 @@ health_upload_weishangbao_remind_job=0 45 8 * * ? *
health_upload_total_remind_job=0 0 9 * * ? *
DailyReportRemindJob=0 50 17 * * ? *
DailyReportRemindSecondJob=0 0 20 * * ? *
DailyReportTotalRemindJob=0 0 22 * * ? *
DailyReportWsbTotalRemindJob=0 0 21 * * ? *

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

@ -0,0 +1,425 @@
package com.yihu.jw.hospital.endpoint.dailyReport;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.dailyReport.service.DailyReportUploadService;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportDetailDO;
import com.yihu.jw.entity.dailyReport.BaseDailyReportUploadDO;
import com.yihu.jw.entity.healthUpload.BaseDoctorMemberDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import com.yihu.jw.utils.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Bing on 2022/7/25.
 */
@RestController
@RequestMapping(value = "dailyReport")
@Api(value = "公司日报上报", description = "公司日报上报")
public class DailyReportUploadPoint extends EnvelopRestEndpoint {
    @Autowired
    private DailyReportUploadService dailyReportUploadService;
    @PostMapping(value = "saveAndCreateMember")
    @ApiOperation(value = "新增医生成员关系")
    public ListEnvelop saveAndCreateMember(@ApiParam(name = "doctorId", value = "医生id")
                                           @RequestParam(value = "doctorId", required = true) String doctorId,
                                           @ApiParam(name = "ids", value = "成员id,逗号隔开")
                                           @RequestParam(value = "ids", required = true) String ids) {
        try {
            List<BaseDoctorMemberDO> doctorHealthUploadDOS = dailyReportUploadService.saveAndCreateMember(doctorId,ids);
            return success(doctorHealthUploadDOS);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @PostMapping(value = "delDoctorMember")
    @ApiOperation(value = "删除某个成员")
    public ObjEnvelop delDoctorMember(@ApiParam(name = "id", value = "成员列表id")
                                      @RequestParam(value = "id", required = true) String id) {
        try {
            BaseDoctorMemberDO memberDO = dailyReportUploadService.delDoctorMember(id);
            return success(memberDO);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "selectByDoctorId")
    @ApiOperation(value = "查询医生的成员列表")
    public ListEnvelop selectByDoctorId(@ApiParam(name = "doctorId", value = "医生id")
                                        @RequestParam(value = "doctorId", required = true) String doctorId) {
        try {
            List<BaseDoctorMemberDO> memberDOList = dailyReportUploadService.selectByDoctorId(doctorId);
            return success(memberDOList);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectCountByDoctorId")
    @ApiOperation(value = "查询医生的成员列表带有已上报次数")
    public ListEnvelop selectCountByDoctorId(@ApiParam(name = "doctorId", value = "医生id")
                                             @RequestParam(value = "doctorId", required = true) String doctorId) {
        try {
            List<BaseDoctorMemberDO> memberDOList = dailyReportUploadService.selectCountByDoctorId(doctorId);
            return success(memberDOList);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectById")
    @ApiOperation(value = "查询某一个成员信息")
    public ObjEnvelop selectById(@ApiParam(name = "id", value = "成员列表id")
                                 @RequestParam(value = "id", required = true) String id) {
        try {
            BaseDoctorMemberDO memberDO = dailyReportUploadService.selectById(id);
            return success(memberDO);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @PostMapping(value = "createDailyReport")
    @ApiOperation(value = "提交每日上报信息")
    public ObjEnvelop createDailyReport(@ApiParam(name = "doctorId", value = "doctorId")
                                        @RequestParam(value = "doctorId", required = true) String doctorId,
                                        @ApiParam(name = "report_date", value = "上报日期yyyy-MM-dd")
                                        @RequestParam(value = "report_date", required = true) String report_date,
                                        @ApiParam(name = "leaveState", value = "请假状态 0未请假1已请假 默认0")
                                        @RequestParam(value = "leaveState", required = false,defaultValue = "0") Integer leaveState,
                                        @ApiParam(name = "leaveHour", value = "请假时长默认0")
                                        @RequestParam(value = "leaveHour", required = false,defaultValue = "0") String leaveHour,
                                        @ApiParam(name = "week_name", value = "星期一...")
                                        @RequestParam(value = "week_name", required = true) String week_name,
                                        @ApiParam(name = "jsonData", value = "事项信息实体")
                                        @RequestParam(value = "jsonData", required = true) String jsonData) {
        try {
            List<BaseDailyReportDetailDO> healthUploadDOs = new ArrayList<>();
            if (StringUtils.isNoneBlank(jsonData)){
                healthUploadDOs = JSONArray.parseArray(jsonData,BaseDailyReportDetailDO.class);
            }
            BaseDailyReportUploadDO dailyReport = dailyReportUploadService.createDailyReport(doctorId,report_date,leaveState,leaveHour,week_name,healthUploadDOs);
            return success(dailyReport);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @PostMapping(value = "verifiedItem")
    @ApiOperation(value = "核实每日报表")
    public ObjEnvelop verifiedItem(@ApiParam(name = "doctorId", value = "doctorId")
                                   @RequestParam(value = "doctorId", required = true) String doctorId,
                                   @ApiParam(name = "reportID", value = "reportID")
                                   @RequestParam(value = "reportID", required = true) String reportID,
                                   @ApiParam(name = "jsonData", value = "事项信息实体")
                                   @RequestParam(value = "jsonData", required = false) String jsonData) {
        try {
            List<BaseDailyReportDetailDO> healthUploadDOs = new ArrayList<>();
            if (StringUtils.isNoneBlank(jsonData)){
                healthUploadDOs = JSONArray.parseArray(jsonData,BaseDailyReportDetailDO.class);
            }
            BaseDailyReportUploadDO dailyReport = dailyReportUploadService.verifiedItem(doctorId,reportID,healthUploadDOs);
            return success(dailyReport);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @PostMapping(value = "verifiedDoubtItem")
    @ApiOperation(value = "核实每日报表疑虑")
    public ObjEnvelop verifiedDoubtItem(@ApiParam(name = "doctorId", value = "doctorId")
                                   @RequestParam(value = "doctorId", required = true) String doctorId,
                                   @ApiParam(name = "jsonData", value = "事项信息实体")
                                   @RequestParam(value = "jsonData", required = false) String jsonData) {
        try {
            List<BaseDailyReportDetailDO> healthUploadDOs = new ArrayList<>();
            if (StringUtils.isNoneBlank(jsonData)){
                healthUploadDOs = JSONArray.parseArray(jsonData,BaseDailyReportDetailDO.class);
            }
            BaseDailyReportUploadDO dailyReport = dailyReportUploadService.verifiedDoubtItem(doctorId,healthUploadDOs);
            return success(dailyReport);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "selectReportByDoctorId2")
    @ApiOperation(value = "查询成员的当天上传记录")
    public ObjEnvelop selectReportByDoctorId2(@ApiParam(name = "doctorId", value = "医生id")
                                             @RequestParam(value = "doctorId", required = true) String doctorId) {
        try {
            BaseDailyReportUploadDO list = dailyReportUploadService.selectReportByDoctorId2(doctorId);
            return ObjEnvelop.getSuccess("success",list);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "selectReportByDoctorId")
    @ApiOperation(value = "查询成员的日报上传记录")
    public ObjEnvelop selectReportByDoctorId(@ApiParam(name = "doctorId", value = "医生id")
                                                 @RequestParam(value = "doctorId", required = true) String doctorId,
                                              @ApiParam(name = "startDate", value = "开始日期yyyy-MM-dd")
                                                  @RequestParam(value = "startDate", required = false) String startDate,
                                              @ApiParam(name = "endDate", value = "结束日期")
                                                  @RequestParam(value = "endDate", required = false) String endDate,
                                              @ApiParam(name = "page", value = "页码")
                                                  @RequestParam(value = "page", required = false) Integer page,
                                              @ApiParam(name = "pageSize", value = "大小")
                                                  @RequestParam(value = "pageSize", required = false) Integer pageSize) {
        try {
            Page<BaseDailyReportUploadDO> list = dailyReportUploadService.selectReportByDoctorId(doctorId,startDate,endDate,page,pageSize);
            return ObjEnvelop.getSuccess("success",list);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "selectReportById")
    @ApiOperation(value = "根据id查看日报记录")
    public ObjEnvelop selectReportById(@ApiParam(name = "id", value = "日报id")
                                       @RequestParam(value = "id", required = true) String id) {
        try {
            BaseDailyReportUploadDO reportUploadDO = dailyReportUploadService.selectReportById(id);
            return ObjEnvelop.getSuccess("success",reportUploadDO);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "saveDoctorInfo")
    @ApiOperation(value = "新增加医生信息")
    public ObjEnvelop saveDoctorInfo(@ApiParam(name = "photo", value = "医生头像")
                                     @RequestParam(value = "photo", required = false) String photo,
                                     @ApiParam(name = "name", value = "姓名")
                                     @RequestParam(value = "name", required = false) String name,
                                     @ApiParam(name = "idcard", value = "证件号码")
                                     @RequestParam(value = "idcard", required = false) String idcard,
                                     @ApiParam(name = "sex", value = "性别")
                                     @RequestParam(value = "sex", required = false) String sex,
                                     @ApiParam(name = "mobile", value = "手机号")
                                     @RequestParam(value = "mobile", required = false) String mobile,
                                     @ApiParam(name = "dept", value = "科室编码")
                                     @RequestParam(value = "dept", required = false) String dept,
                                     @ApiParam(name = "deptName", value = "科室名称")
                                     @RequestParam(value = "deptName", required = false) String deptName,
                                     @ApiParam(name = "idCardType", value = "证件类别")
                                     @RequestParam(value = "idCardType", required = false) String idCardType,
                                     @ApiParam(name = "idType", value = "身份类别")
                                     @RequestParam(value = "idType", required = false) String idType,
                                     @ApiParam(name = "id", value = "医生id")
                                     @RequestParam(value = "id", required = false) String id,
                                     @ApiParam(name = "mark", value = "数据权限是否")
                                     @RequestParam(value = "mark", required = false) Integer mark) {
        try {
            BaseDoctorDO baseDoctorDO = dailyReportUploadService.saveDoctorInfo(id,photo,name,idcard,sex,mobile,dept,deptName,idCardType,idType,mark);
            return success(baseDoctorDO);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    /**
     *
     * @param dept
     * @param level
     * @param doctorId
     * @return
     */
    @GetMapping(value = "selectDailyReportByRole")
    @ApiOperation(value = "医生首页")
    public ObjEnvelop selectDailyReportByRole(@ApiParam(name = "dept", value = "院级管理员无需传科室code")
                                        @RequestParam(value = "dept", required = false) String dept,
                                        @ApiParam(name = "level", value = "1院级管理员,2科室管理员")
                                        @RequestParam(value = "level", required = false) Integer level,
                                        @ApiParam(name = "doctorId", value = "医生id")
                                        @RequestParam(value = "doctorId", required = false) String doctorId) {
        try {
            JSONObject jsonObject = dailyReportUploadService.selectDailyReportByRole(dept,level,doctorId);
            return success(jsonObject);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "selectHeaderList")
    @ApiOperation(value = "首页按照科室统计")
    public ListEnvelop selectHeaderList(@ApiParam(name = "dept", value = "科室code")
                                        @RequestParam(value = "dept", required = false) String dept,
                                        @ApiParam(name = "idType", value = "身份类别")
                                        @RequestParam(value = "idType", required = false) String idType,
                                        @ApiParam(name = "state", value = "核实状态0未核实1已核实")
                                        @RequestParam(value = "state", required = false) String state,
                                        @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 success(dailyReportUploadService.selectHeaderList(dept,idType,state,startDate,endDate,name));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectListByTotal")
    @ApiOperation(value = "获取列表的时间及数量")
    public ListEnvelop selectListByTotal(@ApiParam(name = "dept", value = "科室code")
                                         @RequestParam(value = "dept", required = false) String dept,
                                         @ApiParam(name = "idType", value = "身份类别")
                                         @RequestParam(value = "idType", required = false) String idType,
                                         @ApiParam(name = "status", value = "上报状态1已上报 2未上报")
                                         @RequestParam(value = "status", required = false) String status,
                                         @ApiParam(name = "state", value = "核实状态 0未核实 1已核实")
                                         @RequestParam(value = "state", required = false) String state,
                                         @ApiParam(name = "startDate", value = "开始时间")
                                         @RequestParam(value = "startDate", required = false) String startDate,
                                         @ApiParam(name = "endDate", value = "结束时间")
                                         @RequestParam(value = "endDate", required = false) String endDate,
                                         @ApiParam(name = "name", value = "名字搜索")
                                         @RequestParam(value = "name", required = false) String name) {
        try {
            JSONArray jsonArray = dailyReportUploadService.selectListByTotal(dept,idType,status,state,startDate,endDate,name);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectListInfoByTotal")
    @ApiOperation(value = "获取列表的具体人员信息")
    public ListEnvelop selectListInfoByTotal(@ApiParam(name = "dept", value = "科室code")
                                             @RequestParam(value = "dept", required = false) String dept,
                                             @ApiParam(name = "idType", value = "身份类别")
                                             @RequestParam(value = "idType", required = false) String idType,
                                             @ApiParam(name = "status", value = "上报状态1已上报 2未上报")
                                             @RequestParam(value = "status", required = false) String status,
                                             @ApiParam(name = "state", value = "核实状态 0未核实 1已核实")
                                             @RequestParam(value = "state", required = false) String state,
                                             @ApiParam(name = "startDate", value = "开始时间")
                                             @RequestParam(value = "startDate", required = false) String startDate,
                                             @ApiParam(name = "endDate", value = "结束时间")
                                             @RequestParam(value = "endDate", required = false) String endDate,
                                             @ApiParam(name = "name", value = "具体医生姓名")
                                             @RequestParam(value = "name", required = false) String name) {
        try {
            JSONArray jsonArray = dailyReportUploadService.selectListInfoByTotal(dept,idType,status,state,startDate,endDate,name);
            return success(jsonArray);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
//    @GetMapping(value = "open/pushListWriteDailyReport")
//    @ApiOperation(value = "健康上报数据导出", notes = "健康上报数据导出")
//    public Envelop pushListWriteDailyReport(@ApiParam(name = "startDate", value = "开始时间")
//                                 @RequestParam(value = "startDate", required = false) String startDate,
//                                 @ApiParam(name = "endDate", value = "结束时间")
//                                 @RequestParam(value = "endDate", required = false) String endDate,
//                                 @ApiParam(name = "dept", value = "科室id")
//                                 @RequestParam(value = "dept", required = false) String dept,
//                                 HttpServletResponse response) throws Exception {
//        try{
//            response.setContentType("octets/stream");
//            response.setHeader("Content-Disposition", "attachment; filename=" + new String(URLEncoder.encode("健康上报报表")+".xls"));
//            OutputStream os = response.getOutputStream();
//            return success(dailyReportUploadService.pushListWriteDailyReport(os, startDate,endDate,dept));
//        }catch (Exception e) {
//            return failedMixEnvelopException(e);
//        }
//    }
    @GetMapping(value = "selectRecordByDoctorIdAndConsumer")
    @ApiOperation(value = "查下上报最新一次记录", notes = "查下上报最新一次记录")
    public Envelop selectRecordByDoctorIdAndConsumer(@ApiParam(name = "doctorId", value = "医生id")
                                                     @RequestParam(value = "doctorId", required = false) String doctorId) {
        try{
            return success(dailyReportUploadService.selectRecordByDoctorIdAndConsumer(doctorId));
        }catch (Exception e) {
            return failedMixEnvelopException(e);
        }
    }
    @GetMapping(value = "findDoctorByHospitalAndDept")
    @ApiOperation(value = "查询部门下医生", notes = "查询部门下医生")
    public ListEnvelop findDoctorByHospitalAndDept(@ApiParam(name = "orgCode", value = "机构code")
                                                   @RequestParam(value = "orgCode", required = false) String orgCode,
                                                   @ApiParam(name = "dept", value = "部门code")
                                                   @RequestParam(value = "dept", required = false) String dept,
                                                   @ApiParam(name = "doctorCode", value = "需要置顶医生")
                                                   @RequestParam(value = "doctorCode", required = false) String doctorCode,
                                                   @ApiParam(name = "key", value = "关键字搜索,医生名字/科室名称/专长")
                                                   @RequestParam(value = "key", required = false) String key,
                                                   @ApiParam(name = "flag", value = "是否核实0未核实1已核实")
                                                   @RequestParam(value = "flag", required = false) Integer flag) {
        try {
            return success(dailyReportUploadService.findDoctorByHospitalAndDept(orgCode, dept, doctorCode, key, flag));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "selectIndexTotalCircle")
    @ApiOperation(value = "首页上报分析", notes = "首页上报分析")
    public Envelop selectIndexTotalCircle(@ApiParam(name = "flag", value = "1周2月")
                                          @RequestParam(value = "flag", required = false) Integer flag,
                                          @ApiParam(name = "dept", value = "院级管理员无需传科室code")
                                          @RequestParam(value = "dept", required = false) String dept,
                                          @ApiParam(name = "level", value = "1院级管理员,2科室管理员")
                                          @RequestParam(value = "level", required = false) Integer level) throws Exception {
        try{
            return success(dailyReportUploadService.selectIndexTotalCircle(flag,dept,level));
        }catch (Exception e) {
            return failedMixEnvelopException(e);
        }
    }
    @GetMapping(value = "selectHeaderTotal")
    @ApiOperation(value = "首页统计")
    public ObjEnvelop selectHeaderTotal(@ApiParam(name = "dept", value = "科室code")
                                        @RequestParam(value = "dept", required = false) String dept,
                                        @ApiParam(name = "idType", value = "身份类别")
                                        @RequestParam(value = "idType", required = false) String idType,
                                        @ApiParam(name = "status", value = "上报状态1已上报 2未上报")
                                        @RequestParam(value = "status", required = false) String status,
                                        @ApiParam(name = "state", value = "核实状态0未核实1已核实")
                                        @RequestParam(value = "state", required = false) String state,
                                        @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 {
            JSONObject jsonObject = dailyReportUploadService.selectHeaderTotal(dept,idType,status,state,startDate,endDate,name);
            return success(jsonObject);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
}

+ 33 - 0
svr/svr-iot/src/main/resources/application.yml

@ -331,6 +331,39 @@ fast-dfs:
  tracker-server: 172.19.103.54:22122 #服务器地址
fastDFS:
  fastdfs_file_url: http://172.19.103.54:80/
wechat:
  id: xm_zsyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
---
spring:
  profiles: iotprodIn
  datasource:
    url: jdbc:mysql://10.95.22.143:3306/xmiot?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: wlyy_new
    password: J4&y9sk#1G
  #  elasticsearch:
  #    cluster-name: jkzl #默认即为elasticsearch  集群名
  #    cluster-nodes: 10.90.32.3:20011,10.90.32.3:20011 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
  #    jest:
  #      uris: http://10.90.32.3:20011,http://10.90.32.3:20012
  wlyy:
    url: http://10.95.22.10:8011/wlyy/
    appid: 915d0345-5b1d-11e6-8344-fa163e8aee62
    appsecret: 915d0345-5b1d-11e6-8344-fa163e8aee62
#hlw:
#  baseUrl: https://zb.xmtyw.cn/medicine/cityihealth/base
es:
  pwflag: 1 # 1需要密码,2不需要密码
  host:  http://10.95.91.4:9200
  tHost: 10.95.91.5:9300
  clusterName: jkzl
  securityUser: zjxl:6Dbq&fHg
  user: zjxl
  password: 6Dbq&fHg
fast-dfs:
  tracker-server: 10.95.22.139:22122 #服务器地址
fastDFS:
  fastdfs_file_url: http://10.95.22.140:23000/
wechat:
  id: xm_zsyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle

+ 7 - 0
svr/svr-iot/src/main/resources/bootstrap.yml

@ -100,6 +100,13 @@ spring:
---
spring:
  profiles: iotprod
  cloud:
    config:
      uri: ${wlyy.pring.config.uri:http://127.0.0.1:1221}
      label: ${wlyy.spring.config.label:master}
---
spring:
  profiles: iotprodIn
  cloud:
    config:
      uri: ${wlyy.pring.config.uri:http://127.0.0.1:1221}