diff --git a/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java b/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java index 661a9f1..72e227d 100644 --- a/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java +++ b/src/main/java/com/ccsens/carbasics/bean/dto/QuestionnaireDto.java @@ -33,6 +33,9 @@ public class QuestionnaireDto { @NotBlank(message = "请选择市") @ApiModelProperty("市") private String city; + @NotBlank(message = "请选择省") + @ApiModelProperty("省") + private String province; @NotBlank(message = "请选择县/区") @ApiModelProperty("县/区") private String county; @@ -103,6 +106,12 @@ public class QuestionnaireDto { private Long questionnaireId; @ApiModelProperty("类型") private Byte type; + @ApiModelProperty("是否介入治疗(0-否,1-是)") + private Byte pciStatus; + @ApiModelProperty("问卷详情id") + private Long detailId; + @ApiModelProperty("提交状态(0-保存,1-修改)") + private Byte submitStatus; } @Data diff --git a/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetail.java b/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetail.java index 699ae0a..ce6acbd 100644 --- a/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetail.java +++ b/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetail.java @@ -66,6 +66,12 @@ public class QuestionnaireDetail implements Serializable { private Byte recStatus; + private Byte pciStatus; + + private Byte submitStatus; + + private String province; + private static final long serialVersionUID = 1L; public Long getId() { @@ -316,6 +322,30 @@ public class QuestionnaireDetail implements Serializable { this.recStatus = recStatus; } + public Byte getPciStatus() { + return pciStatus; + } + + public void setPciStatus(Byte pciStatus) { + this.pciStatus = pciStatus; + } + + public Byte getSubmitStatus() { + return submitStatus; + } + + public void setSubmitStatus(Byte submitStatus) { + this.submitStatus = submitStatus; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province == null ? null : province.trim(); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -353,6 +383,9 @@ public class QuestionnaireDetail implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", pciStatus=").append(pciStatus); + sb.append(", submitStatus=").append(submitStatus); + sb.append(", province=").append(province); sb.append("]"); return sb.toString(); } diff --git a/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetailExample.java b/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetailExample.java index 0d701ae..67a61fa 100644 --- a/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetailExample.java +++ b/src/main/java/com/ccsens/carbasics/bean/po/QuestionnaireDetailExample.java @@ -2024,6 +2024,196 @@ public class QuestionnaireDetailExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andPciStatusIsNull() { + addCriterion("pci_status is null"); + return (Criteria) this; + } + + public Criteria andPciStatusIsNotNull() { + addCriterion("pci_status is not null"); + return (Criteria) this; + } + + public Criteria andPciStatusEqualTo(Byte value) { + addCriterion("pci_status =", value, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusNotEqualTo(Byte value) { + addCriterion("pci_status <>", value, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusGreaterThan(Byte value) { + addCriterion("pci_status >", value, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("pci_status >=", value, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusLessThan(Byte value) { + addCriterion("pci_status <", value, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusLessThanOrEqualTo(Byte value) { + addCriterion("pci_status <=", value, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusIn(List values) { + addCriterion("pci_status in", values, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusNotIn(List values) { + addCriterion("pci_status not in", values, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusBetween(Byte value1, Byte value2) { + addCriterion("pci_status between", value1, value2, "pciStatus"); + return (Criteria) this; + } + + public Criteria andPciStatusNotBetween(Byte value1, Byte value2) { + addCriterion("pci_status not between", value1, value2, "pciStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusIsNull() { + addCriterion("submit_status is null"); + return (Criteria) this; + } + + public Criteria andSubmitStatusIsNotNull() { + addCriterion("submit_status is not null"); + return (Criteria) this; + } + + public Criteria andSubmitStatusEqualTo(Byte value) { + addCriterion("submit_status =", value, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusNotEqualTo(Byte value) { + addCriterion("submit_status <>", value, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusGreaterThan(Byte value) { + addCriterion("submit_status >", value, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("submit_status >=", value, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusLessThan(Byte value) { + addCriterion("submit_status <", value, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusLessThanOrEqualTo(Byte value) { + addCriterion("submit_status <=", value, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusIn(List values) { + addCriterion("submit_status in", values, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusNotIn(List values) { + addCriterion("submit_status not in", values, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusBetween(Byte value1, Byte value2) { + addCriterion("submit_status between", value1, value2, "submitStatus"); + return (Criteria) this; + } + + public Criteria andSubmitStatusNotBetween(Byte value1, Byte value2) { + addCriterion("submit_status not between", value1, value2, "submitStatus"); + return (Criteria) this; + } + + public Criteria andProvinceIsNull() { + addCriterion("province is null"); + return (Criteria) this; + } + + public Criteria andProvinceIsNotNull() { + addCriterion("province is not null"); + return (Criteria) this; + } + + public Criteria andProvinceEqualTo(String value) { + addCriterion("province =", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceNotEqualTo(String value) { + addCriterion("province <>", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceGreaterThan(String value) { + addCriterion("province >", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceGreaterThanOrEqualTo(String value) { + addCriterion("province >=", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceLessThan(String value) { + addCriterion("province <", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceLessThanOrEqualTo(String value) { + addCriterion("province <=", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceLike(String value) { + addCriterion("province like", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceNotLike(String value) { + addCriterion("province not like", value, "province"); + return (Criteria) this; + } + + public Criteria andProvinceIn(List values) { + addCriterion("province in", values, "province"); + return (Criteria) this; + } + + public Criteria andProvinceNotIn(List values) { + addCriterion("province not in", values, "province"); + return (Criteria) this; + } + + public Criteria andProvinceBetween(String value1, String value2) { + addCriterion("province between", value1, value2, "province"); + return (Criteria) this; + } + + public Criteria andProvinceNotBetween(String value1, String value2) { + addCriterion("province not between", value1, value2, "province"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java b/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java index 604cefc..81a2989 100644 --- a/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java +++ b/src/main/java/com/ccsens/carbasics/bean/vo/QuestionnaireVo.java @@ -48,7 +48,7 @@ public class QuestionnaireVo { private String questionnaireName; @ApiModelProperty("问卷类型(0-卒中)") private Byte type; - @ApiModelProperty("是否填写(0-否,1-是)") + @ApiModelProperty("填写状态(-1-未填写,0-保存,1-修改)") private Byte isWrite; @JsonIgnore @ApiModelProperty("详情id") diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java index 283cb42..35521ba 100644 --- a/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java +++ b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java @@ -80,4 +80,11 @@ public interface OrganizationDao extends OrganizationMapper { * @param parents 机构上级 */ void batchInsertParent(@Param("parents") List parents); + + /** + * 根据医院名称查询医院 + * @param hospitalName 医院名称 + * @return 医院信息 + */ + Organization queryByName(@Param("name") String hospitalName); } diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDepartmentDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDepartmentDao.java new file mode 100644 index 0000000..0461a37 --- /dev/null +++ b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDepartmentDao.java @@ -0,0 +1,18 @@ +package com.ccsens.carbasics.persist.dao; + +import com.ccsens.carbasics.bean.po.OrganizationDepartment; +import com.ccsens.carbasics.persist.mapper.OrganizationDepartmentMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface OrganizationDepartmentDao extends OrganizationDepartmentMapper { + + /** + * 根据机构id和部门code查询机构下的所有部门 + * @param organizationId 机构id + * @param code 部门code + * @return 部门列表 + */ + OrganizationDepartment queryByOrganization(@Param("organizationId") Long organizationId,@Param("code")String code); +} diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationProjectDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationProjectDao.java new file mode 100644 index 0000000..b948785 --- /dev/null +++ b/src/main/java/com/ccsens/carbasics/persist/dao/OrganizationProjectDao.java @@ -0,0 +1,15 @@ +package com.ccsens.carbasics.persist.dao; + +import com.ccsens.carbasics.bean.po.OrganizationProject; +import com.ccsens.carbasics.persist.mapper.OrganizationProjectMapper; +import org.apache.ibatis.annotations.Param; + +public interface OrganizationProjectDao extends OrganizationProjectMapper { + + /** + * 查询机构是否有项目 + * @param organizationId 机构id + * @return 项目 + */ + OrganizationProject queryByOrganizationId(@Param("oid") Long organizationId); +} diff --git a/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java b/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java index 5a27a16..2589137 100644 --- a/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java +++ b/src/main/java/com/ccsens/carbasics/persist/dao/QuestionnaireDao.java @@ -31,9 +31,8 @@ public interface QuestionnaireDao extends QuestionnaireMapper { /** * 查询医院是否重复提交 * @param hospitalName 医院名称 - * @param time 当前时间 - * @param type + * @param qid 问卷id * @return 数据 */ - QuestionnaireVo.QuestionnaireInfo queryRepeat(@Param("name") String hospitalName,@Param("time") Long time,@Param("type") Byte type); + QuestionnaireVo.QuestionnaireInfo queryRepeat(@Param("name") String hospitalName,@Param("qid") Long qid); } diff --git a/src/main/java/com/ccsens/carbasics/service/AsyncService.java b/src/main/java/com/ccsens/carbasics/service/AsyncService.java index dd0743c..84342a9 100644 --- a/src/main/java/com/ccsens/carbasics/service/AsyncService.java +++ b/src/main/java/com/ccsens/carbasics/service/AsyncService.java @@ -1,6 +1,24 @@ package com.ccsens.carbasics.service; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.ObjectUtil; import com.ccsens.carbasics.bean.dto.ProjectDto; +import com.ccsens.carbasics.bean.dto.QuestionnaireDto; +import com.ccsens.carbasics.bean.po.Organization; +import com.ccsens.carbasics.bean.po.OrganizationDepartment; +import com.ccsens.carbasics.bean.po.OrganizationMember; +import com.ccsens.carbasics.bean.po.OrganizationProject; +import com.ccsens.carbasics.persist.dao.OrganizationDao; +import com.ccsens.carbasics.persist.dao.OrganizationDepartmentDao; +import com.ccsens.carbasics.persist.dao.OrganizationMemberDao; +import com.ccsens.carbasics.persist.dao.OrganizationProjectDao; +import com.ccsens.carbasics.util.Constant; +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.RedisUtil; import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.util.message.SwitchoverProjectUtil; import lombok.extern.slf4j.Slf4j; @@ -9,8 +27,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.CompletableFuture; /** * @description: @@ -22,6 +42,25 @@ import java.util.Set; @Async @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class AsyncService implements IAsyncService { + + @Resource + private OrganizationDao organizationDao; + @Resource + private OrganizationDepartmentDao departmentDao; + @Resource + private OrganizationMemberDao organizationMemberDao; + @Resource + private Snowflake snowflake; + @Resource + private IProjectService projectService; + @Resource + private IMemberService memberService; + @Resource + private OrganizationProjectDao organizationProjectDao; + @Resource + private RedisUtil redisUtil; + + @Override public void switchProject(QueryDto params) throws Exception { log.info("开始接受切换项目"); @@ -32,4 +71,108 @@ public class AsyncService implements IAsyncService { ProjectDto.SwitchProject param = params.getParam(); SwitchoverProjectUtil.switchoverProject(userIds,param.getProjectId(), param.getUrl()); } + + + @Override + public void createHospitalOfNotExit(QuestionnaireDto.SaveQuestionnaire param, Long userId) throws Exception { + String departmentCode = ""; + if (Constant.DepartmentAndCode.SHEN_JING.name.equals(param.getDepartments())) { + departmentCode = Constant.DepartmentAndCode.SHEN_JING.code; + } + if (Constant.DepartmentAndCode.NEI_KE.name.equals(param.getDepartments())) { + departmentCode = Constant.DepartmentAndCode.NEI_KE.code; + } + + Organization organization = organizationDao.queryByName(param.getHospitalName()); + if (ObjectUtil.isNull(organization)) { + //创建医院 + Organization newOrganization = new Organization(); + newOrganization.setId(snowflake.nextId()); + newOrganization.setName(param.getHospitalName()); + newOrganization.setLevel(param.getHospitalLevel()); + organizationDao.insertSelective(newOrganization); + //创建部门 + OrganizationDepartment department = new OrganizationDepartment(); + department.setId(snowflake.nextId()); + department.setName(param.getDepartments()); + department.setCode(departmentCode); + department.setOrganizationId(newOrganization.getId()); + departmentDao.insertSelective(department); + //创建用户 + OrganizationMember member = new OrganizationMember(); + member.setId(snowflake.nextId()); + member.setUserId(userId); + member.setName(param.getName()); + member.setContact(param.getPhone()); + member.setPositionId(2L); + member.setDepartmentId(department.getId()); + organizationMemberDao.insertSelective(member); + + //创建项目 + createProject(newOrganization.getId(),param,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(param.getDepartments()); + newDepartment.setOrganizationId(organization.getId()); + departmentDao.insertSelective(newDepartment); + //添加人员 + OrganizationMember member = new OrganizationMember(); + member.setId(snowflake.nextId()); + member.setUserId(userId); + member.setName(param.getName()); + member.setContact(param.getPhone()); + member.setPositionId(2L); + member.setDepartmentId(newDepartment.getId()); + organizationMemberDao.insertSelective(member); + //创建项目 + createProject(organization.getId(),param,userId); + }else { + OrganizationMember member = new OrganizationMember(); + member.setId(snowflake.nextId()); + member.setUserId(userId); + member.setName(param.getName()); + member.setContact(param.getPhone()); + member.setPositionId(2L); + member.setDepartmentId(department.getId()); + organizationMemberDao.insertSelective(member); + //创建项目 + createProject(organization.getId(),param,userId); + } + } + } + + + + public void createProject(Long organizationId,QuestionnaireDto.SaveQuestionnaire param,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(param.getHospitalName()); + 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(param.getName()); + saveMember.setPhone(param.getPhone()); + saveMember.setUserId(userId); + memberService.addMemberForProject(saveMember); + }else { + CMemberDto.SaveMember saveMember = new CMemberDto.SaveMember(); + saveMember.setProjectId(project.getProjectId()); + saveMember.setRoleName(Constant.RoleName.SHEN_NEI); + saveMember.setName(param.getName()); + saveMember.setPhone(param.getPhone()); + saveMember.setUserId(userId); + memberService.addMemberForProject(saveMember); + } + } + } diff --git a/src/main/java/com/ccsens/carbasics/service/IAsyncService.java b/src/main/java/com/ccsens/carbasics/service/IAsyncService.java index 8e0ec43..d93f1b5 100644 --- a/src/main/java/com/ccsens/carbasics/service/IAsyncService.java +++ b/src/main/java/com/ccsens/carbasics/service/IAsyncService.java @@ -1,6 +1,7 @@ package com.ccsens.carbasics.service; import com.ccsens.carbasics.bean.dto.ProjectDto; +import com.ccsens.carbasics.bean.dto.QuestionnaireDto; import com.ccsens.util.bean.dto.QueryDto; public interface IAsyncService { @@ -8,4 +9,13 @@ public interface IAsyncService { * 通知TALL切换项目 * */ void switchProject(QueryDto params) throws Exception; + + /** + * 创建不存在的医院/部门/用户 + * @param param 问卷调查信息 + * @param userId 用户id + * @throws Exception 异常 + */ + void createHospitalOfNotExit(QuestionnaireDto.SaveQuestionnaire param,Long userId) throws Exception; + } diff --git a/src/main/java/com/ccsens/carbasics/service/IQuestionnaireService.java b/src/main/java/com/ccsens/carbasics/service/IQuestionnaireService.java index 58de694..45a316d 100644 --- a/src/main/java/com/ccsens/carbasics/service/IQuestionnaireService.java +++ b/src/main/java/com/ccsens/carbasics/service/IQuestionnaireService.java @@ -24,11 +24,13 @@ public interface IQuestionnaireService { QuestionnaireVo.QuestionnaireInfo queryQuestionnaire(QuestionnaireDto.QueryQuestionnaire param, Long userId); /** - * 保存问卷调查信息 - * @param param 参数 + * + * 保存问卷调查信息 + * @param param 参数 * @param userId 用户id + * @throws Exception 异常 */ - void saveQuestionnaire(QuestionnaireDto.SaveQuestionnaire param, Long userId); + void saveQuestionnaire(QuestionnaireDto.SaveQuestionnaire param, Long userId) throws Exception; /** * 查询当前医院问卷是否填写 diff --git a/src/main/java/com/ccsens/carbasics/service/QuestionnaireService.java b/src/main/java/com/ccsens/carbasics/service/QuestionnaireService.java index 4b68c3d..73111ff 100644 --- a/src/main/java/com/ccsens/carbasics/service/QuestionnaireService.java +++ b/src/main/java/com/ccsens/carbasics/service/QuestionnaireService.java @@ -14,6 +14,7 @@ import com.ccsens.carbasics.persist.dao.OrganizationDao; import com.ccsens.carbasics.persist.dao.QuestionnaireDao; import com.ccsens.carbasics.persist.dao.QuestionnaireDetailDao; import com.ccsens.carbasics.persist.mapper.OrganizationProjectMapper; +import com.ccsens.carbasics.util.Constant; import com.ccsens.carbasics.util.DefaultCodeError; import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; @@ -22,6 +23,7 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; @@ -40,6 +42,8 @@ public class QuestionnaireService implements IQuestionnaireService{ private Snowflake snowflake; @Resource private OrganizationDao organizationDao; + @Resource + private IAsyncService asyncService; @Override public List queryArea(QuestionnaireDto.QueryArea param, Long userId) { @@ -56,19 +60,86 @@ public class QuestionnaireService implements IQuestionnaireService{ } @Override - public void saveQuestionnaire(QuestionnaireDto.SaveQuestionnaire param, Long userId) { - //查询是否重复提交 + public void saveQuestionnaire(QuestionnaireDto.SaveQuestionnaire param, Long userId) throws Exception { + // TODO 校验介入治疗字段 + + //查询是否有已提交的,如果有只能保存 Long time = System.currentTimeMillis(); - QuestionnaireVo.QuestionnaireInfo questionnaireInfo = questionnaireDao.queryRepeat(param.getHospitalName(),time,param.getType()); + QuestionnaireVo.QuestionnaireInfo questionnaireInfo = questionnaireDao.queryRepeat(param.getHospitalName(),param.getQuestionnaireId()); if (ObjectUtil.isNotNull(questionnaireInfo.getDetail())) { - throw new BaseException(DefaultCodeError.HOSPITAL_REPEAT_SUBMIT); + //1.提交数据,2.不是修改 + if (1 == param.getSubmitStatus() && ObjectUtil.isNull(param.getDetailId())) { + QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); + BeanUtil.copyProperties(param,questionnaireDetail); + questionnaireDetail.setId(snowflake.nextId()); + questionnaireDetail.setQuestionnaireId(param.getQuestionnaireId()); + questionnaireDetail.setUserId(userId); + questionnaireDetail.setSubmitStatus((byte)0); + questionnaireDetailDao.insertSelective(questionnaireDetail); + } + //1.提交数据,2.修改,3.与库中已有提交人一致 + if (1 == param.getSubmitStatus() && ObjectUtil.isNotNull(param.getDetailId()) && userId.equals(questionnaireInfo.getDetail().getUserId())) { + throw new BaseException(DefaultCodeError.HOSPITAL_REPEAT_SUBMIT); + } + //1.提交数据,2.修改,3.与库中已有提交人不一致 + if (1 == param.getSubmitStatus() && ObjectUtil.isNotNull(param.getDetailId()) && !userId.equals(questionnaireInfo.getDetail().getUserId())) { + QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); + BeanUtil.copyProperties(param,questionnaireDetail); + questionnaireDetail.setId(param.getDetailId()); + questionnaireDetail.setQuestionnaireId(param.getQuestionnaireId()); + questionnaireDetail.setUserId(userId); + questionnaireDetail.setSubmitStatus((byte)0); + questionnaireDetailDao.updateByPrimaryKeySelective(questionnaireDetail); + } + //1.保存数据,2.修改的数据为已提交数据 + if (0 == param.getSubmitStatus() & ObjectUtil.isNotNull(param.getDetailId()) & param.getDetailId().equals(questionnaireInfo.getDetail().getId())) { + throw new BaseException(DefaultCodeError.HOSPITAL_REPEAT_SUBMIT); + } + + //1.保存数据,2.非修改 + if (0 == param.getSubmitStatus() && ObjectUtil.isNull(param.getDetailId())) { + QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); + BeanUtil.copyProperties(param,questionnaireDetail); + questionnaireDetail.setId(snowflake.nextId()); + questionnaireDetail.setQuestionnaireId(param.getQuestionnaireId()); + questionnaireDetail.setUserId(userId); + questionnaireDetail.setSubmitStatus((byte)0); + questionnaireDetailDao.insertSelective(questionnaireDetail); + } + //1.保存数据,2.修改 + if (0 == param.getSubmitStatus() && ObjectUtil.isNotNull(param.getDetailId())) { + QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); + BeanUtil.copyProperties(param,questionnaireDetail); + questionnaireDetail.setId(param.getDetailId()); + questionnaireDetail.setQuestionnaireId(param.getQuestionnaireId()); + questionnaireDetail.setUserId(userId); + questionnaireDetail.setSubmitStatus((byte)0); + questionnaireDetailDao.updateByPrimaryKeySelective(questionnaireDetail); + } + }else { + // 新加数据 + if (ObjectUtil.isNull(param.getDetailId())) { + QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); + BeanUtil.copyProperties(param,questionnaireDetail); + questionnaireDetail.setId(snowflake.nextId()); + questionnaireDetail.setQuestionnaireId(param.getQuestionnaireId()); + questionnaireDetail.setUserId(userId); + questionnaireDetailDao.insertSelective(questionnaireDetail); + } + // 修改数据 + if (ObjectUtil.isNotNull(param.getDetailId())) { + QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); + BeanUtil.copyProperties(param,questionnaireDetail); + questionnaireDetail.setId(param.getDetailId()); + questionnaireDetail.setUserId(userId); + questionnaireDetailDao.updateByPrimaryKeySelective(questionnaireDetail); + } + } - QuestionnaireDetail questionnaireDetail = new QuestionnaireDetail(); - BeanUtil.copyProperties(param,questionnaireDetail); - questionnaireDetail.setId(snowflake.nextId()); - questionnaireDetail.setQuestionnaireId(param.getQuestionnaireId()); - questionnaireDetailDao.insertSelective(questionnaireDetail); + + //如果医院/部门/用户不存在,则创建对应内容 +// asyncService.createHospitalOfNotExit(param,userId); } @@ -78,15 +149,19 @@ public class QuestionnaireService implements IQuestionnaireService{ if (ObjectUtil.isNull(organization)) { throw new BaseException(DefaultCodeError.NOT_ORGANIZATION); } - List writeStatusList = questionnaireDao.queryNotWrite(organization.getName(),param.getTime()); - for (QuestionnaireVo.WriteStatus writeStatus : writeStatusList) { - if (ObjectUtil.isNull(writeStatus.getDetailId())) { - writeStatus.setIsWrite((byte) 0); - }else { - writeStatus.setIsWrite((byte) 1); + //是否医院 否:返回null + if (3 == organization.getOrganizationType()){ + List writeStatusList = questionnaireDao.queryNotWrite(organization.getName(),param.getTime()); + for (QuestionnaireVo.WriteStatus writeStatus : writeStatusList) { + if (ObjectUtil.isNull(writeStatus.getIsWrite())) { + writeStatus.setIsWrite((byte) -1); + }else { + writeStatus.setIsWrite(writeStatus.getIsWrite()); + } } + return writeStatusList; } - return writeStatusList; + return new ArrayList<>(); } } diff --git a/src/main/java/com/ccsens/carbasics/util/Constant.java b/src/main/java/com/ccsens/carbasics/util/Constant.java index f48df45..28e9da1 100644 --- a/src/main/java/com/ccsens/carbasics/util/Constant.java +++ b/src/main/java/com/ccsens/carbasics/util/Constant.java @@ -119,6 +119,21 @@ public class Constant { public static final String SHEN_WAI = "ShenWai"; } + public enum DepartmentAndCode { + /** + * 部门与code + */ + SHEN_JING("ShenJing","神经科"), + NEI_KE("NeiKe","内科"); + public String name; + public String code; + + DepartmentAndCode (String name, String code) { + this.name = name; + this.code = code; + } + } + /**职位相关*/ public static final class Position { /**护士*/ @@ -266,6 +281,10 @@ public class Constant { * 创建病例:模板项目id神外 */ public static final String TEMPLATE_PROJECT_KEY_SHENWAI = "template_project_key_shenwai"; + /** + * 创建项目,机构项目 + */ + public static final String TEMPLATE_PROJECT_KEY_ORGANIZATION = "template_project_key_organization"; /** diff --git a/src/main/java/com/ccsens/carbasics/util/DefaultCodeError.java b/src/main/java/com/ccsens/carbasics/util/DefaultCodeError.java index 2f12309..1115115 100644 --- a/src/main/java/com/ccsens/carbasics/util/DefaultCodeError.java +++ b/src/main/java/com/ccsens/carbasics/util/DefaultCodeError.java @@ -41,7 +41,7 @@ public class DefaultCodeError extends CodeError { public static final Code SURPASS_MAX_NUMBER = new Code(32,"超过最大申请修改次数", true); public static final Code DATA_STATUS_SAME = new Code(33,"状态一致无需修改", true); public static final Code NOT_APPLY_FOR = new Code(34,"未申请修改,无法修改状态", true); - public static final Code HOSPITAL_REPEAT_SUBMIT = new Code(35,"当前医院已提交过问卷调查,请勿重复操作", true); + public static final Code HOSPITAL_REPEAT_SUBMIT = new Code(35,"数据已提交,无法修改", true); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 5abf242..2fb38e5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: prod - include: common, util-prod + active: dev + include: common, util-dev diff --git a/src/main/resources/mapper_dao/OrganizationDao.xml b/src/main/resources/mapper_dao/OrganizationDao.xml index 5af62a5..e510cf8 100644 --- a/src/main/resources/mapper_dao/OrganizationDao.xml +++ b/src/main/resources/mapper_dao/OrganizationDao.xml @@ -289,4 +289,22 @@ select * from t_organization where name = #{name} and rec_status = 0 order by updated_at desc limit 1 + + diff --git a/src/main/resources/mapper_dao/OrganizationDepartmentDao.xml b/src/main/resources/mapper_dao/OrganizationDepartmentDao.xml new file mode 100644 index 0000000..c071d17 --- /dev/null +++ b/src/main/resources/mapper_dao/OrganizationDepartmentDao.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper_dao/OrganizationProjectDao.xml b/src/main/resources/mapper_dao/OrganizationProjectDao.xml new file mode 100644 index 0000000..3c7b5e4 --- /dev/null +++ b/src/main/resources/mapper_dao/OrganizationProjectDao.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper_dao/QuestionnaireDao.xml b/src/main/resources/mapper_dao/QuestionnaireDao.xml index ce2d140..7dfa334 100644 --- a/src/main/resources/mapper_dao/QuestionnaireDao.xml +++ b/src/main/resources/mapper_dao/QuestionnaireDao.xml @@ -9,6 +9,7 @@ + @@ -34,6 +35,7 @@ + @@ -44,6 +46,8 @@ q.start_time AS `start`, q.end_time AS `end`, q.type, + qd.id AS detailId, + qd.province, qd.city, qd.county, qd.hospital_level, @@ -68,7 +72,8 @@ qd.dpt_median_number, qd.prt_median_number, qd.jmrs_number_two, - qd.death_number + qd.death_number, + qd.submit_status FROM t_qcp_questionnaire AS q LEFT JOIN t_qcp_questionnaire_detail AS qd ON q.id = qd.questionnaire_id @@ -89,7 +94,8 @@ q.type, q.write_start_time, q.write_end_time, - qd.id AS detailId + qd.id AS detailId, + qd.submit_status AS isWrite FROM t_qcp_questionnaire AS q LEFT JOIN t_qcp_questionnaire_detail AS qd ON q.id = qd.questionnaire_id @@ -100,13 +106,14 @@ AND q.rec_status = 0 - SELECT q.id, q.questionnaire_name AS questionnaire_name, q.start_time AS `start`, q.end_time AS `end`, q.type, + qd.id AS detailId, qd.city, qd.county, qd.hospital_level, @@ -131,16 +138,17 @@ qd.dpt_median_number, qd.prt_median_number, qd.jmrs_number_two, - qd.death_number + qd.death_number, + qd.submit_status FROM t_qcp_questionnaire AS q - LEFT JOIN t_qcp_questionnaire_detail AS qd ON q.id = qd.questionnaire_id - AND qd.user_id = #{name} AND qd.rec_status = 0 + LEFT JOIN t_qcp_questionnaire_detail AS qd ON q.id = qd.questionnaire_id + AND qd.rec_status = 0 WHERE - q.write_start_time < #{time} - AND q.write_end_time > #{time} - AND type = #{type} - AND q.rec_status = 0 + q.rec_status = 0 + AND qd.hospital_name = #{name} + AND submit_status = 1 + AND q.id = #{qid} diff --git a/src/main/resources/mapper_raw/QuestionnaireDetailMapper.xml b/src/main/resources/mapper_raw/QuestionnaireDetailMapper.xml index 846d2ac..a5721db 100644 --- a/src/main/resources/mapper_raw/QuestionnaireDetailMapper.xml +++ b/src/main/resources/mapper_raw/QuestionnaireDetailMapper.xml @@ -33,6 +33,9 @@ + + + @@ -97,7 +100,8 @@ stroke_center, map_hospital, stroke_number, ais_number_four, jmrs_number_four, rtpa_number, dnt_number, dnt_number_four, dnt_number_six, sich_number, jmrs_number_one, ais_number_six, should_directly, dpt_median_number, prt_median_number, jmrs_number_two, death_number, - user_id, questionnaire_id, created_at, updated_at, rec_status + user_id, questionnaire_id, created_at, updated_at, rec_status, pci_status, submit_status, + province @@ -448,6 +472,15 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + pci_status = #{record.pciStatus,jdbcType=TINYINT}, + + + submit_status = #{record.submitStatus,jdbcType=TINYINT}, + + + province = #{record.province,jdbcType=VARCHAR}, + @@ -485,7 +518,10 @@ questionnaire_id = #{record.questionnaireId,jdbcType=BIGINT}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + pci_status = #{record.pciStatus,jdbcType=TINYINT}, + submit_status = #{record.submitStatus,jdbcType=TINYINT}, + province = #{record.province,jdbcType=VARCHAR} @@ -583,6 +619,15 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + pci_status = #{pciStatus,jdbcType=TINYINT}, + + + submit_status = #{submitStatus,jdbcType=TINYINT}, + + + province = #{province,jdbcType=VARCHAR}, + where id = #{id,jdbcType=BIGINT} @@ -617,7 +662,10 @@ questionnaire_id = #{questionnaireId,jdbcType=BIGINT}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + pci_status = #{pciStatus,jdbcType=TINYINT}, + submit_status = #{submitStatus,jdbcType=TINYINT}, + province = #{province,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/src/main/resources/mbg.xml b/src/main/resources/mbg.xml index 803a28e..1536f4c 100644 --- a/src/main/resources/mbg.xml +++ b/src/main/resources/mbg.xml @@ -60,7 +60,7 @@ - +
@@ -70,7 +70,7 @@ -
+