Browse Source

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management

lyr 8 years ago
parent
commit
7213e38295

+ 31 - 0
src/main/java/com/yihu/wlyy/entity/doctor/profile/Doctor.java

@ -5,6 +5,7 @@ import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.yihu.wlyy.entity.IdEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
@ -319,4 +320,34 @@ public class Doctor extends IdEntity {
	public void setIsFamous(Integer isFamous) {
		this.isFamous = isFamous;
	}
    /**
     * 是否为专科医生。
     *
     * @return
     */
    @Transient
	public boolean isProfessionalDoctor(){
	    return level == 1;
    }
    /**
     * 是否为全科医生。
     *
     * @return
     */
    @Transient
	public boolean isGeneralDoctor(){
	    return level == 2;
    }
    /**
     * 是否为健康管理师。
     *
     * @return
     */
    @Transient
    public boolean isHealthDoctor(){
        return level == 3;
    }
}

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

@ -28,9 +28,9 @@ public interface DoctorAdminTeamDao extends
    Integer getHealthDoctorSignCount(@Param(value = "healthDoctorCode") String healthDoctorCode,
                                     @Param(value = "patterns") List<String> patterns);
    @Query("SELECT p FROM SignFamily s, Patient p WHERE doctor = :doctorCode AND s.doctorHealth IN (:patterns) AND s" +
            ".patient = p.code")
    Page<Patient> getHealthDoctorSigningPatients(@Param(value = "doctorCode") String doctorCode,
                                                 @Param(value = "patterns") List<String> patterns,
    @Query("SELECT p FROM SignFamily s, Patient p WHERE s.doctorHealth = :healthDoctorCode AND s.doctor IN " +
            "(:generalDoctors) AND s.patient = p.code")
    Page<Patient> getHealthDoctorSigningPatients(@Param(value = "healthDoctorCode") String healthDoctorCode,
                                                 @Param(value = "generalDoctors") List<String> generalDoctors,
                                                 Pageable pageable);
}

+ 8 - 0
src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamMemberDao.java

@ -33,6 +33,14 @@ public interface DoctorAdminTeamMemberDao extends
    @Query("SELECT 1 FROM AdminTeamMember WHERE teamId = :teamId AND doctorCode = :doctorCode")
    Integer isMemberExist(@Param(value = "teamId") long teamId, @Param(value = "doctorCode") String doctorCode);
    @Query("SELECT d from Hospital h, Doctor d WHERE d.name like :doctorName " +
            "AND h.code = d.hospital AND h.code = :orgCode AND d.code not in " +
            "(select t.doctorCode from AdminTeamMember t WHERE t.teamId = :teamId)")
    Page<Doctor> findTeamExcludedMembersWithDoctorName(@Param(value = "orgCode") String orgCode,
                                                       @Param(value = "doctorName") String doctorName,
                                                       @Param(value = "teamId") long teamId,
                                                       Pageable pageable);
    @Query("SELECT d from Hospital h, Doctor d WHERE h.code = d.hospital AND h.code = :orgCode AND d.code not in " +
            "(select t.doctorCode from AdminTeamMember t WHERE t.teamId = :teamId)")
    Page<Doctor> findTeamExcludedMembers(@Param(value = "orgCode") String orgCode,

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

@ -770,4 +770,11 @@ public class ConsultTeamService extends ConsultService {
		ConsultTeam consultTeam= consultTeamDao.findByParientCodeAndSignTypeAndDoctor(patientCode,doctor,"2");
		return consultTeam;
	}
	public void transfers(String uid, String doctor, String consult) {
		String[] doctors=doctor.split(",");
		for(int i=0;i<doctors.length;i++){
			transfer(uid,doctors[i],consult);
		}
	}
}

+ 120 - 28
src/main/java/com/yihu/wlyy/service/app/team/AdminTeamService.java

@ -13,6 +13,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.*;
@ -30,11 +31,23 @@ public class AdminTeamService extends BaseService {
    @Autowired
    DoctorAdminTeamMemberDao memberDao;
    //-----------------Team Operation----------------------
    /**
     * 获取团队数量。
     *
     * @return
     */
    public long getTeamCount() {
        return teamDao.count();
    }
    /**
     * 创建团队。
     *
     * @param teamName
     * @param leaderCode
     * @param orgCode
     * @return
     */
    public AdminTeam createTeam(String teamName, String leaderCode, String orgCode) {
        AdminTeam team = new AdminTeam();
        team.setName(teamName);
@ -48,11 +61,23 @@ public class AdminTeamService extends BaseService {
        return team;
    }
    /**
     * 获取团队信息。
     *
     * @param id
     */
    public AdminTeam getTeam(long id) {
        AdminTeam team = teamDao.findOne(id);
        return team;
    }
    /**
     * 更新团队名称。
     *
     * @param teamId
     * @param teamName
     * @return
     */
    public AdminTeam updateTeamName(long teamId, String teamName) {
        AdminTeam team = getTeam(teamId);
        if (team != null) {
@ -64,6 +89,13 @@ public class AdminTeamService extends BaseService {
        return team;
    }
    /**
     * 更新团队领导。
     *
     * @param teamId
     * @param doctorCode
     * @return
     */
    public AdminTeam updateTeamLeader(long teamId, String doctorCode) {
        AdminTeam team = getTeam(teamId);
        if (team != null) {
@ -75,14 +107,25 @@ public class AdminTeamService extends BaseService {
        return team;
    }
    public List<AdminTeam> getDoctorTeams(String doctorCode){
    /**
     * 获取此医生所在的团队列表。
     *
     * @param doctorCode
     * @return
     */
    public List<AdminTeam> getDoctorTeams(String doctorCode) {
        return memberDao.findDoctorTeams(doctorCode);
    }
    //-----------------Member Operation----------------------
    public void addMember(long teamId, String doctorCode){
    /**
     * 添加成员。
     *
     * @param teamId
     * @param doctorCode
     */
    public void addMember(long teamId, String doctorCode) {
        Integer count = memberDao.isMemberExist(teamId, doctorCode);
        if(count == null || count == 0) {
        if (count == null || count == 0) {
            AdminTeamMember member = new AdminTeamMember();
            member.setTeamId(teamId);
            member.setDoctorCode(doctorCode);
@ -91,46 +134,76 @@ public class AdminTeamService extends BaseService {
        }
    }
    public void removeMember(long teamId, String doctorCode){
    /**
     * 移除成员。
     * <p>
     * 如果成员已经有跟团队内的某医生合作与患者签约,那么不能移除,必须等签约患者交接后才可以。
     *
     * @param teamId
     * @param doctorCode
     */
    public void removeMember(long teamId, String doctorCode) {
        AdminTeamMember member = memberDao.findByTeamIdAndDoctorCodeOrderByDoctorCodeAsc(teamId, doctorCode);
        if(member != null) memberDao.delete(member);
        if (member != null) memberDao.delete(member);
    }
    public List<Doctor> getMembers(long teamId){
    public List<Doctor> getMembers(long teamId) {
        return memberDao.findAllMembers(teamId);
    }
    public List<Doctor> getExcludedMembers(String orgCode, long teamId, int page, int size){
    /**
     * 获取不在当前团队内的机构成员。
     *
     * @param orgCode
     * @param teamId
     * @param page
     * @param size
     * @return
     */
    public List<Doctor> getExcludedMembers(String orgCode, String doctorName, long teamId, int page, int size) {
        Pageable pageable = new PageRequest(page, size);
        Page<Doctor> doctors = memberDao.findTeamExcludedMembers(orgCode, teamId, pageable);
        Page<Doctor> doctors;
        if (StringUtils.isEmpty(doctorName)) {
            doctors = memberDao.findTeamExcludedMembers(orgCode, teamId, pageable);
        } else {
            doctors = memberDao.findTeamExcludedMembersWithDoctorName(orgCode,
                    "%" + doctorName + "%", teamId, pageable);
        }
        if (doctors == null) return null;
        return doctors.getContent();
    }
    public Map<String, Integer> getMemberSigningCount(List<Doctor> doctors){
    /**
     * 团队内所有成员的签约人数。
     *
     * @param doctors
     * @return
     */
    public Map<String, Integer> getMemberSigningCount(List<Doctor> doctors) {
        Map<String, Integer> counts = new HashMap<>();
        for (Doctor doctor : doctors){
            if (!(doctor.getLevel() == 2 || doctor.getLevel() == 3)) continue;
        for (Doctor doctor : doctors) {
            if (doctor.isProfessionalDoctor()) continue;
            boolean isHealthDoctor = doctor.getLevel() == 3;
            boolean isHealthDoctor = doctor.isHealthDoctor();
            List<String> partners = new ArrayList<>();
            for (Doctor partner : doctors){
                if(partner == doctor) continue;
            for (Doctor partner : doctors) {
                if (partner == doctor) continue;
                if (isHealthDoctor && partner.getLevel() == 2){
                if (isHealthDoctor && partner.isGeneralDoctor()) {
                    partners.add(partner.getCode());
                } else if (!isHealthDoctor && partner.getLevel() == 3) {
                } else if (!isHealthDoctor && partner.isHealthDoctor()) {
                    partners.add(partner.getCode());
                }
            }
            Integer signingCount = 0;
            if(partners.isEmpty()){
            Integer signingCount;
            if (partners.isEmpty()) {
                signingCount = 0;
            } else if (isHealthDoctor){
            } else if (isHealthDoctor) {
                signingCount = teamDao.getHealthDoctorSignCount(doctor.getCode(), partners);
            } else {
                signingCount = teamDao.getDoctorSignCount(doctor.getCode(), partners);
@ -142,27 +215,46 @@ public class AdminTeamService extends BaseService {
        return counts;
    }
    public List<Patient> getMemberSigningPatients(long teamId, String doctorCode, int page, int size){
        List<String> healthDoctors = new ArrayList<>();
    /**
     * 团队内所有成员的签约患者列表。以健康管理师为中心,与全科医生为准的交集。
     *
     * @param teamId
     * @param healthDoctorCode
     * @param page
     * @param size
     * @return
     */
    public List<Patient> getMemberSigningPatients(long teamId, String healthDoctorCode, int page, int size) {
        List<String> generalDoctors = new ArrayList<>();
        List<Doctor> doctors = getMembers(teamId);
        for (Doctor doctor : doctors){
            if (doctor.getLevel() != 3) continue;
        for (Doctor doctor : doctors) {
            if (doctor.getLevel() != 2) continue;
            healthDoctors.add(doctor.getCode());
            generalDoctors.add(doctor.getCode());
        }
        Page<Patient> result = teamDao.getHealthDoctorSigningPatients(
                doctorCode, healthDoctors,
                healthDoctorCode, generalDoctors,
                new PageRequest(page, size));
        return result.getContent();
    }
    /**
     * 保存团队。
     *
     * @param team
     */
    private void saveTeam(AdminTeam team) {
        teamDao.save(team);
    }
    private void saveMember(AdminTeamMember member){
    /**
     * 保存成员。
     *
     * @param member
     */
    private void saveMember(AdminTeamMember member) {
        memberDao.save(member);
    }
}

+ 3 - 2
src/main/java/com/yihu/wlyy/web/doctor/account/DoctorController.java

@ -365,13 +365,14 @@ public class DoctorController extends BaseController {
                    json.put("hospitalName", doctor.getHosptialName());
                    json.put("dept", doctor.getDept());
                    json.put("deptName", doctor.getDeptName());
                    json.put("expertise", doctor.getExpertise());
                    array.put(json);
                }
            }
            return write(200, "获取科室列表成功!", "list", array);
            return write(200, "获取名医列表成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "获取科室列表失败!");
            return error(-1, "获取名医列表失败!");
        }
    }
    /**

+ 2 - 2
src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java

@ -127,7 +127,7 @@ public class DoctorConsultController extends WeixinBaseController {
	/**
	 * 三师咨询转接接口
	 * @param consult 图咨询标识
	 * @param doctor 转接对象标识
	 * @param doctor 转接对象标识 健康管理师转全科是 1个    全科转专科是多个  传多个doctor逗号分隔
	 * @param type 转接对象类型,1三师团队,2指定医生,3工作组团队  
	 * @return
	 */
@ -138,7 +138,7 @@ public class DoctorConsultController extends WeixinBaseController {
			String doctor, 
			@RequestParam(required = false)int type) {
		try {
			consultTeamService.transfer(getUID(), doctor, consult);
			consultTeamService.transfers(getUID(), doctor, consult);
			return success("转接成功");
		} catch (Exception e) {
			error(e);

+ 22 - 5
src/main/java/com/yihu/wlyy/web/doctor/team/AdminTeamController.java

@ -8,13 +8,16 @@ import com.yihu.wlyy.service.app.team.AdminTeamService;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.beanutils.BeanUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -137,12 +140,13 @@ public class AdminTeamController extends BaseController {
    @RequestMapping(value = "/{team_id}/members/excluded", method = RequestMethod.GET)
    @ApiOperation(value = "获取机构内不在特定团队的医生")
    public String getExcludedTeamMembers(@RequestParam("org_code") String orgCode,
                                         @RequestParam(value = "doctor_name", required = false) String doctorName,
                                         @PathVariable("team_id") long teamId,
                                         @RequestParam(value = "page", required = false, defaultValue = "1") int page,
                                         @RequestParam(value = "size", required = false, defaultValue = "10") int size) {
        try {
            page = page <= 0 ? 0 : page - 1;
            List<Doctor> members = memberService.getExcludedMembers(orgCode, teamId, page, size);
            List<Doctor> members = memberService.getExcludedMembers(orgCode, doctorName, teamId, page, size);
            return write(200, "OK", "data", new JSONArray(members));
        } catch (Exception e) {
@ -196,14 +200,27 @@ public class AdminTeamController extends BaseController {
    @RequestMapping(value = "/teams/{team_id}/members/{doctor_code}/signing", method = RequestMethod.GET)
    @ApiOperation(value = "获取团队医生的队内签约患者列表")
    public String getDoctorSignPatients(@PathVariable("team_id") long teamId,
                                        @PathVariable("doctor_code") String doctorCode,
                                        @ApiParam(value = "健康管理师代码")
                                        @PathVariable("doctor_code") String healthDoctorCode,
                                        @RequestParam(value = "page", defaultValue = "1", required = false) int page,
                                        @RequestParam(value = "size", defaultValue = "10", required = false) int size) {
        try {
            page = page <= 0 ? 0 : page - 1;
            List<Patient> patients = memberService.getMemberSigningPatients(teamId, doctorCode, page, size);
            List<Patient> patients = memberService.getMemberSigningPatients(teamId, healthDoctorCode, page, size);
            List<Map<String, Object>> simplifiedPatients = new ArrayList<>();
            for (Patient patient : patients){
                Map<String, Object> simplified = new HashMap<>();
                simplified.put("code", patient.getCode());
                simplified.put("name", patient.getName());
                simplified.put("sex", patient.getSex());
                simplified.put("photo", patient.getPhone());
                simplified.put("birthday", patient.getBirthday());
                simplified.put("disease", patient.getDisease());
                simplifiedPatients.add(simplified);
            }
            return write(200, "OK", "data", new JSONArray(patients));
            return write(200, "OK", "data", new JSONArray(simplifiedPatients));
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());