|
@ -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);
|
|
|
}
|
|
|
}
|