|
@@ -11,10 +11,13 @@ import org.checkerframework.checker.units.qual.A;
|
|
|
import org.jeecg.common.exception.JeecgBootException;
|
|
import org.jeecg.common.exception.JeecgBootException;
|
|
|
import org.jeecg.common.system.vo.LoginUser;
|
|
import org.jeecg.common.system.vo.LoginUser;
|
|
|
import org.jeecg.modules.medical.common.bo.*;
|
|
import org.jeecg.modules.medical.common.bo.*;
|
|
|
|
|
+import org.jeecg.modules.medical.common.enums.AfterwardsAuditStatusEnum;
|
|
|
import org.jeecg.modules.medical.entity.AfterwardsAudit;
|
|
import org.jeecg.modules.medical.entity.AfterwardsAudit;
|
|
|
import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
|
|
import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.MedicalDoctorAppealRecord;
|
|
|
import org.jeecg.modules.medical.mapper.AfterwardsAuditMapper;
|
|
import org.jeecg.modules.medical.mapper.AfterwardsAuditMapper;
|
|
|
import org.jeecg.modules.medical.service.IAfterwardsAuditService;
|
|
import org.jeecg.modules.medical.service.IAfterwardsAuditService;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IMedicalDoctorAppealRecordService;
|
|
|
import org.jeecg.modules.system.entity.SysDepart;
|
|
import org.jeecg.modules.system.entity.SysDepart;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -42,6 +45,8 @@ import java.util.stream.Collectors;
|
|
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
|
public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMapper, AfterwardsAudit> implements IAfterwardsAuditService {
|
|
public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMapper, AfterwardsAudit> implements IAfterwardsAuditService {
|
|
|
|
|
|
|
|
|
|
+ /** 科室/医生复核服务 */
|
|
|
|
|
+ private final IMedicalDoctorAppealRecordService appealRecordService;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public IPage<ReportAfterQueryResponseBO> departmentStatistics(Page<AfterwardsAudit> page, AfterwardsAudit afterwardsAudit) {
|
|
public IPage<ReportAfterQueryResponseBO> departmentStatistics(Page<AfterwardsAudit> page, AfterwardsAudit afterwardsAudit) {
|
|
@@ -98,17 +103,7 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
|
|
|
public boolean audit(String loginUserName, AuditRequestBO param) {
|
|
public boolean audit(String loginUserName, AuditRequestBO param) {
|
|
|
AfterwardsAudit a = new AfterwardsAudit();
|
|
AfterwardsAudit a = new AfterwardsAudit();
|
|
|
|
|
|
|
|
- LambdaQueryWrapper<AfterwardsAudit> queryWrapper = Wrappers.<AfterwardsAudit>lambdaQuery()
|
|
|
|
|
- .eq(AfterwardsAudit::getId, param.getId());
|
|
|
|
|
- List<AfterwardsAudit> list = this.list(queryWrapper);
|
|
|
|
|
- if (CollectionUtils.isEmpty(list)) {
|
|
|
|
|
- log.error("根据参数={},获取审核表时,取不到数据", param.getId());
|
|
|
|
|
- throw new JeecgBootException("参数异常,找不到要审核的数据");
|
|
|
|
|
- }
|
|
|
|
|
- a = list.get(0);
|
|
|
|
|
- if (list.size() > 1) {
|
|
|
|
|
- log.error("审核中心审核表根据id={}获取记录时,获取到多条", param.getId());
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ a = loadAfterwardsAuditById(param.getId());
|
|
|
|
|
|
|
|
// 检查当前状态
|
|
// 检查当前状态
|
|
|
if (!ObjectUtils.nullSafeEquals("wait", a.getCheckState()) && !ObjectUtils.nullSafeEquals("reAudit", a.getCheckState())) {
|
|
if (!ObjectUtils.nullSafeEquals("wait", a.getCheckState()) && !ObjectUtils.nullSafeEquals("reAudit", a.getCheckState())) {
|
|
@@ -118,22 +113,32 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
|
|
|
|
|
|
|
|
Date nowTime = new Date();
|
|
Date nowTime = new Date();
|
|
|
|
|
|
|
|
- switch (param.getCheckState()) {
|
|
|
|
|
- case "pass": //系统问题,过了
|
|
|
|
|
- case "violation":
|
|
|
|
|
- a.setCheckState(param.getCheckState());
|
|
|
|
|
|
|
+ AfterwardsAuditStatusEnum checkStatus = AfterwardsAuditStatusEnum.findEnums(param.getCheckState());
|
|
|
|
|
+ if (checkStatus == null) {
|
|
|
|
|
+ log.error("不支持的审核状态={}", param.getCheckState());
|
|
|
|
|
+ throw new JeecgBootException("不支持的审核状态,请检查");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ switch (checkStatus) {
|
|
|
|
|
+ case pass: //系统问题,过了
|
|
|
|
|
+ case violation:
|
|
|
|
|
+
|
|
|
|
|
+ a.setCheckState(AfterwardsAuditStatusEnum.finish.getStatus());
|
|
|
|
|
+ a.setStatus("");// 直接违规或者结果通过,这个给空
|
|
|
|
|
+ a.setReviewResults(checkStatus.getStatus());
|
|
|
a.setCheckBy(loginUserName);// 审核人
|
|
a.setCheckBy(loginUserName);// 审核人
|
|
|
|
|
|
|
|
a.setAuditTime(nowTime);
|
|
a.setAuditTime(nowTime);
|
|
|
a.setUpdateTime(nowTime);
|
|
a.setUpdateTime(nowTime);
|
|
|
a.setUpdateBy(loginUserName);
|
|
a.setUpdateBy(loginUserName);
|
|
|
break;
|
|
break;
|
|
|
- case "issue_review": //下发审核
|
|
|
|
|
- a.setCheckState(param.getCheckState()); // 下发审核
|
|
|
|
|
|
|
+ case issue_review: //下发审核
|
|
|
|
|
+ a.setCheckState(AfterwardsAuditStatusEnum.process.getStatus()); // 审核流转为处理中
|
|
|
|
|
+ a.setStatus(AfterwardsAuditStatusEnum.dept_audit_wait.getStatus());// 状态为等待科室处理
|
|
|
|
|
+ a.setReviewResults(AfterwardsAuditStatusEnum.issue_review.getStatus());
|
|
|
a.setPreCheckBy(loginUserName);
|
|
a.setPreCheckBy(loginUserName);
|
|
|
a.setPreAuditTime(nowTime); //审核人员
|
|
a.setPreAuditTime(nowTime); //审核人员
|
|
|
|
|
|
|
|
- a.setStartTime("科室处理");// TODO 定一下这个枚举
|
|
|
|
|
a.setCheckBy(a.getDoctorId());// 分配给符合人
|
|
a.setCheckBy(a.getDoctorId());// 分配给符合人
|
|
|
// a.setAuditTime(nowTime);
|
|
// a.setAuditTime(nowTime);
|
|
|
a.setUpdateTime(nowTime);
|
|
a.setUpdateTime(nowTime);
|
|
@@ -141,12 +146,14 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
log.error("不支持的审核状态={}", param.getCheckState());
|
|
log.error("不支持的审核状态={}", param.getCheckState());
|
|
|
- break;
|
|
|
|
|
|
|
+ throw new JeecgBootException("不支持的审核状态,请检查");
|
|
|
}
|
|
}
|
|
|
this.saveOrUpdate(a);
|
|
this.saveOrUpdate(a);
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public DeptAuditResponse deptAuditPanel(String loginUserName) {
|
|
public DeptAuditResponse deptAuditPanel(String loginUserName) {
|
|
|
// 根据当前登录,先获取到医生面板
|
|
// 根据当前登录,先获取到医生面板
|
|
@@ -172,8 +179,110 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Transactional(readOnly = false)
|
|
|
@Override
|
|
@Override
|
|
|
- public boolean deptAudit(String loginUserName, AuditRequestBO param) {
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ public boolean deptAudit(String loginUserName, DeptAuditRequestBO param) {
|
|
|
|
|
+ // 根据当前登录,先获取到医生面板
|
|
|
|
|
+ SysDepart sysDepart = baseMapper.loadUserDept(loginUserName);
|
|
|
|
|
+ if (null == sysDepart) {
|
|
|
|
|
+ log.error("找不到当前医生的科室,请检查");
|
|
|
|
|
+ throw new JeecgBootException("找不到当前医生的科室,请检查!");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 当前登录科室/医生端的科室code
|
|
|
|
|
+ String medicalDeptCode = sysDepart.getMedicalDeptCode();
|
|
|
|
|
+ // 1.获取当前需要复核的id,是否为当前科室。
|
|
|
|
|
+ AfterwardsAudit audit = this.loadAfterwardsAuditById(param.getId());
|
|
|
|
|
+ if (null == audit) {
|
|
|
|
|
+ log.error("根据参数={},获取审核表时,取不到数据", param.getId());
|
|
|
|
|
+ throw new JeecgBootException("参数异常,找不到要审核的数据");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!ObjectUtils.nullSafeEquals(medicalDeptCode, audit.getMedicalDeptCode())) {
|
|
|
|
|
+ log.error("当前登录用户科室为={}, 需要处理数据的科室为={},不匹配,无法继续操作", medicalDeptCode, audit.getMedicalDeptCode());
|
|
|
|
|
+ throw new JeecgBootException("请求数据与您非同一科室,请检查!");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果审核流转状态不为待处理,则不允许继续
|
|
|
|
|
+ if (!ObjectUtils.nullSafeEquals(AfterwardsAuditStatusEnum.process.getStatus(), audit.getCheckState())) {
|
|
|
|
|
+ log.error("当前申诉工单id={}, 审核流转状态为={},非处理中,请检查!", param.getId(), audit.getCheckState());
|
|
|
|
|
+ throw new JeecgBootException("审核流转状态不是处理中,请检查!");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 审核状态为处理中 && 处理中的状态为 待科室审核时,才继续
|
|
|
|
|
+ if (!ObjectUtils.nullSafeEquals(AfterwardsAuditStatusEnum.issue_review.getStatus() ,audit.getReviewResults())) {
|
|
|
|
|
+ log.error("当前申诉工单id={}, 审查结果={},非下发复核状态,请检查!", param.getId(), audit.getStatus());
|
|
|
|
|
+ throw new JeecgBootException("审查结果非下发复核状态,请检查!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Integer appealNumber = 1;
|
|
|
|
|
+ // 获取过往的申诉记录,取出最大次数
|
|
|
|
|
+ MedicalDoctorAppealRecord historyAppealRecord = appealRecordService.loadMaxAppealNumber(audit.getId(), audit.getMedicalDeptCode(), audit.getDoctorId());
|
|
|
|
|
+ if (historyAppealRecord != null && historyAppealRecord.getAppealNumber() != null && historyAppealRecord.getAppealNumber() > 0) {
|
|
|
|
|
+ appealNumber = historyAppealRecord.getAppealNumber();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ MedicalDoctorAppealRecord appealRecord = new MedicalDoctorAppealRecord();
|
|
|
|
|
+
|
|
|
|
|
+ appealRecord.setAppealNumber(appealNumber);// TODO
|
|
|
|
|
+ appealRecord.setCreateTime(new Date()); // 处理时间
|
|
|
|
|
+ appealRecord.setCreateBy(loginUserName);// 处理人
|
|
|
|
|
+ appealRecord.setAppealStatus(param.getCheckState());
|
|
|
|
|
+ appealRecord.setMedicalDeptCode(medicalDeptCode);
|
|
|
|
|
+ appealRecord.setMedicalDeptName(audit.getMedicalDeptName());
|
|
|
|
|
+ appealRecord.setDoctorId(audit.getDoctorId());
|
|
|
|
|
+ appealRecord.setDoctorName(audit.getDoctorName());
|
|
|
|
|
+ appealRecord.setAfterwardsAuditId(audit.getId());
|
|
|
|
|
+ // 2.开始校验处理状态
|
|
|
|
|
+ switch (param.getCheckState()) {
|
|
|
|
|
+ case "appeal": //申诉
|
|
|
|
|
+ appealRecord.setDescription(param.getDescription());
|
|
|
|
|
+ appealRecord.setImgPath(param.getImgPaths());
|
|
|
|
|
+
|
|
|
|
|
+ audit.setCheckBy(audit.getPreCheckBy()); //下一个审核人员为 下发给科室的人员继续审核
|
|
|
|
|
+ audit.setPreCheckBy(loginUserName); // 上一个审核人员为当前审核人员
|
|
|
|
|
+ audit.setPreAuditTime(new Date()); // 上一个审查时间,是当前时间
|
|
|
|
|
+ audit.setStatus(AfterwardsAuditStatusEnum.dept_audit_wait.getStatus()); //审核状态为等待科室处理
|
|
|
|
|
+ audit.setReviewResults(AfterwardsAuditStatusEnum.doctor_appeal.getStatus());// 申诉时,审核结果为医生申诉
|
|
|
|
|
+ audit.setUpdateTime(new Date());
|
|
|
|
|
+ audit.setUpdateBy(loginUserName);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "agree_audit": // 同意审核结果
|
|
|
|
|
+ audit.setCheckBy(audit.getPreCheckBy()); //下一个审核人员为 下发给科室的人员继续审核
|
|
|
|
|
+ audit.setPreCheckBy(loginUserName); // 上一个审核人员为当前审核人员
|
|
|
|
|
+ audit.setPreAuditTime(new Date()); // 上一个审查时间,是当前时间
|
|
|
|
|
+ audit.setCheckState(AfterwardsAuditStatusEnum.finish.getStatus());
|
|
|
|
|
+ audit.setStatus("");// 直接完成,这个状态给空
|
|
|
|
|
+ audit.setReviewResults(AfterwardsAuditStatusEnum.agree_audit.getStatus());
|
|
|
|
|
+ audit.setUpdateTime(new Date());
|
|
|
|
|
+ audit.setUpdateBy(loginUserName);
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ log.error("不支持的审核状态={}", param.getCheckState());
|
|
|
|
|
+ throw new JeecgBootException("不支持的审核状态");
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ this.saveOrUpdate(audit);
|
|
|
|
|
+ appealRecordService.save(appealRecord);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据id获取 事后工单
|
|
|
|
|
+ * @param id
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public AfterwardsAudit loadAfterwardsAuditById(String id) {
|
|
|
|
|
+ AfterwardsAudit a;
|
|
|
|
|
+ LambdaQueryWrapper<AfterwardsAudit> queryWrapper = Wrappers.<AfterwardsAudit>lambdaQuery()
|
|
|
|
|
+ .eq(AfterwardsAudit::getId, id);
|
|
|
|
|
+ List<AfterwardsAudit> list = this.list(queryWrapper);
|
|
|
|
|
+ if (CollectionUtils.isEmpty(list)) {
|
|
|
|
|
+ log.error("根据参数={},获取审核表时,取不到数据", id);
|
|
|
|
|
+ throw new JeecgBootException("参数异常,找不到要审核的数据");
|
|
|
|
|
+ }
|
|
|
|
|
+ a = list.get(0);
|
|
|
|
|
+ if (list.size() > 1) {
|
|
|
|
|
+ log.error("审核中心审核表根据id={}获取记录时,获取到多条", id);
|
|
|
|
|
+ }
|
|
|
|
|
+ return a;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|