Browse Source

加入急救,退出急救,质控员审核接口

master
ma 4 years ago
parent
commit
eb41351e65
  1. 35
      src/main/java/com/ccsens/carbasics/api/FirstAidController.java
  2. 44
      src/main/java/com/ccsens/carbasics/bean/dto/FirstAidDto.java
  3. 36
      src/main/java/com/ccsens/carbasics/bean/vo/FirstAidVo.java
  4. 2
      src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java
  5. 7
      src/main/java/com/ccsens/carbasics/persist/dao/FirstAidLogDao.java
  6. 17
      src/main/java/com/ccsens/carbasics/persist/dao/FirstAidMemberDao.java
  7. 223
      src/main/java/com/ccsens/carbasics/service/FirstAidService.java
  8. 26
      src/main/java/com/ccsens/carbasics/service/IFirstAidService.java
  9. 25
      src/main/java/com/ccsens/carbasics/util/Constant.java
  10. 5
      src/main/java/com/ccsens/carbasics/util/DefaultCodeError.java
  11. 12
      src/main/resources/mapper_dao/FirstAidLogDao.xml
  12. 19
      src/main/resources/mapper_dao/FirstAidMemberDao.xml
  13. 1
      src/main/resources/mapper_dao/OrganizationMemberDao.xml

35
src/main/java/com/ccsens/carbasics/api/FirstAidController.java

@ -7,6 +7,15 @@ import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import com.github.pagehelper.PageInfo;
import com.ccsens.carbasics.bean.dto.FirstAidDto;
import com.ccsens.carbasics.bean.dto.PatientDto;
import com.ccsens.carbasics.bean.po.FirstAid;
import com.ccsens.carbasics.bean.vo.FirstAidVo;
import com.ccsens.carbasics.bean.vo.PatientVo;
import com.ccsens.carbasics.service.IFirstAidService;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -27,9 +36,25 @@ import javax.annotation.Resource;
@RequestMapping("/firstAid")
@Slf4j
public class FirstAidController {
@Resource
private IFirstAidService firstAidService;
@MustLogin
@ApiOperation(value = "加入急救", notes = "")
@RequestMapping(value = "/join", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FirstAidVo.ProjectInfo> joinFirstAid(@ApiParam @Validated @RequestBody QueryDto<FirstAidDto.JoinFirstAid> params) throws Exception{
FirstAidVo.ProjectInfo projectInfo = firstAidService.joinFirstAid(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(projectInfo);
}
@MustLogin
@ApiOperation(value = "退出急救", notes = "")
@RequestMapping(value = "/quit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse quitFirstAid(@ApiParam @Validated @RequestBody QueryDto<FirstAidDto.QuitFirstAid> params) throws Exception{
firstAidService.quitFirstAid(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok();
}
@MustLogin
@ApiOperation(value = "病例列表", notes = "分诊护士/神内医生/神外医生查看相关病例")
@RequestMapping(value = "/querySelf", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
@ -40,4 +65,14 @@ public class FirstAidController {
return JsonResponse.newInstance().ok(page);
}
@MustLogin
@ApiOperation(value = "修改病例状态")
@RequestMapping(value = "/updateStatus", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse updateStatus(@ApiParam @Validated @RequestBody QueryDto<FirstAidDto.UpdateStatus> params) throws Exception{
log.info("查询自己相关的病例列表:{}", params);
firstAidService.updateStatus(params.getParam(), params.getUserId());
log.info("查询自己相关的病例列表成功");
return JsonResponse.newInstance().ok();
}
}

44
src/main/java/com/ccsens/carbasics/bean/dto/FirstAidDto.java

@ -0,0 +1,44 @@
package com.ccsens.carbasics.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author AUSU
*/
@Data
public class FirstAidDto {
@Data
@ApiModel("加入急救")
public static class JoinFirstAid{
@NotNull(message = "请选择类型")
@ApiModelProperty("急救类型(0-神内,1-神外)")
private Byte type;
@NotNull(message = "急救id不能为空")
@ApiModelProperty("急救id")
private Long firstAidId;
}
@Data
@ApiModel("加入急救")
public static class QuitFirstAid{
@NotNull(message = "急救id不能为空")
@ApiModelProperty("急救id")
private Long firstAidId;
}
@Data
@ApiModel("修改病例状态")
public static class UpdateStatus{
@NotNull(message = "急救id不能为空")
@ApiModelProperty("急救id")
private Long firstAidId;
@NotNull(message = "请选择状态")
@ApiModelProperty("审核状态( 1:急救审核通过 2:急救审核拒绝 3出院审核通过 4出院审核拒绝 5:申请修改 )")
private Byte dataStatus;
}
}

36
src/main/java/com/ccsens/carbasics/bean/vo/FirstAidVo.java

@ -1,13 +1,23 @@
package com.ccsens.carbasics.bean.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author
*/
@Data
public class FirstAidVo {
}
package com.ccsens.carbasics.bean.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author AUSU
*/
@Data
public class FirstAidVo {
@Data
@ApiModel("加入急救后的项目id")
public static class ProjectInfo{
@ApiModelProperty("项目id")
private Long projectId;
}
}

2
src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java

@ -27,6 +27,8 @@ public class OrganizationVo {
private String name;
@ApiModelProperty("职位id")
private Long positionId;
@ApiModelProperty("联系方式")
private String contact;
@ApiModelProperty("职位code")
private String positionCode;
@ApiModelProperty("科室id")

7
src/main/java/com/ccsens/carbasics/persist/dao/FirstAidLogDao.java

@ -19,4 +19,11 @@ public interface FirstAidLogDao extends FirstAidLogMapper {
* @return 医生信息
*/
List<FirstAidLogVo.JoinMember> queryMember(@Param("firstAidIds") List<Long> firstAidIds);
/**
* 查询质控员修改次数
* @param firstAidId 急救id
* @return 修改次数
*/
Integer countUpdateNumber(@Param("firstAidId") Long firstAidId);
}

17
src/main/java/com/ccsens/carbasics/persist/dao/FirstAidMemberDao.java

@ -0,0 +1,17 @@
package com.ccsens.carbasics.persist.dao;
import com.ccsens.carbasics.bean.po.FirstAidMember;
import com.ccsens.carbasics.persist.mapper.FirstAidMemberMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface FirstAidMemberDao extends FirstAidMemberMapper {
/**
* 根据急救id查询急救医生信息
* @param firstAidId 急救id
* @return 急救医生信息
*/
FirstAidMember findByAidId(@Param("firstAidId") Long firstAidId);
}

223
src/main/java/com/ccsens/carbasics/service/FirstAidService.java

@ -6,19 +6,25 @@ import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.carbasics.bean.dto.FirstAidDto;
import com.ccsens.carbasics.bean.dto.PatientDto;
import com.ccsens.carbasics.bean.po.*;
import com.ccsens.carbasics.bean.vo.FirstAidLogVo;
import com.ccsens.carbasics.bean.vo.FirstAidVo;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.bean.vo.PatientVo;
import com.ccsens.carbasics.persist.dao.FirstAidDao;
import com.ccsens.carbasics.persist.dao.FirstAidLogDao;
import com.ccsens.carbasics.persist.dao.FirstAidMemberDao;
import com.ccsens.carbasics.persist.dao.OrganizationDao;
import com.ccsens.carbasics.persist.dao.OrganizationMemberDao;
import com.ccsens.carbasics.persist.mapper.*;
import com.ccsens.carbasics.util.Constant;
import com.ccsens.carbasics.util.DefaultCodeError;
import com.ccsens.common.bean.dto.CProjectDto;
import com.ccsens.common.bean.vo.CProjectVo;
import com.ccsens.common.service.IProjectService;
import com.ccsens.util.exception.BaseException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@ -54,6 +60,10 @@ public class FirstAidService implements IFirstAidService{
@Resource
private FirstAidLogMapper firstAidLogMapper;
@Resource
private FirstAidMemberDao firstAidMemberDao;
@Resource
private IProjectService projectService;
@Resource
private OrganizationTemplateMapper templateMapper;
@Resource
private FirstAidRecordMapper firstAidRecordMapper;
@ -316,4 +326,217 @@ public class FirstAidService implements IFirstAidService{
firstAidDao.updateByPrimaryKeySelective(firstAid);
}
}
@Override
public FirstAidVo.ProjectInfo joinFirstAid(FirstAidDto.JoinFirstAid param, Long userId) {
//判断角色是否神内/神外医生
OrganizationVo.MemberPosition memberPosition = organizationMemberDao.getMemberPosition(userId);
log.info("当前用户的科室职位信息:{}",memberPosition);
if(ObjectUtil.isNull(memberPosition)){
throw new BaseException(DefaultCodeError.NO_POWER);
}
//部门
Byte position = null;
if (Constant.Department.SHEN_NEI.equals(memberPosition.getDepartmentCode()) || Constant.Department.SHEN_WAI.equals(memberPosition.getDepartmentCode())) {
if (Constant.Position.YI_SHENG.equals(memberPosition.getPositionCode())) {
position = 1;
}
}
if (ObjectUtil.isNull(position)) {
throw new BaseException(DefaultCodeError.NO_POWER);
}
//判断病例是否已有医生加入
FirstAidMember firstAidMember = firstAidMemberDao.findByAidId(param.getFirstAidId());
if (ObjectUtil.isNotNull(firstAidMember)) {
throw new BaseException(DefaultCodeError.DOCTOR_HAS_JOINED);
}
//根据模板类型创建项目
FirstAid firstAidInfo = firstAidDao.selectByPrimaryKey(param.getFirstAidId());
CProjectVo.CopyProjectInfo copyProjectInfo = new CProjectVo.CopyProjectInfo();
//如果已有项目则不创建,使用旧项目
if (firstAidInfo.getType().equals(param.getType()) && ObjectUtil.isNotNull(firstAidInfo.getProjectId())) {
copyProjectInfo.setId(firstAidInfo.getProjectId());
}else {
CProjectDto.CopyProject copyProject = new CProjectDto.CopyProject();
if (0 == param.getType()){
//TODO 设置项目id为神内模板 和 项目名字
}else{
//TODO 设置项目id为神外模板 和 项目名字
}
log.info("加入急救-开始创建项目{}",copyProject);
copyProjectInfo = projectService.copyProject(copyProject, userId);
log.info("加入急救-创建项目结束{}",copyProjectInfo);
}
//将医生添加为项目成员
CProjectDto.MemberForProject memberForProject = new CProjectDto.MemberForProject();
List<CProjectDto.MemberInfo> memberInfoList = new ArrayList<>();
CProjectDto.MemberInfo memberInfo = new CProjectDto.MemberInfo();
memberInfo.setUserId(userId);
memberInfo.setMemberName(memberPosition.getName());
memberInfo.setPhone(memberPosition.getContact());
if (0 == param.getType()){
memberInfo.setRoleName(Constant.RoleName.SHEN_NEI);
}else{
memberInfo.setRoleName(Constant.RoleName.SHEN_WAI);
}
memberInfoList.add(memberInfo);
memberForProject.setProjectId(copyProjectInfo.getId());
memberForProject.setMemberInfoList(memberInfoList);
log.info("加入急救-开始添加成员{}",memberForProject);
projectService.addMemberForCopy(memberForProject,userId);
log.info("加入急救-添加成员结束");
//添加医生为病例的录入者 t_qcp_first_aid_member
FirstAidMember newFirstAidMember = new FirstAidMember();
newFirstAidMember.setId(snowflake.nextId());
newFirstAidMember.setFirstAidId(param.getFirstAidId());
newFirstAidMember.setCreateUserId(userId);
newFirstAidMember.setRecordUserId(userId);
firstAidMemberDao.insertSelective(newFirstAidMember);
//急救信息和项目关联
FirstAid firstAid = new FirstAid();
firstAid.setId(param.getFirstAidId());
firstAid.setProjectId(copyProjectInfo.getId());
firstAidDao.updateByPrimaryKeySelective(firstAid);
//添加急救日志(类型:加入)
FirstAidLog firstAidLog = new FirstAidLog();
firstAidLog.setId(snowflake.nextId());
firstAidLog.setFirstAidId(param.getFirstAidId());
firstAidLog.setOperationTime(System.currentTimeMillis());
firstAidLog.setOperationUserId(userId);
firstAidLog.setOperationType((byte)7);
if (0 == param.getType()){
firstAidLog.setOperationRole((byte)1);
}else{
firstAidLog.setOperationRole((byte)2);
}
firstAidLogDao.insertSelective(firstAidLog);
//返回项目id
FirstAidVo.ProjectInfo projectInfo = new FirstAidVo.ProjectInfo();
projectInfo.setProjectId(copyProjectInfo.getId());
return projectInfo;
}
@Override
public void quitFirstAid(FirstAidDto.QuitFirstAid param, Long userId) {
FirstAidMember byAidId = firstAidMemberDao.findByAidId(param.getFirstAidId());
if (ObjectUtil.isNull(byAidId)) {
throw new BaseException(DefaultCodeError.NOT_FIRST_AID_ID);
}
if (!userId.equals(byAidId.getRecordUserId())) {
throw new BaseException(DefaultCodeError.REPEAT_QUIT);
}
//添加急救日志(退出)
FirstAidLog firstAidLog = new FirstAidLog();
firstAidLog.setId(snowflake.nextId());
firstAidLog.setFirstAidId(param.getFirstAidId());
firstAidLog.setOperationTime(System.currentTimeMillis());
firstAidLog.setOperationUserId(userId);
firstAidLog.setOperationType((byte)8);
//判断角色是否神内/神外医生
OrganizationVo.MemberPosition memberPosition = organizationMemberDao.getMemberPosition(userId);
log.info("当前用户的科室职位信息:{}",memberPosition);
if (Constant.Department.SHEN_NEI.equals(memberPosition.getDepartmentCode())) {
if (Constant.Position.YI_SHENG.equals(memberPosition.getPositionCode())) {
firstAidLog.setOperationRole((byte)1);
}
}
if (Constant.Department.SHEN_WAI.equals(memberPosition.getDepartmentCode())) {
if (Constant.Position.YI_SHENG.equals(memberPosition.getPositionCode())) {
firstAidLog.setOperationRole((byte)2);
}
}
firstAidLogDao.insertSelective(firstAidLog);
//修改录入者userId为0
byAidId.setRecordUserId(0L);
firstAidMemberDao.updateByPrimaryKeySelective(byAidId);
}
@Override
public void updateStatus(FirstAidDto.UpdateStatus param, Long userId) {
//修改病例状态
FirstAid firstAid = firstAidDao.selectByPrimaryKey(param.getFirstAidId());
if (ObjectUtil.isNull(firstAid)) {
throw new BaseException(DefaultCodeError.NOT_FIRST_AID_ID);
}
//判断权限
OrganizationVo.MemberPosition memberPosition = organizationMemberDao.getMemberPosition(userId);
log.info("当前用户的科室职位信息:{}",memberPosition);
if (!Constant.Position.ZHI_KONG.equals(memberPosition.getPositionCode())) {
throw new BaseException(DefaultCodeError.NO_POWER);
}
if (0 == firstAid.getType()) {
if (!Constant.Department.SHEN_NEI.equals(memberPosition.getDepartmentCode())) {
throw new BaseException(DefaultCodeError.NO_POWER);
}
}
if (1 == firstAid.getType()) {
if (!Constant.Department.SHEN_WAI.equals(memberPosition.getDepartmentCode())) {
throw new BaseException(DefaultCodeError.NO_POWER);
}
}
switch (param.getDataStatus()) {
case 1:
if (0 != firstAid.getDataStatus() && 2 != firstAid.getDataStatus() && 4 != firstAid.getDataStatus()) {
throw new BaseException(DefaultCodeError.DATA_STATUS_ERROR);
}
break;
case 2:
if (0 != firstAid.getDataStatus()) {
throw new BaseException(DefaultCodeError.DATA_STATUS_ERROR);
}
break;
case 3:
if (0 != firstAid.getDataStatus() && 1 != firstAid.getDataStatus() && 2 != firstAid.getDataStatus() && 4 != firstAid.getDataStatus()) {
throw new BaseException(DefaultCodeError.DATA_STATUS_ERROR);
}
break;
case 4:
if (0 != firstAid.getDataStatus() && 1 != firstAid.getDataStatus() && 2 != firstAid.getDataStatus()) {
throw new BaseException(DefaultCodeError.DATA_STATUS_ERROR);
}
break;
case 5:
if (1 != firstAid.getDataStatus() && 3 != firstAid.getDataStatus() && 6 != firstAid.getDataStatus()) {
throw new BaseException(DefaultCodeError.DATA_STATUS_ERROR);
}
Integer updateNumber = firstAidLogDao.countUpdateNumber(param.getFirstAidId());
if (updateNumber >= Constant.MAX_UPDATE_NUMBER) {
throw new BaseException(DefaultCodeError.SURPASS_MAX_NUMBER);
}
break;
default:
throw new BaseException(DefaultCodeError.DATA_STATUS_ERROR);
}
firstAid.setDataStatus(param.getDataStatus());
firstAidDao.updateByPrimaryKeySelective(firstAid);
//添加日志
FirstAidLog firstAidLog = new FirstAidLog();
firstAidLog.setId(snowflake.nextId());
firstAidLog.setFirstAidId(param.getFirstAidId());
firstAidLog.setOperationTime(System.currentTimeMillis());
firstAidLog.setOperationUserId(userId);
if (1 == param.getDataStatus() || 3 == param.getDataStatus()){
firstAidLog.setOperationType((byte)1);
}
if (2 == param.getDataStatus() || 4 == param.getDataStatus()){
firstAidLog.setOperationType((byte)2);
}
if (5 == param.getDataStatus()){
firstAidLog.setOperationType((byte)3);
}
firstAidLog.setOperationRole((byte)3);
firstAidLogDao.insertSelective(firstAidLog);
}
}

26
src/main/java/com/ccsens/carbasics/service/IFirstAidService.java

@ -1,6 +1,9 @@
package com.ccsens.carbasics.service;
import com.ccsens.carbasics.bean.dto.FirstAidDto;
import com.ccsens.carbasics.bean.dto.PatientDto;
import com.ccsens.carbasics.bean.vo.FirstAidVo;
import com.ccsens.carbasics.bean.vo.PatientVo;
import com.github.pagehelper.PageInfo;
@ -58,4 +61,27 @@ public interface IFirstAidService {
* @param userId userId
*/
void updateStatusBySecretary(PatientDto.StatusBySecretary param, Long userId);
/**
* 医生加入急救
* @param param 参数
* @param userId 用户id
* @return 项目id
*/
FirstAidVo.ProjectInfo joinFirstAid(FirstAidDto.JoinFirstAid param, Long userId);
/**
* 退出急救
* @param param 急救id
* @param userId 当前用户id
*/
void quitFirstAid(FirstAidDto.QuitFirstAid param, Long userId);
/**
* 修改病例状态
* @param param 急救状态/FirstAidId
* @param userId 当前用户id
*/
void updateStatus(FirstAidDto.UpdateStatus param, Long userId);
}

25
src/main/java/com/ccsens/carbasics/util/Constant.java

@ -33,16 +33,17 @@ public class Constant {
public static final String YI_SHENG = "YiSheng";
/**秘书*/
public static final String MI_SHU = "MiShu";
/**质控员*/
public static final String ZHI_KONG = "ZhiKong";
}
public enum OrganizationType {
/**
* 职位归属 0省卫健委 1省质控 2市质控 3医院'
*/
SWJW((byte) 0,"省卫健委"),
PROVINCE_QUALITY((byte) 1,"省质控"),
CITY_QUALITY((byte) 2,"市质控"),
HOSPITAL((byte) 3,"医院")
;
SWJW((byte) 0, "省卫健委"),
PROVINCE_QUALITY((byte) 1, "省质控"),
CITY_QUALITY((byte) 2, "市质控"),
HOSPITAL((byte) 3, "医院");
public byte status;
public String message;
@ -50,7 +51,13 @@ public class Constant {
this.status = status;
this.message = message;
}
}
/** 项目中的角色名称 */
public static final class RoleName {
/**神内医生*/
public static final String SHEN_NEI = "神内医生";
/**神外医生*/
public static final String SHEN_WAI = "神外医生";
}
public enum DataStatus {
/**
@ -160,4 +167,10 @@ public class Constant {
* 创建病例:模板项目id
*/
public static final String TEMPLATE_PROJECT_KEY = "template_project_key";
/**
* 最大修改次数
*/
public static final Integer MAX_UPDATE_NUMBER = 1;
}

5
src/main/java/com/ccsens/carbasics/util/DefaultCodeError.java

@ -35,6 +35,11 @@ public class DefaultCodeError extends CodeError {
public static final Code NOT_ORGANIZATION = new Code(23,"机构信息尚未配置,请联系运维人员", true);
public static final Code PROJECT_NAME_REPEAT = new Code(24,"项目名称重复", true);
public static final Code FEIGN_ERROR = new Code(25,"导入项目失败", true);
public static final Code DOCTOR_HAS_JOINED = new Code(20,"已有医生加入", true);
public static final Code REPEAT_QUIT = new Code(21,"您已经不是录入者,无需重复退出", true);
public static final Code DATA_STATUS_ERROR = new Code(22,"请先完成之前的审核", true);
public static final Code SURPASS_MAX_NUMBER = new Code(22,"超过最大申请修改次数", true);

12
src/main/resources/mapper_dao/FirstAidLogDao.xml

@ -32,4 +32,16 @@
AND l.rec_status = 0
AND m.rec_status = 0
</select>
<select id="countUpdateNumber" resultType="java.lang.Integer">
SELECT
COUNT(id)
FROM
t_qcp_first_aid_log
WHERE
rec_status = 0
AND first_aid_id = #{firstAidId}
AND operation_type = 3
AND operation_role = 3
</select>
</mapper>

19
src/main/resources/mapper_dao/FirstAidMemberDao.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.carbasics.persist.dao.FirstAidMemberDao">
<select id="findByAidId" resultType="com.ccsens.carbasics.bean.po.FirstAidMember">
SELECT
id,
first_aid_id,
create_user_id,
record_user_id
FROM
t_qcp_first_aid_member
WHERE
rec_status = 0
AND first_aid_id = #{firstAidId}
LIMIT 1
</select>
</mapper>

1
src/main/resources/mapper_dao/OrganizationMemberDao.xml

@ -7,6 +7,7 @@
m.id,
m.`name`,
p.id as positionId,
m.`contact`,
p.`code` as positionCode,
d.id as departmentId,
d.`code` as departmentCode,

Loading…
Cancel
Save