|
|
@ -4,15 +4,22 @@ package com.ccsens.carbasics.service; |
|
|
|
import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.lang.Snowflake; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.ccsens.carbasics.bean.dto.PatientDto; |
|
|
|
import com.ccsens.carbasics.bean.dto.QuestionnaireDto; |
|
|
|
import com.ccsens.carbasics.bean.po.Organization; |
|
|
|
import com.ccsens.carbasics.bean.po.Questionnaire; |
|
|
|
import com.ccsens.carbasics.bean.po.QuestionnaireDetail; |
|
|
|
import com.ccsens.carbasics.bean.po.QuestionnaireRecord; |
|
|
|
import com.ccsens.carbasics.bean.po.*; |
|
|
|
import com.ccsens.carbasics.bean.vo.QuestionnaireVo; |
|
|
|
import com.ccsens.carbasics.persist.dao.*; |
|
|
|
import com.ccsens.carbasics.util.Constant; |
|
|
|
import com.ccsens.carbasics.util.DefaultCodeError; |
|
|
|
import com.ccsens.cloudutil.bean.tall.dto.ProjectDto; |
|
|
|
import com.ccsens.cloudutil.feign.Tall3FeignClient; |
|
|
|
import com.ccsens.common.bean.dto.CMemberDto; |
|
|
|
import com.ccsens.common.bean.dto.CProjectDto; |
|
|
|
import com.ccsens.common.bean.vo.CProjectVo; |
|
|
|
import com.ccsens.common.service.IMemberService; |
|
|
|
import com.ccsens.common.service.IProjectService; |
|
|
|
import com.ccsens.util.PropUtil; |
|
|
|
import com.ccsens.util.RedisUtil; |
|
|
|
import com.ccsens.util.exception.BaseException; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
@ -20,9 +27,7 @@ import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
@ -46,6 +51,26 @@ public class QuestionnaireService implements IQuestionnaireService{ |
|
|
|
private OrganizationPositionDao positionDao; |
|
|
|
@Resource |
|
|
|
private QuestionnaireRecordDao recordDao; |
|
|
|
@Resource |
|
|
|
private OrganizationDepartmentDao departmentDao; |
|
|
|
@Resource |
|
|
|
private OrganizationMemberDao organizationMemberDao; |
|
|
|
@Resource |
|
|
|
private IProjectService projectService; |
|
|
|
@Resource |
|
|
|
private IMemberService memberService; |
|
|
|
@Resource |
|
|
|
private OrganizationProjectDao organizationProjectDao; |
|
|
|
@Resource |
|
|
|
private OrganizationMemberPositionDao organizationMemberPositionDao; |
|
|
|
@Resource |
|
|
|
private QuestionnaireRecordDao questionnaireRecordDao; |
|
|
|
@Resource |
|
|
|
private IFirstAidService firstAidService; |
|
|
|
@Resource |
|
|
|
private RedisUtil redisUtil; |
|
|
|
@Resource |
|
|
|
private Tall3FeignClient tall3FeignClient; |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<QuestionnaireVo.AreaInfo> queryArea(QuestionnaireDto.QueryArea param, Long userId) { |
|
|
@ -124,7 +149,7 @@ public class QuestionnaireService implements IQuestionnaireService{ |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public void submitQuestionnaire(QuestionnaireDto.SubmitQuestionnaire param, Long userId) { |
|
|
|
public Long submitQuestionnaire(QuestionnaireDto.SubmitQuestionnaire param, Long userId,String phone) throws Exception { |
|
|
|
QuestionnaireDetail questionnaireDetail = questionnaireDetailDao.selectByPrimaryKey(param.getDetailId()); |
|
|
|
if (ObjectUtil.isNull(questionnaireDetail)) { |
|
|
|
throw new BaseException(DefaultCodeError.QUESTIONNAIRE_DETAIL_ERROR); |
|
|
@ -144,15 +169,17 @@ public class QuestionnaireService implements IQuestionnaireService{ |
|
|
|
//2.校验是否已经有提交
|
|
|
|
Integer submitNum = questionnaireDetailDao.queryIsSubmit(param.getName()); |
|
|
|
if (0 < submitNum) { |
|
|
|
//TODO 3.加入项目
|
|
|
|
return; |
|
|
|
//加入项目
|
|
|
|
Long projectId = createHospitalOfNotExit(phone, userId); |
|
|
|
return projectId; |
|
|
|
} |
|
|
|
QuestionnaireDetail detail = new QuestionnaireDetail(); |
|
|
|
detail.setId(param.getDetailId()); |
|
|
|
detail.setSubmitStatus(Constant.SubmitStatus.submit.status); |
|
|
|
questionnaireDetailDao.updateByPrimaryKeySelective(detail); |
|
|
|
//TODO 创建项目
|
|
|
|
// asyncService.createHospitalOfNotExit();
|
|
|
|
//创建项目
|
|
|
|
Long projectId = createHospitalOfNotExit(phone,userId); |
|
|
|
return projectId; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -179,4 +206,218 @@ public class QuestionnaireService implements IQuestionnaireService{ |
|
|
|
return detailInfo; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 提交问卷后的后续操作 |
|
|
|
* @param phone 手机号 |
|
|
|
* @param userId 用户id |
|
|
|
* @throws Exception 异常 |
|
|
|
*/ |
|
|
|
public Long createHospitalOfNotExit(String phone, Long userId) throws Exception { |
|
|
|
//查询基本信息的code与答案
|
|
|
|
HashMap<String, String> codeAndAnswer = new HashMap<>(); |
|
|
|
List<QuestionnaireVo.QuestionnaireInfo> infoList = questionnaireRecordDao.queryInfo(userId); |
|
|
|
if (CollectionUtil.isNotEmpty(infoList)) { |
|
|
|
for (QuestionnaireVo.QuestionnaireInfo questionnaireInfo : infoList) { |
|
|
|
codeAndAnswer.put(questionnaireInfo.getCode(),questionnaireInfo.getAnswer()); |
|
|
|
} |
|
|
|
} |
|
|
|
//医院名称
|
|
|
|
String hospitalName = codeAndAnswer.get(Constant.BasicInformation.hospitalName.code); |
|
|
|
//部门名称
|
|
|
|
String departmentName = codeAndAnswer.get(Constant.BasicInformation.department.code); |
|
|
|
//成员名称
|
|
|
|
String memberName = codeAndAnswer.get(Constant.BasicInformation.person.code); |
|
|
|
//查询职位id
|
|
|
|
Long positionId = positionDao.queryByName(codeAndAnswer.get(Constant.BasicInformation.position.code)); |
|
|
|
|
|
|
|
//部门code
|
|
|
|
String departmentCode = ""; |
|
|
|
if (Constant.DepartmentAndCode.SHEN_NEI.name.equals(departmentName)) { |
|
|
|
departmentCode = Constant.DepartmentAndCode.SHEN_NEI.code; |
|
|
|
} |
|
|
|
if (Constant.DepartmentAndCode.NEI_KE.name.equals(departmentName)) { |
|
|
|
departmentCode = Constant.DepartmentAndCode.NEI_KE.code; |
|
|
|
} |
|
|
|
|
|
|
|
Organization organization = organizationDao.queryByName(hospitalName); |
|
|
|
if (ObjectUtil.isNull(organization)) { |
|
|
|
//创建医院
|
|
|
|
Organization newOrganization = new Organization(); |
|
|
|
newOrganization.setId(snowflake.nextId()); |
|
|
|
newOrganization.setName(codeAndAnswer.get(Constant.BasicInformation.hospitalName.code)); |
|
|
|
if (Constant.HospitalLevel.two.explain.equals(codeAndAnswer.get(Constant.BasicInformation.hospitalLevel.code))) { |
|
|
|
newOrganization.setLevel(Constant.HospitalLevel.two.level); |
|
|
|
}else { |
|
|
|
newOrganization.setLevel(Constant.HospitalLevel.three.level); |
|
|
|
} |
|
|
|
newOrganization.setOrganizationType(Constant.OrganizationType.HOSPITAL.status); |
|
|
|
organizationDao.insertSelective(newOrganization); |
|
|
|
//创建部门
|
|
|
|
OrganizationDepartment department = new OrganizationDepartment(); |
|
|
|
department.setId(snowflake.nextId()); |
|
|
|
department.setName(departmentName); |
|
|
|
department.setCode(departmentCode); |
|
|
|
department.setOrganizationId(newOrganization.getId()); |
|
|
|
departmentDao.insertSelective(department); |
|
|
|
//创建用户
|
|
|
|
//查询用户是否存在
|
|
|
|
OrganizationMember organizationMember = organizationMemberDao.queryExistByUserId(userId); |
|
|
|
Long memberId = 0L; |
|
|
|
if (ObjectUtil.isNull(organizationMember)) { |
|
|
|
OrganizationMember member = new OrganizationMember(); |
|
|
|
member.setId(snowflake.nextId()); |
|
|
|
member.setUserId(userId); |
|
|
|
member.setName(memberName); |
|
|
|
member.setContact(phone); |
|
|
|
organizationMemberDao.insertSelective(member); |
|
|
|
memberId = member.getId(); |
|
|
|
}else { |
|
|
|
memberId = organizationMember.getId(); |
|
|
|
} |
|
|
|
//添加成员职位
|
|
|
|
//判断成员职位是否存在
|
|
|
|
Long isExist = organizationMemberPositionDao.queryByExistByMember(memberId,positionId,department.getId()); |
|
|
|
if (isExist == 0) { |
|
|
|
OrganizationMemberPosition position = new OrganizationMemberPosition(); |
|
|
|
position.setId(snowflake.nextId()); |
|
|
|
position.setPositionId(positionId); |
|
|
|
position.setDepartmentId(department.getId()); |
|
|
|
position.setMemberId(memberId); |
|
|
|
organizationMemberPositionDao.insertSelective(position); |
|
|
|
} |
|
|
|
//创建项目
|
|
|
|
return createProject(newOrganization.getId(), hospitalName, memberName, phone, userId); |
|
|
|
}else { |
|
|
|
OrganizationDepartment department = departmentDao.queryByOrganization(organization.getId(),departmentCode); |
|
|
|
if (ObjectUtil.isNull(department)) { |
|
|
|
//创建部门
|
|
|
|
OrganizationDepartment newDepartment = new OrganizationDepartment(); |
|
|
|
newDepartment.setId(snowflake.nextId()); |
|
|
|
newDepartment.setCode(departmentCode); |
|
|
|
newDepartment.setName(departmentName); |
|
|
|
newDepartment.setOrganizationId(organization.getId()); |
|
|
|
departmentDao.insertSelective(newDepartment); |
|
|
|
//创建用户
|
|
|
|
//查询用户是否存在
|
|
|
|
OrganizationMember organizationMember = organizationMemberDao.queryExistByUserId(userId); |
|
|
|
Long memberId = 0L; |
|
|
|
if (ObjectUtil.isNull(organizationMember)) { |
|
|
|
OrganizationMember member = new OrganizationMember(); |
|
|
|
member.setId(snowflake.nextId()); |
|
|
|
member.setUserId(userId); |
|
|
|
member.setName(memberName); |
|
|
|
member.setContact(phone); |
|
|
|
organizationMemberDao.insertSelective(member); |
|
|
|
memberId = member.getId(); |
|
|
|
}else { |
|
|
|
memberId = organizationMember.getId(); |
|
|
|
} |
|
|
|
//添加成员职位
|
|
|
|
//判断成员职位是否存在
|
|
|
|
Long isExist = organizationMemberPositionDao.queryByExistByMember(memberId,positionId,newDepartment.getId()); |
|
|
|
if (isExist == 0) { |
|
|
|
OrganizationMemberPosition position = new OrganizationMemberPosition(); |
|
|
|
position.setId(snowflake.nextId()); |
|
|
|
position.setPositionId(positionId); |
|
|
|
position.setDepartmentId(newDepartment.getId()); |
|
|
|
position.setMemberId(memberId); |
|
|
|
organizationMemberPositionDao.insertSelective(position); |
|
|
|
} |
|
|
|
//创建项目
|
|
|
|
return createProject(organization.getId(),hospitalName,memberName,phone,userId); |
|
|
|
}else { |
|
|
|
//创建用户
|
|
|
|
//查询用户是否存在
|
|
|
|
OrganizationMember organizationMember = organizationMemberDao.queryExistByUserId(userId); |
|
|
|
Long memberId = 0L; |
|
|
|
if (ObjectUtil.isNull(organizationMember)) { |
|
|
|
OrganizationMember member = new OrganizationMember(); |
|
|
|
member.setId(snowflake.nextId()); |
|
|
|
member.setUserId(userId); |
|
|
|
member.setName(memberName); |
|
|
|
member.setContact(phone); |
|
|
|
organizationMemberDao.insertSelective(member); |
|
|
|
memberId = member.getId(); |
|
|
|
}else { |
|
|
|
memberId = organizationMember.getId(); |
|
|
|
} |
|
|
|
//添加成员职位
|
|
|
|
//判断成员职位是否存在
|
|
|
|
Long isExist = organizationMemberPositionDao.queryByExistByMember(memberId,positionId,department.getId()); |
|
|
|
if (isExist == 0) { |
|
|
|
OrganizationMemberPosition position = new OrganizationMemberPosition(); |
|
|
|
position.setId(snowflake.nextId()); |
|
|
|
position.setPositionId(positionId); |
|
|
|
position.setDepartmentId(department.getId()); |
|
|
|
position.setMemberId(memberId); |
|
|
|
organizationMemberPositionDao.insertSelective(position); |
|
|
|
} |
|
|
|
//创建项目
|
|
|
|
return createProject(organization.getId(), hospitalName, memberName, phone, userId); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Long createProject(Long organizationId,String hospitalName,String memberName,String phone,Long userId) { |
|
|
|
OrganizationProject project = organizationProjectDao.queryByOrganizationId(organizationId); |
|
|
|
if (ObjectUtil.isNull(project)) { |
|
|
|
//创建项目
|
|
|
|
CProjectDto.CopyProject copyProject = new CProjectDto.CopyProject(); |
|
|
|
copyProject.setProjectId((Long) redisUtil.get(Constant.TEMPLATE_PROJECT_KEY_ORGANIZATION)); |
|
|
|
copyProject.setProjectName(hospitalName); |
|
|
|
CProjectVo.CopyProjectInfo copyProjectInfo = projectService.copyProject(copyProject, userId); |
|
|
|
//添加角色
|
|
|
|
CMemberDto.SaveMember saveMember = new CMemberDto.SaveMember(); |
|
|
|
saveMember.setProjectId(copyProjectInfo.getId()); |
|
|
|
saveMember.setRoleName(Constant.RoleName.SHEN_NEI); |
|
|
|
saveMember.setName(memberName); |
|
|
|
saveMember.setPhone(phone); |
|
|
|
saveMember.setUserId(userId); |
|
|
|
memberService.addMemberForProject(saveMember); |
|
|
|
//绑定机构和项目
|
|
|
|
OrganizationProject organizationProject = new OrganizationProject(); |
|
|
|
organizationProject.setId(snowflake.nextId()); |
|
|
|
organizationProject.setOrganizationId(organizationId); |
|
|
|
organizationProject.setProjectId(copyProjectInfo.getId()); |
|
|
|
organizationProjectDao.insertSelective(organizationProject); |
|
|
|
//创建病例
|
|
|
|
PatientDto.SavePatient savePatient = new PatientDto.SavePatient(); |
|
|
|
firstAidService.getFirstAid(savePatient,userId,(byte)1,organizationId); |
|
|
|
//tall3添加项目,关联项目
|
|
|
|
ProjectDto.SaveProjectDto saveProjectDto = new ProjectDto.SaveProjectDto(); |
|
|
|
saveProjectDto.setId(copyProjectInfo.getId()); |
|
|
|
saveProjectDto.setName(copyProject.getProjectName()); |
|
|
|
saveProjectDto.setStartTime(System.currentTimeMillis()-315360000000L); |
|
|
|
saveProjectDto.setEndTime(System.currentTimeMillis()+315360000000L); |
|
|
|
saveProjectDto.setUrl(PropUtil.path); |
|
|
|
Set<Long> userIds = new HashSet<>(); |
|
|
|
userIds.add(userId); |
|
|
|
saveProjectDto.setUserIdList(userIds); |
|
|
|
tall3FeignClient.saveProjectList(saveProjectDto); |
|
|
|
return copyProjectInfo.getId(); |
|
|
|
}else { |
|
|
|
CMemberDto.SaveMember saveMember = new CMemberDto.SaveMember(); |
|
|
|
saveMember.setProjectId(project.getProjectId()); |
|
|
|
saveMember.setRoleName(Constant.RoleName.SHEN_NEI); |
|
|
|
saveMember.setName(memberName); |
|
|
|
saveMember.setPhone(phone); |
|
|
|
saveMember.setUserId(userId); |
|
|
|
memberService.addMemberForProject(saveMember); |
|
|
|
|
|
|
|
//tall3 用户关联项目
|
|
|
|
ProjectDto.SaveUserProject saveUserProject = new ProjectDto.SaveUserProject(); |
|
|
|
ArrayList<Long> projectIds = new ArrayList<>(); |
|
|
|
ArrayList<Long> userIds = new ArrayList<>(); |
|
|
|
projectIds.add(project.getProjectId()); |
|
|
|
userIds.add(userId); |
|
|
|
saveUserProject.setProjectId(projectIds); |
|
|
|
saveUserProject.setUserId(userIds); |
|
|
|
tall3FeignClient.saveUserProject(saveUserProject); |
|
|
|
return project.getProjectId(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|