|
|
@@ -0,0 +1,236 @@
|
|
|
+package thyyxxk.webserver.service.crbmanagement;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import thyyxxk.webserver.config.exception.ExceptionEnum;
|
|
|
+import thyyxxk.webserver.dao.his.crbmanagement.EmrActivityInfoDao;
|
|
|
+import thyyxxk.webserver.entity.ResultVo;
|
|
|
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfo;
|
|
|
+import thyyxxk.webserver.entity.crbmanagement.EmrActivityInfoVo;
|
|
|
+import thyyxxk.webserver.entity.crbmanagement.ParamVo;
|
|
|
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrAdmissionInfo;
|
|
|
+import thyyxxk.webserver.entity.crbmanagement.emr.EmrDischargeInfo;
|
|
|
+import thyyxxk.webserver.entity.dictionary.EmployeeMi;
|
|
|
+import thyyxxk.webserver.service.externalhttp.CrbUploadService;
|
|
|
+import thyyxxk.webserver.utils.ResultVoUtil;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ClassName EmrActivityInfoService
|
|
|
+ * @Author hsh
|
|
|
+ * @Date 2025/9/23 0023 8:42
|
|
|
+ * @Version 1.0
|
|
|
+ * @Description 患者诊疗活动信息
|
|
|
+ **/
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class EmrActivityInfoService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EmrActivityInfoDao dao;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private CrbUploadService crbUploadService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private CrbBaseService crbBaseService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private CrbUpdateByEmr crbUpdateByEmr;
|
|
|
+
|
|
|
+ @Value("${si-crb-url}")
|
|
|
+ private String siCrbUrl;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description 患者诊疗活动信息表数据上传
|
|
|
+ * @Author hsh
|
|
|
+ * @param emrActivityInfo 患者诊疗活动信息表数据
|
|
|
+ * @return JSONObject
|
|
|
+ * @Date 2025/9/17 0017 15:31
|
|
|
+ */
|
|
|
+ public ResultVo<JSONObject> uploadEmrActivityInfo(EmrActivityInfo emrActivityInfo) {
|
|
|
+// JSONObject object = crbUploadService.uploadEmrActivityInfo(siCrbUrl, emrActivityInfo);
|
|
|
+ JSONObject object = new JSONObject();
|
|
|
+ object.put("result", true);
|
|
|
+ object.put("id", emrActivityInfo.getId());
|
|
|
+ object.put("desc", "【测试】操作成功!");
|
|
|
+ EmrActivityInfoVo vo = new EmrActivityInfoVo();
|
|
|
+ BeanUtils.copyProperties(emrActivityInfo, vo);
|
|
|
+ boolean f = (boolean) object.get("result");
|
|
|
+ if(!f){
|
|
|
+ // 保存上传患者诊疗活动信息
|
|
|
+ vo.setUploadFlag(0);
|
|
|
+ vo.setUploadType((String) object.get("errorCode"));
|
|
|
+ vo.setUploadMsg((String) object.get("errorName"));
|
|
|
+ saveActivityInfoData(vo);
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, crbBaseService.errInfoTips(object));
|
|
|
+ } else {
|
|
|
+ // 保存上传患者诊疗活动信息
|
|
|
+ vo.setUploadFlag(1);
|
|
|
+ vo.setUploadType((String) object.get("id"));
|
|
|
+ vo.setUploadMsg((String) object.get("desc"));
|
|
|
+ saveActivityInfoData(vo);
|
|
|
+
|
|
|
+ }
|
|
|
+ return ResultVoUtil.success(object);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description 查询患者诊疗活动信息表
|
|
|
+ * @Author hsh
|
|
|
+ * @param vo 条件
|
|
|
+ * @return list 患者诊疗活动信息
|
|
|
+ * @Date 2025/9/22 0022 14:31
|
|
|
+ */
|
|
|
+ public ResultVo<List<EmrActivityInfoVo>> selectActivityInfo(ParamVo vo) {
|
|
|
+ QueryWrapper<EmrActivityInfoVo> mzQw = new QueryWrapper<>();
|
|
|
+ QueryWrapper<EmrActivityInfoVo> zyQw = new QueryWrapper<>();
|
|
|
+ QueryWrapper<EmrActivityInfoVo> cyQw = new QueryWrapper<>();
|
|
|
+ String tjType = vo.getTjType();
|
|
|
+ String orgCode = crbBaseService.sysParametersByCode("orgCode");
|
|
|
+ String orgName = crbBaseService.sysParametersByCode("orgName");
|
|
|
+ if(StringUtils.isNotEmpty(vo.getPatNo())){
|
|
|
+ mzQw.eq("mz.patient_id", vo.getPatNo());
|
|
|
+ zyQw.eq("mi.inpatient_no", vo.getPatNo());
|
|
|
+ cyQw.eq("mi.inpatient_no", vo.getPatNo());
|
|
|
+ } else {
|
|
|
+ mzQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "mz.visit_date", vo.getStartTime());
|
|
|
+ mzQw.le(StringUtils.isNotBlank(vo.getEndTime()), "mz.visit_date", vo.getEndTime());
|
|
|
+ zyQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "zy.admiss_date", vo.getStartTime());
|
|
|
+ zyQw.le(StringUtils.isNotBlank(vo.getEndTime()), "zy.admiss_date", vo.getEndTime());
|
|
|
+ cyQw.ge(StringUtils.isNotBlank(vo.getStartTime()), "zy.dis_date", vo.getStartTime());
|
|
|
+ cyQw.le(StringUtils.isNotBlank(vo.getEndTime()), "zy.dis_date", vo.getEndTime());
|
|
|
+ }
|
|
|
+ mzQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
|
|
|
+ zyQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
|
|
|
+ cyQw.like(StringUtils.isNotEmpty(vo.getPatName()), "mi.name", vo.getPatName());
|
|
|
+ mzQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
|
|
|
+ zyQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
|
|
|
+ cyQw.eq(StringUtils.isNotEmpty(vo.getIdCard()), "mi.social_no", vo.getIdCard());
|
|
|
+
|
|
|
+ List<EmrActivityInfoVo> result = new ArrayList<>();
|
|
|
+ if("1".equals(tjType)){
|
|
|
+ // 门诊病人
|
|
|
+ List<EmrActivityInfoVo> mzList = dao.selectEmrActivityInfoByMz(orgCode, orgName, mzQw);
|
|
|
+ if(null != mzList && !mzList.isEmpty()){
|
|
|
+ callIllIcdCategory(mzList);
|
|
|
+ result.addAll(mzList);
|
|
|
+ }
|
|
|
+ } else if("2".equals(tjType)){
|
|
|
+ // 在院病人
|
|
|
+ assembleEmrActivityInfoByZy(zyQw, orgCode, orgName, result);
|
|
|
+ } else if("3".equals(tjType)){
|
|
|
+ // 出院病人
|
|
|
+ assembleEmrActivityInfoByCy(cyQw, orgCode, orgName, result);
|
|
|
+ } else {
|
|
|
+ List<EmrActivityInfoVo> mzList = dao.selectEmrActivityInfoByMz(orgCode, orgName, mzQw);
|
|
|
+ if(null != mzList && !mzList.isEmpty()){
|
|
|
+ callIllIcdCategory(mzList);
|
|
|
+ result.addAll(mzList);
|
|
|
+ }
|
|
|
+ assembleEmrActivityInfoByZy(zyQw, orgCode, orgName, result);
|
|
|
+ assembleEmrActivityInfoByCy(cyQw, orgCode, orgName, result);
|
|
|
+ }
|
|
|
+ return ResultVoUtil.success(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assembleEmrActivityInfoByZy(QueryWrapper<EmrActivityInfoVo> zyQw, String orgCode, String orgName, List<EmrActivityInfoVo> result) {
|
|
|
+ List<EmrActivityInfoVo> zyList = dao.selectEmrActivityInfoByZy(orgCode, orgName, zyQw);
|
|
|
+ if(null != zyList && !zyList.isEmpty()){
|
|
|
+ // crbUpdateByEmr.getEmrAdmissionInfo()
|
|
|
+ for(EmrActivityInfoVo infoVo : zyList){
|
|
|
+ EmrAdmissionInfo emrPatientData = crbUpdateByEmr.getEmrAdmissionInfo(infoVo.getPatientId(), infoVo.getTimes());
|
|
|
+ if(null != emrPatientData){
|
|
|
+ BeanUtils.copyProperties(emrPatientData, infoVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callIllIcdCategory(zyList);
|
|
|
+ result.addAll(zyList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assembleEmrActivityInfoByCy(QueryWrapper<EmrActivityInfoVo> zyQw, String orgCode, String orgName, List<EmrActivityInfoVo> result) {
|
|
|
+ List<EmrActivityInfoVo> cyList = dao.selectEmrActivityInfoByCy(orgCode, orgName, zyQw);
|
|
|
+ if(null != cyList && !cyList.isEmpty()){
|
|
|
+ // crbUpdateByEmr.getEmrAdmissionInfo()
|
|
|
+ for(EmrActivityInfoVo infoVo : cyList){
|
|
|
+ EmrAdmissionInfo emrPatientData = crbUpdateByEmr.getEmrAdmissionInfo(infoVo.getPatientId(), infoVo.getTimes());
|
|
|
+ EmrDischargeInfo emrDischargeInfo = crbUpdateByEmr.getEmrDischargeInfo(infoVo.getPatientId(), infoVo.getTimes(), emrPatientData);
|
|
|
+ if(null != emrPatientData){
|
|
|
+ BeanUtils.copyProperties(emrPatientData, infoVo);
|
|
|
+ if(null != emrDischargeInfo){
|
|
|
+ infoVo.setWmDiseaseCode(emrDischargeInfo.getDischargeDiagnosisCode());
|
|
|
+ infoVo.setWmDiseaseName(emrDischargeInfo.getDischargeDiagnosisName());
|
|
|
+ EmployeeMi emi = dao.selectEmployeeMiNyCode(emrDischargeInfo.getChiefPhysicianId());
|
|
|
+ infoVo.setFillDoctor(StringUtils.trim(emi.getName()));
|
|
|
+ } else {
|
|
|
+ infoVo.setWmDiseaseCode(emrPatientData.getWmInitialDiagnosisCode());
|
|
|
+ infoVo.setWmDiseaseName(emrPatientData.getWmConfirmedDiagnosisName());
|
|
|
+ EmployeeMi emi = dao.selectEmployeeMiNyCode(emrPatientData.getChiefPhysicianId());
|
|
|
+ infoVo.setFillDoctor(StringUtils.trim(emi.getName()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callIllIcdCategory(cyList);
|
|
|
+ result.addAll(cyList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description 筛选传染病诊断并保存
|
|
|
+ * @Author hsh
|
|
|
+ * @param list 患者诊疗活动信息
|
|
|
+ * @Date 2025/9/22 0022 18:51
|
|
|
+ */
|
|
|
+ private void callIllIcdCategory(List<EmrActivityInfoVo> list) {
|
|
|
+ if(null != list && !list.isEmpty()){
|
|
|
+ for (EmrActivityInfoVo vo : list){
|
|
|
+ String icd = vo.getWmDiseaseCode();
|
|
|
+ List<String> icdList = Arrays.asList(icd.split(","));
|
|
|
+ List<Map<String, String>> zdList = dao.selectIcdNewDataList(icdList);
|
|
|
+ StringBuilder crbZd = new StringBuilder();
|
|
|
+ StringBuilder crbZdName = new StringBuilder();
|
|
|
+ for(Map<String, String> map : zdList){
|
|
|
+ String crbFlag = map.get("infectiousdiseasesFlag");
|
|
|
+ if("1".equals(crbFlag)){
|
|
|
+ crbZd.append(map.get("ybCode")).append("||");
|
|
|
+ crbZdName.append(map.get("ybName")).append("||");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(StringUtils.isNotEmpty(crbZd)){
|
|
|
+ vo.setDiseaseCode(crbZd.substring(0, crbZd.lastIndexOf("||")));
|
|
|
+ vo.setDiseaseName(crbZdName.substring(0, crbZdName.lastIndexOf("||")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Description 保存患者诊疗活动信息
|
|
|
+ * @Author hsh
|
|
|
+ * @param vo 患者诊疗活动信息
|
|
|
+ * @Date 2025/9/19 0019 17:07
|
|
|
+ */
|
|
|
+ public void saveActivityInfoData(EmrActivityInfoVo vo) {
|
|
|
+ EmrActivityInfo info = dao.selectEmrActivityInfoById(vo.getId());
|
|
|
+ if(null != info){
|
|
|
+ dao.deleteById(vo.getId());
|
|
|
+ dao.insert(vo);
|
|
|
+ } else {
|
|
|
+ dao.insert(vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|