Преглед изворни кода

Merge branch 'dev' of chenweida/patient-co-management into dev

chenweida пре 8 година
родитељ
комит
b18d028257

+ 35 - 19
src/main/java/com/yihu/wlyy/job/FollowUpJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -7,6 +8,7 @@ import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +51,8 @@ public class FollowUpJob implements Job {
    @Autowired
    private JdbcTemplate jdbcTemplate_wlyy;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private org.apache.tomcat.jdbc.pool.DataSource fvdataSource=new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
@ -91,10 +95,10 @@ public class FollowUpJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的医生
        List<Doctor> doctors = doctorDao.findAllCertifiedDoctors();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -113,7 +117,7 @@ public class FollowUpJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
@ -127,17 +131,30 @@ public class FollowUpJob implements Job {
            cityCount++;
            //统计团队------------------start ------------------
            String doctorCode = (String) plan.get("doctor_uid");//得到随访中的全部医生的code
            compute(tjQkdoctorMap, doctorCode);
            String teamId= doctorAdminTeamDao.findIdByLeaderCode(doctorCode)+"";
            if(teamId==null){
                errorContent.append("随访id:"+plan.get("id")+",随访的医生所属的团队不存在");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(teamId);
            if(adminTeam==null){
                errorContent.append("随访id:"+plan.get("id")+",随访的医生所属的团队不存在");
                isAll=false;
                continue;
            }
            compute(tjAdminTeamMap, teamId);
            qkCount++;
            //统计机构------------------start ------------------
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            if(doctor==null){
                errorContent.append("随访id:"+plan.get("id")+",随访的医生为空或者不存在");
            String orgCode = adminTeam.getOrgCode();
            Hospital hospital=hospitalsMap.get(orgCode);
            if(hospital==null){
                errorContent.append("随访id:"+plan.get("id")+",随访的医生所属的团队的机构不存在");
                isAll=false;
                continue;
            }
            String orgCode = doctor.getHospital();
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
@ -150,7 +167,6 @@ public class FollowUpJob implements Job {
            }
            orgCount++;
            //统计区------------------start ------------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("随访id:"+plan.get("id")+",随访的医生所属的机构为空或者不存在");
                isAll=false;
@ -163,9 +179,9 @@ public class FollowUpJob implements Job {
        }
        //保存统计的结果
        //保存全科医生的随访统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -178,12 +194,12 @@ public class FollowUpJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save(tjQkdoctorMap, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, key);
            String key=adminTeam.getId()+"";
            save(tjAdminTeamMap, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, key);
        }
        //保存机构的随访统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {

+ 3 - 0
src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java

@ -234,4 +234,7 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
    // 最近24小时内未回复的项目
    @Query("FROM ConsultTeam a where TIMESTAMPDIFF(SECOND, a.czrq, CURRENT_TIME) < 86400 and a.status = 0 order by a.czrq desc")
    Page<ConsultTeam> getUnresponsedConsultIn24Hours(Pageable pageable);
	@Query("FROM ConsultTeam a where a.type=?1 and a.adminTeamId is null")
	List<ConsultTeam> findByTypeAndAdminTeamIdIsNull(Integer s);
}

+ 5 - 10
src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamDao.java

@ -5,6 +5,7 @@ import com.yihu.wlyy.entity.patient.Patient;
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.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
@ -13,7 +14,7 @@ import java.util.List;
/**
 * 行政团队DAO。
 *
 * 
 * @author Sand
 */
public interface DoctorAdminTeamDao extends
@ -60,22 +61,16 @@ public interface DoctorAdminTeamDao extends
     * @param patientCode
     * @return
     */
    @Query("SELECT t.id, t.name, t.leaderCode, d1.code, d1.name, d2.code," +
            " d2.name FROM SignFamily f, Doctor d1, Doctor d2, AdminTeam t, AdminTeamMember m " +
    @Query("SELECT  t.id, t.name, d1.code, d1.name, d2.code, d2.name\n" +
            "FROM SignFamily f, Doctor d1, Doctor d2, AdminTeam t, AdminTeamMember m \n" +
            "WHERE d1.code = f.doctor AND f.doctorHealth = d2.code AND f.patient = :patientCode AND m.doctorCode = " +
            "d1.code AND m.teamId = t.id")
    Object getPatientSigningTeam(@Param("patientCode") String patientCode);
    /**
     * 获取领导医生的行政团队。
     *
     * @param leaderCode
     * @return
     */
    @Query("SELECT t.id from AdminTeam t WHERE t.leaderCode = :leaderCode")
    Long findIdByLeaderCode(@Param("leaderCode") String leaderCode);
    @Query(" FROM AdminTeam t")
    @Query(" from AdminTeam t")
    List<AdminTeam> findAllTeam();
}

+ 9 - 0
src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java

@ -8,6 +8,7 @@ package com.yihu.wlyy.repository.patient;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
@ -277,4 +278,12 @@ public interface SignFamilyDao extends PagingAndSortingRepository<SignFamily, Lo
	//找出家庭签约中 团队是空的值
	@Query("select a from SignFamily a where a.type = 2 and a.status = 1 and a.adminTeamId is null")
	List<SignFamily> findBySignTypeAndTeamCode();
	//找出没有健康管理师的签约数据
	@Query("select a from SignFamily a where a.type = 2 and a.status >= 1 and a.doctorHealth is null and a.doctor=?1 order by a.czrq desc")
	List<SignFamily> findNoHealthSignFamilyNum(String doctor);
	//找出没有健康管理师的签约数据
	@Query("select a from SignFamily a where a.type = 2 and a.status >= 1 and a.doctorHealth is null and a.doctor=?1 order by a.czrq desc")
	Page<SignFamily> findNoHealthSignFamilyHealth(String doctor, Pageable pageRequest);
}

+ 24 - 0
src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java

@ -868,4 +868,28 @@ public class ConsultTeamService extends ConsultService {
            transfer(uid, doctors[i], consult);
        }
    }
    public String produceConsultAdminTeamCode() {
        StringBuffer sf=new StringBuffer();
        StringBuffer sf1=new StringBuffer();
        Long size=0L;
        //找出家庭签约中团队code是空的
        List<ConsultTeam> consultTeams= consultTeamDao.findByTypeAndAdminTeamIdIsNull(2);
        sf.append("家庭签约咨询中团队code是空的数据数:"+consultTeams.size());
        for(ConsultTeam consultTeam:consultTeams){
            //得到签约中的全科医生的团队
            SignFamily signfamily= signFamilyDao.findByjiatingPatient(consultTeam.getPatient());
            if(signfamily!=null){
                if(signfamily.getAdminTeamId()!=null&&signfamily.getAdminTeamId()>0){
                    consultTeam.setAdminTeamId(signfamily.getAdminTeamId());
                    size++;
                }
            }else{
                sf1.append(",找不到医生所属的团队,家庭签约咨询的Id:"+consultTeam.getId());
            }
        }
        sf.append(",填充团队的签约数据数:"+size);
        sf.append(sf1);
        return sf.toString();
    }
}

+ 46 - 35
src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -97,8 +97,8 @@ public class FamilyContractService extends BaseService {
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    public SignFamily findSignFamilyByCode(String code) {
        return signFamilyDao.findByCodeAndType(code, 2);
    public SignFamily findSignFamilyByCode(String code){
       return signFamilyDao.findByCodeAndType(code,2);
    }
    public SignFamily findByPatientByType(String patient, int type) {
@ -1651,25 +1651,25 @@ public class FamilyContractService extends BaseService {
    }
    public String produceSignTeamCode() {
        StringBuffer sf = new StringBuffer();
        StringBuffer sf1 = new StringBuffer();
        Long size = 0L;
    public String produceSignAdminTeamCode() {
        StringBuffer sf=new StringBuffer();
        StringBuffer sf1=new StringBuffer();
        Long size=0L;
        //找出家庭签约中团队code是空的
        List<SignFamily> signFamilys = signFamilyDao.findBySignTypeAndTeamCode();
        sf.append("家庭签约中团队code是空的数据数:" + signFamilys.size());
        for (SignFamily signFamily : signFamilys) {
        List<SignFamily> signFamilys= signFamilyDao.findBySignTypeAndTeamCode();
        sf.append("家庭签约中团队code是空的数据数:"+signFamilys.size());
        for(SignFamily signFamily:signFamilys){
            //得到签约中的全科医生的团队
            String doctorCode = signFamily.getDoctor();
            Long id = doctorAdminTeamDao.findIdByLeaderCode(doctorCode);
            if (id != null && id > 0) {
            String doctorCode=signFamily.getDoctor();
            Long id= doctorAdminTeamDao.findIdByLeaderCode(doctorCode);
            if(id!=null&&id>0){
                size++;
                signFamily.setAdminTeamId(id);
            } else {
                sf1.append(",找不到医生所属的团队,医生code:" + doctorCode);
            }else{
                sf1.append(",找不到医生所属的团队,医生code:"+doctorCode);
            }
        }
        sf.append(",填充团队的签约数据数:" + size);
        sf.append(",填充团队的签约数据数:"+size);
        sf.append(sf1);
        return sf.toString();
    }
@ -1677,28 +1677,24 @@ public class FamilyContractService extends BaseService {
    /**
     * 分配健管师
     *
     * @param patient      患者code
     * @param patient 患者code
     * @param healthDoctor 健康管理师code
     * @return
     */
    public JSONObject updateSignInfo(String patient, String healthDoctor, String expensesType) {
    public JSONObject updateSignInfo(String patient,String healthDoctor,String expensesType){
        JSONObject result = new JSONObject();
        Doctor doctor = doctorDao.findByCode(healthDoctor);
        SignFamily signFamily = signFamilyDao.findByjiatingPatientYes(patient);
        if (signFamily == null) {
            result.put("status", -1);
            result.put("msg", "居民不存在家庭签约");
            return result;
        if(signFamily == null){
            result.put("status",-1);
            result.put("msg","居民不存在家庭签约");
        }
        if (doctor == null) {
            result.put("status", -2);
            result.put("msg", "医生不存在");
            return result;
        if(doctor == null){
            result.put("status",-2);
            result.put("msg","医生不存在");
        }
        // 健管师更新
        if (StringUtils.isNotEmpty(healthDoctor)) {
        if(StringUtils.isNotEmpty(healthDoctor)) {
            if (StringUtils.isNotEmpty(signFamily.getDoctorHealth())) {
                // 取消原有健康管理师的家庭签约分组,并新增分组
                List<DoctorPatientGroupInfo> groups = doctorPatientGroupInfoDao.findGroupInfoByPatientAndDoctor(signFamily.getDoctorHealth(), patient);
@ -1796,20 +1792,35 @@ public class FamilyContractService extends BaseService {
            signFamily.setCzrq(new Date());
        }
        // 补贴类型更新
        if (StringUtils.isNotEmpty(expensesType)) {
        if(StringUtils.isNotEmpty(expensesType)){
            if (StringUtils.isNotEmpty(signFamily.getMedicalInsuranceNum())) {
                result.put("status", -3);
                result.put("msg", "数据已上传社保,不能修改补贴类型");
                return result;
            } else {
                result.put("msg","数据已上传社保,不能修改补贴类型");
            }else{
                signFamily.setExpensesType(expensesType);
            }
        }
        result.put("status", 1);
        result.put("msg", "更新成功");
        result.put("status",1);
        result.put("msg","更新成功");
        return result;
    }
    public List<SignFamily> findNoHealthSignFamilyNum(String doctor) {
       return  signFamilyDao.findNoHealthSignFamilyNum(doctor);
    }
    public Page<SignFamily> findNoHealthSignFamilyHealth(String doctor, Integer page, Integer pagesize) {
        if (pagesize==null||pagesize <= 0) {
            pagesize = 10;
        }
        if (page==null||page < 0) {
            page = 0;
        }
        // 分页信息
        PageRequest pageRequest = new PageRequest(page, pagesize);
        return signFamilyDao.findNoHealthSignFamilyHealth(doctor, pageRequest);
    }
}

+ 22 - 4
src/main/java/com/yihu/wlyy/web/data/DataHandlingController.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.web.data;
import com.yihu.wlyy.entity.organization.HospitalDept;
import com.yihu.wlyy.service.app.consult.ConsultTeamService;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.web.BaseController;
import org.json.JSONArray;
@ -14,7 +15,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
/**
 * Created by Administrator on 2016.10.08.
 * 历史数据处理控制器
 * 修改历史数据处理控制器
 */
@Controller
@RequestMapping(value = "/dataHandling")
@ -22,14 +23,31 @@ public class DataHandlingController extends BaseController {
    @Autowired
    private FamilyContractService familyContractService;
    @Autowired
    private ConsultTeamService consultTeamService;
    /**
     * 生成签约表中的行政团队的code
     */
    @RequestMapping(value = "produceSignTeamCode")
    @RequestMapping(value = "produceSignAdminTeamCode")
    @ResponseBody
    public String produceSignAdminTeamCode() {
        try {
            return write(200, familyContractService.produceSignAdminTeamCode());
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
    /**
     * 生成咨询表中中的行政团队的code
     * @return
     */
    @RequestMapping(value = "produceConsultAdminTeamCode")
    @ResponseBody
    public String produceSignTeamCode() {
    public String produceConsultAdminTeamCode() {
        try {
            return write(200, familyContractService.produceSignTeamCode());
            return write(200, consultTeamService.produceConsultAdminTeamCode());
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());

+ 54 - 0
src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java

@ -1,6 +1,8 @@
package com.yihu.wlyy.web.doctor.sign;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import com.yihu.wlyy.entity.message.Message;
@ -714,4 +716,56 @@ public class DoctorFamilyContractController extends WeixinBaseController {
            return error(-1, "更新失败");
        }
    }
    /**
     * 获取没有健康管理师的签约数据数目
     * @param doctor 医生code
     * @return
     */
    @RequestMapping(value = "/findNoHealthSignFamilyNum")
    @ResponseBody
    public String findNoHealthSignFamilyNum(String doctor) {
        try {
            List<SignFamily> signFamily = familyContractService.findNoHealthSignFamilyNum(doctor);
            JSONObject jo= new JSONObject();
            if(signFamily!=null&&signFamily.size()>0){
                jo.put("date",DateUtil.dateToStr(signFamily.get(0).getCzrq(),"yyyy-MM-dd"));
                jo.put("num",signFamily.size());
            }else{
                jo.put("num",0);
            }
            return write(200, "查询成功", "data", jo);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    @RequestMapping(value = "/findNoHealthSignFamilyHealth")
    @ResponseBody
    public String findNoHealthSignFamilyHealth(String doctor,Integer page,Integer pageSize) {
        try {
            JSONArray array = new JSONArray();
            Page<SignFamily> list = familyContractService.findNoHealthSignFamilyHealth(doctor, page, pageSize);
            if (list != null) {
                for (SignFamily sf : list) {
                    if (sf == null) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    json.put("code", sf.getCode());//签约code
                    json.put("patientCode", sf.getPatient());//患者code
                    json.put("patientName", sf.getName());//患者name
                    String idcard=sf.getIdcard();
                    json.put("patientAge",IdCardUtil.getAgeForIdcard(idcard) );//患者年龄
                    json.put("patientSex",IdCardUtil.getSexForIdcard(idcard) );//患者性别
                    array.put(json);
                }
            }
            return write(200, "签约数据加载成功!", "list", array); }
        catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
}

+ 7 - 8
src/main/java/com/yihu/wlyy/web/doctor/team/AdminTeamController.java

@ -192,8 +192,7 @@ public class AdminTeamController extends BaseController {
    @ApiOperation(value = "根据患者代码,获取医生团队信息")
    public String getTeam(@PathVariable("patient_code") String patientCode) {
        try {
            Map<String, Object> team = teamService.getPatientSigningTeam(patientCode, super.getUID());
           Map<String, Object> team = teamService.getPatientSigningTeam(patientCode,super.getUID());
            return write(200, "OK", "data", new JSONObject(team));
        } catch (Exception e) {
@ -227,7 +226,7 @@ public class AdminTeamController extends BaseController {
            page = page <= 0 ? 0 : page - 1;
            List<Patient> patients = memberService.getMemberSigningPatients(teamId, healthDoctorCode, page, size);
            List<Map<String, Object>> simplifiedPatients = new ArrayList<>();
            for (Patient patient : patients) {
            for (Patient patient : patients){
                Map<String, Object> simplified = new HashMap<>();
                simplified.put("code", patient.getCode());
                simplified.put("name", patient.getName());
@ -250,9 +249,9 @@ public class AdminTeamController extends BaseController {
        }
    }
    private List<Map<String, Object>> copyBeans(Collection<? extends Object> beans, String... propertyNames) {
    private List<Map<String, Object>> copyBeans(Collection<? extends Object> beans, String...propertyNames){
        List<Map<String, Object>> result = new ArrayList<>();
        for (Object bean : beans) {
        for (Object bean : beans){
            result.add(copyBeanProperties(bean, propertyNames));
        }
@ -266,11 +265,11 @@ public class AdminTeamController extends BaseController {
     * @param propertyNames
     * @return
     */
    private Map<String, Object> copyBeanProperties(Object bean, String... propertyNames) {
    private Map<String, Object> copyBeanProperties(Object bean, String...propertyNames){
        Map<String, Object> simplifiedBean = new HashMap<>();
        for (String propertyName : propertyNames) {
        for (String propertyName : propertyNames){
            Field field = ReflectionUtils.findField(bean.getClass(), propertyName);
            if (field != null) {
            if (field != null){
                field.setAccessible(true);
                Object value = ReflectionUtils.getField(field, bean);
                simplifiedBean.put(propertyName, value == null ? "" : value);