diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/diagnosis/DiagnosisMedicalItemListMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/diagnosis/DiagnosisMedicalItemListMapper.java index 09eb196..c21c746 100644 --- a/src/main/java/com/syjiaer/clinic/server/mapper/diagnosis/DiagnosisMedicalItemListMapper.java +++ b/src/main/java/com/syjiaer/clinic/server/mapper/diagnosis/DiagnosisMedicalItemListMapper.java @@ -6,6 +6,7 @@ import com.syjiaer.clinic.server.entity.diagnosis.DiagnosisMedicalItemList; import org.apache.ibatis.annotations.Select; import java.util.List; +import java.util.Map; /** @@ -27,5 +28,15 @@ public interface DiagnosisMedicalItemListMapper extends BaseMapper selectDetailByCode(String code); + + + @Select("SELECT" + + " dmil.unit AS selected_unit," + + " dmil.unit_price AS selected_price," + + " dmil.number AS selected_num," + + " item.*" + + " FROM diagnosis_medical_item_list AS dmil LEFT JOIN item ON dmil.item_id = item.id" + + " WHERE dmil.diagnosis_code = #{code} and item.del_flag != 1") + List selectDetailByCodeNotDelete(String code); } diff --git a/src/main/java/com/syjiaer/clinic/server/service/diagnosis/CheckService.java b/src/main/java/com/syjiaer/clinic/server/service/diagnosis/CheckService.java new file mode 100644 index 0000000..8c530ba --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/service/diagnosis/CheckService.java @@ -0,0 +1,432 @@ +package com.syjiaer.clinic.server.service.diagnosis; + +import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.api.input.IM3101; +import com.syjiaer.clinic.server.common.api.input.im3101.FsiDiagnoseDtos; +import com.syjiaer.clinic.server.common.api.input.im3101.FsiEncounterDtos; +import com.syjiaer.clinic.server.common.api.input.im3101.FsiOrderDtos; +import com.syjiaer.clinic.server.common.api.input.im3101.PatientDtos; +import com.syjiaer.clinic.server.common.api.request.SocialRequest; +import com.syjiaer.clinic.server.common.util.DebugUtil; +import com.syjiaer.clinic.server.entity.charge.vo.ChargeItemListVo; +import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis; +import com.syjiaer.clinic.server.entity.diagnosis.DiagnosisMedicalGoodsList; +import com.syjiaer.clinic.server.entity.diagnosis.DiagnosisMedicalItemList; +import com.syjiaer.clinic.server.entity.diagnosis.DiagnosisMedicalRecord; +import com.syjiaer.clinic.server.entity.item.ItemGroupList; +import com.syjiaer.clinic.server.entity.organization.OrganizationMember; +import com.syjiaer.clinic.server.entity.patient.PatientInfo; +import com.syjiaer.clinic.server.entity.patient.PatientRegistration; +import com.syjiaer.clinic.server.entity.social.SocialDiagnose; +import com.syjiaer.clinic.server.entity.social.SocialUser; +import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper; +import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMedicalGoodsListMapper; +import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMedicalItemListMapper; +import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMedicalRecordMapper; +import com.syjiaer.clinic.server.mapper.item.ItemGroupListMapper; +import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; +import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper; +import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper; +import com.syjiaer.clinic.server.mapper.social.SocialUserMapper; +import com.syjiaer.clinic.server.service.BaseService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.syjiaer.clinic.server.common.config.Config; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Service +public class CheckService extends BaseService { + + @Autowired + private PatientRegistrationMapper patientRegistrationMapper; + + @Autowired + private SocialUserMapper socialUserMapper; + + @Autowired + private DiagnosisMapper diagnosisMapper; + + @Autowired + private PatientInfoMapper patientInfoMapper; + + @Autowired + private Config config; + + @Autowired + private DiagnosisMedicalRecordMapper diagnosisMedicalRecordMapper; + + @Autowired + private OrganizationMemberMapper organizationMemberMapper; + + @Autowired + private DiagnosisMedicalGoodsListMapper diagnosisMedicalGoodsListMapper; + + @Autowired + private DiagnosisMedicalItemListMapper diagnosisMedicalItemListMapper; + + @Autowired + private ItemGroupListMapper itemGroupListMapper; + + @Autowired + private SocialRequest socialRequest; + + public PatientRegistration getPatientRegistrationInfo(Integer registrationId) + { + return patientRegistrationMapper.selectById(registrationId); + } + + public void loggerInfo(String message,Object data) { + log.info("CheckService:事前事中:{} :extra:{}", message, data); + } + + public void check(Integer registrationId,String imCode) + { + loggerInfo("接收到数据请求:registrationId:"+registrationId,null); + + try { + // 获取挂号信息 + PatientRegistration patientRegistrationInfo = getPatientRegistrationInfo(registrationId); + + if (patientRegistrationInfo == null) + { + loggerInfo("挂号表数据为空",null); + + return; + } + + if (patientRegistrationInfo.getType() != 2) + { + loggerInfo("挂号数据非医保类型",null); + + return; + } + + if (patientRegistrationInfo.getStatus() != 3) + { + loggerInfo("挂号数据非已诊状态",null); + + return; + } + + //获取诊断主表 + QueryWrapper diagnosisQueryWrapper = new QueryWrapper<>(); + diagnosisQueryWrapper.eq("registration_id", registrationId); + diagnosisQueryWrapper.last("limit 1"); + Diagnosis diagnosis = diagnosisMapper.selectOne(diagnosisQueryWrapper); + + if (diagnosis == null) + { + loggerInfo("诊断数据不存在",null); + + return; + } + + //获取患者信息 + PatientInfo patientInfo = patientInfoMapper.selectById(diagnosis.getPatientId()); + + if (patientInfo==null) + { + loggerInfo("患者信息不存在",null); + + return; + } + + //查询医保用户信息 + QueryWrapper socialUserQueryWrapper = new QueryWrapper<>(); + socialUserQueryWrapper.eq("certno", patientInfo.getCertNo()); + socialUserQueryWrapper.last("limit 1"); + SocialUser socialUserInfo = socialUserMapper.selectOne(socialUserQueryWrapper); + + if (socialUserInfo==null) + { + loggerInfo("医保用户信息不存在",null); + + return; + } + + //查询病例 病例 diagnosis_medical_record + QueryWrapper diagnosisMedicalRecordWrapper = new QueryWrapper<>(); + diagnosisMedicalRecordWrapper.eq("diagnosis_code",diagnosis.getCode()); + DiagnosisMedicalRecord record = diagnosisMedicalRecordMapper.selectOne(diagnosisMedicalRecordWrapper); + + if (record==null) + { + loggerInfo("诊断信息为空",null); + + return; + } + + //医生信息 + OrganizationMember organizationMember = organizationMemberMapper.selectById(patientRegistrationInfo.getOrganizationDoctorId()); + + if (organizationMember==null) + { + loggerInfo("医生信息不存在",null); + + return; + } + + makeRequest(socialUserInfo,patientRegistrationInfo,diagnosis,record,organizationMember); + } catch (Exception e) { + log.error("事前事中:error_message:{}",e.getMessage()); + + e.printStackTrace(); + } + } + + + public void makeRequest(SocialUser socialUser,PatientRegistration patientRegistration,Diagnosis diagnosis,DiagnosisMedicalRecord record,OrganizationMember organizationMember) + { + IM3101 im3101 = new IM3101(); + + im3101.setSyscode(config.get("social", "syscode")); + im3101.setTrigScen("1"); + PatientDtos patientDtos = new PatientDtos(); + patientDtos.setPatnId(socialUser.getPsnNo()); + patientDtos.setPatnName(socialUser.getPsnName()); + patientDtos.setGend(Integer.valueOf(socialUser.getGend())); + patientDtos.setBrdy(socialUser.getBrdy()); + patientDtos.setPoolarea(patientRegistration.getInsutype()); + patientDtos.setCurrMdtrtId(socialUser.getPsnNo()); + im3101.setPatientDtos(patientDtos); + + + FsiEncounterDtos fsiEncounterDtos = new FsiEncounterDtos(); + fsiEncounterDtos.setMdtrtId(diagnosis.getCode()); + fsiEncounterDtos.setMedinsId(config.get("social", "medinsId")); + fsiEncounterDtos.setMedinsName(config.get("social", "fixmedinsName")); + fsiEncounterDtos.setMedinsAdmdvs(config.get("social", "insuplcAdmdvs")); + //定点医疗机构-1 定点零售药店-2 工伤定点康复机构-3 辅助器具配置机构-4 计划生育服务机构-5 + fsiEncounterDtos.setMedinsType("1"); + // 目前不知道啥意思写死05 + fsiEncounterDtos.setMedinsLv("05"); + fsiEncounterDtos.setAdmDate(diagnosis.getCreateTime()); + fsiEncounterDtos.setDscgDate(diagnosis.getCreateTime()); + // 获取主诊断 + List diagnoseList = JSONArray.parseArray(record.getDiagnosisDetail(),SocialDiagnose.class); + fsiEncounterDtos.setDscgMainDiseCodg(diagnoseList.get(0).getCode()); + fsiEncounterDtos.setDscgMainDiseName(diagnoseList.get(0).getName()); + patientDtos.setFsiEncounterDtos(fsiEncounterDtos); + + //诊断信息DTO + List fsiDiagnoseDtosList= new ArrayList<>(); + for (int i = 0; i < diagnoseList.size(); i++) { + SocialDiagnose diagnoseInfo = diagnoseList.get(i); + + //主诊断是1 其他的诊断是0 + String maindiseFlag = "0"; + + if (i==0) { + maindiseFlag = "1"; + } + + FsiDiagnoseDtos fsiDiagnoseDtos = new FsiDiagnoseDtos(); + fsiDiagnoseDtos.setDiseId(diagnosis.getCode()+"_"+i); + //干啥的不知道 默认1 + fsiDiagnoseDtos.setInoutDiseType("1"); + // 主诊断是1 别的是0 第一个是1其他的是0 + fsiDiagnoseDtos.setMaindiseFlag(maindiseFlag); + //数组下标 从1开始 + fsiDiagnoseDtos.setDiasSrtNo(String.valueOf(i + 1)); + fsiDiagnoseDtos.setDiseCodg(diagnoseInfo.getCode()); + fsiDiagnoseDtos.setDiseName(diagnoseInfo.getName()); + //取diagnosis创建时间 + fsiDiagnoseDtos.setDiseDate(diagnosis.getCreateTime()); + fsiDiagnoseDtosList.add(fsiDiagnoseDtos); + } + fsiEncounterDtos.setFsiDiagnoseDtos(fsiDiagnoseDtosList); + + //医生表里面查 + fsiEncounterDtos.setDrCodg(organizationMember.getSocialMemberCode()); + //下面的4个瞎写 写死就行 + fsiEncounterDtos.setAdmDeptCodg("XY"); + fsiEncounterDtos.setAdmDeptName("西医科"); + fsiEncounterDtos.setDscgDeptCodg("XY"); + fsiEncounterDtos.setDscgDeptName("西医科"); + //这玩意儿没有 字典表没有 + fsiEncounterDtos.setMedMdtrtType("1"); + // 11是普通门诊 110104是门诊统筹 + fsiEncounterDtos.setMedType("11"); + + + //处方(医嘱)信息 医疗服务信息*------------------------------------------------------------------------------------------------------------ + + List fsiOrderDtosList= new ArrayList<>(); + //获取病例商品信息 和 病例服务信息 + List goodsList = diagnosisMedicalGoodsListMapper.listByDiagnosisCode(diagnosis.getCode()); + List itemList = diagnosisMedicalItemListMapper.selectDetailByCodeNotDelete(diagnosis.getCode()); + + for (DiagnosisMedicalGoodsList goodsInfo : goodsList) { + FsiOrderDtos fsiOrderDtos = new FsiOrderDtos(); + fsiOrderDtos.setRxId(String.valueOf(goodsInfo.getId())); + fsiOrderDtos.setRxno(String.valueOf(goodsInfo.getId())); + //[1=是,0=否] + fsiOrderDtos.setLongDrordFlag("0"); + //101 西药中成药 104 民族药 + //102 中药饮片 201 医疗服务项目 + //103 自制剂 301 医用耗材 + fsiOrderDtos.setHilistType("101"); + //收费类别 传啥不知道 ----字典表没有 + fsiOrderDtos.setChrgType("02"); + // 传啥不知道 ----字典表没有 + fsiOrderDtos.setDrordBhvr("0"); + fsiOrderDtos.setHilistCode(goodsInfo.getSocialCode()); + fsiOrderDtos.setHilistName(goodsInfo.getName()); + fsiOrderDtos.setHilistDosform(goodsInfo.getUnit()); + //穿啥不知道 写死的 + fsiOrderDtos.setHilistLv("01"); + fsiOrderDtos.setHilistPric(goodsInfo.getUnitPrice()); + fsiOrderDtos.setHosplistCode(goodsInfo.getSocialCode()); + fsiOrderDtos.setHosplistName(goodsInfo.getName()); + //数量 取diagnosis_medical_goods_list number字段 + fsiOrderDtos.setCnt(BigDecimal.valueOf(goodsInfo.getNumber())); + fsiOrderDtos.setPric(goodsInfo.getUnitPrice()); + fsiOrderDtos.setSumamt(goodsInfo.getUnitPrice().multiply(BigDecimal.valueOf(goodsInfo.getNumber()))); + fsiOrderDtos.setOwnpayAmt(goodsInfo.getUnitPrice().multiply(BigDecimal.valueOf(goodsInfo.getNumber()))); + fsiOrderDtos.setSelfpayAmt(goodsInfo.getUnitPrice().multiply(BigDecimal.valueOf(goodsInfo.getNumber()))); + fsiOrderDtos.setSpec(goodsInfo.getUnit()); + fsiOrderDtos.setSpecUnt(goodsInfo.getUnit()); + fsiOrderDtos.setDrordBegnDate(diagnosis.getCreateTime()); + fsiOrderDtos.setDrordDeptCodg("XY"); + fsiOrderDtos.setDrordDeptName("西医科"); + fsiOrderDtos.setDrordDrCodg(organizationMember.getSocialMemberCode()); + fsiOrderDtos.setDrordDrName(organizationMember.getName()); + // 7.171开单医生职称(drord_dr_profttl) + // 主任医师-231 副主任医师-232 主诊医师-233 医师-234 医士-235 + fsiOrderDtos.setDrordDrProfttl("235"); + //本次处方(医嘱)标记[1=是,0=否] + fsiOrderDtos.setCurrDrordFlag("1"); + fsiOrderDtosList.add(fsiOrderDtos); + } + + + for (ChargeItemListVo itemInfo : itemList) + { + if (!itemInfo.getIsGroup()) { + FsiOrderDtos fsiOrderDtos = new FsiOrderDtos(); + fsiOrderDtos.setRxId(String.valueOf(itemInfo.getId())); + fsiOrderDtos.setRxno(String.valueOf(itemInfo.getId())); + //[1=是,0=否] + fsiOrderDtos.setLongDrordFlag("0"); + //101 西药中成药 104 民族药 + //102 中药饮片 201 医疗服务项目 + //103 自制剂 301 医用耗材 + fsiOrderDtos.setHilistType("201"); + //收费类别 传啥不知道 ----字典表没有 + fsiOrderDtos.setChrgType("02"); + // 传啥不知道 ----字典表没有 + fsiOrderDtos.setDrordBhvr("0"); + fsiOrderDtos.setHilistCode(itemInfo.getItemSocialCode()); + fsiOrderDtos.setHilistName(itemInfo.getItemName()); + fsiOrderDtos.setHilistDosform(itemInfo.getSelectedUnit()); + //穿啥不知道 写死的 + fsiOrderDtos.setHilistLv("01"); + //把itemInfo.getSelectedUnit()转化成BigDecimal价格 + fsiOrderDtos.setHilistPric(itemInfo.getSelectedPrice()); + fsiOrderDtos.setHosplistCode(itemInfo.getItemSocialCode()); + fsiOrderDtos.setHosplistName(itemInfo.getItemName()); + //数量 取diagnosis_medical_goods_list number字段 + fsiOrderDtos.setCnt(BigDecimal.valueOf(itemInfo.getSelectedNum())); + fsiOrderDtos.setPric(itemInfo.getUnitPrice()); + fsiOrderDtos.setSumamt(itemInfo.getUnitPrice().multiply(BigDecimal.valueOf(itemInfo.getSelectedNum()))); + fsiOrderDtos.setOwnpayAmt(itemInfo.getUnitPrice().multiply(BigDecimal.valueOf(itemInfo.getSelectedNum()))); + fsiOrderDtos.setSelfpayAmt(itemInfo.getUnitPrice().multiply(BigDecimal.valueOf(itemInfo.getSelectedNum()))); + fsiOrderDtos.setSpec(itemInfo.getSelectedUnit()); + fsiOrderDtos.setSpecUnt(itemInfo.getSelectedUnit()); + fsiOrderDtos.setDrordBegnDate(diagnosis.getCreateTime()); + fsiOrderDtos.setDrordDeptCodg("XY"); + fsiOrderDtos.setDrordDeptName("西医科"); + fsiOrderDtos.setDrordDrCodg(organizationMember.getSocialMemberCode()); + fsiOrderDtos.setDrordDrName(organizationMember.getName()); + // 7.171开单医生职称(drord_dr_profttl) + // 主任医师-231 副主任医师-232 主诊医师-233 医师-234 医士-235 + fsiOrderDtos.setDrordDrProfttl("235"); + //本次处方(医嘱)标记[1=是,0=否] + fsiOrderDtos.setCurrDrordFlag("1"); + fsiOrderDtosList.add(fsiOrderDtos); + + continue; + } + + QueryWrapper itemGroupListWrapper = new QueryWrapper<>(); + itemGroupListWrapper.eq("item_id",itemInfo.getId()); + itemGroupListWrapper.ne("del_flag",1); + List itemGroupList = itemGroupListMapper.selectList(itemGroupListWrapper); + + for (ItemGroupList itemGroupInfo : itemGroupList){ + FsiOrderDtos fsiOrderDtos = new FsiOrderDtos(); + fsiOrderDtos.setRxId(String.valueOf(itemGroupInfo.getId())); + fsiOrderDtos.setRxno(String.valueOf(itemGroupInfo.getId())); + //[1=是,0=否] + fsiOrderDtos.setLongDrordFlag("0"); + //101 西药中成药 104 民族药 + //102 中药饮片 201 医疗服务项目 + //103 自制剂 301 医用耗材 + fsiOrderDtos.setHilistType("201"); + //收费类别 传啥不知道 ----字典表没有 + fsiOrderDtos.setChrgType("02"); + // 传啥不知道 ----字典表没有 + fsiOrderDtos.setDrordBhvr("0"); + fsiOrderDtos.setHilistCode(itemGroupInfo.getSocialCode()); + fsiOrderDtos.setHilistName(itemGroupInfo.getName()); + fsiOrderDtos.setHilistDosform(itemGroupInfo.getUnit()); + //穿啥不知道 写死的 + fsiOrderDtos.setHilistLv("01"); + //把itemInfo.getSelectedUnit()转化成BigDecimal价格 + fsiOrderDtos.setHilistPric(itemGroupInfo.getUnitPrice()); + fsiOrderDtos.setHosplistCode(itemGroupInfo.getSocialCode()); + fsiOrderDtos.setHosplistName(itemGroupInfo.getName()); + //数量 取diagnosis_medical_goods_list number字段 + //用itemInfo.getSelectedNum() * itemGroupInfo.getNumber() + fsiOrderDtos.setCnt(BigDecimal.valueOf(itemInfo.getSelectedNum() * itemGroupInfo.getNumber())); + fsiOrderDtos.setPric(itemGroupInfo.getUnitPrice()); + + BigDecimal totel = itemGroupInfo.getUnitPrice().multiply(BigDecimal.valueOf(itemInfo.getSelectedNum() * itemGroupInfo.getNumber())); + fsiOrderDtos.setSumamt(totel); + fsiOrderDtos.setOwnpayAmt(totel); + fsiOrderDtos.setSelfpayAmt(totel); + fsiOrderDtos.setSpec(itemGroupInfo.getUnit()); + fsiOrderDtos.setSpecUnt(itemGroupInfo.getUnit()); + fsiOrderDtos.setDrordBegnDate(diagnosis.getCreateTime()); + fsiOrderDtos.setDrordDeptCodg("XY"); + fsiOrderDtos.setDrordDeptName("西医科"); + fsiOrderDtos.setDrordDrCodg(organizationMember.getSocialMemberCode()); + fsiOrderDtos.setDrordDrName(organizationMember.getName()); + // 7.171开单医生职称(drord_dr_profttl) + // 主任医师-231 副主任医师-232 主诊医师-233 医师-234 医士-235 + fsiOrderDtos.setDrordDrProfttl("235"); + //本次处方(医嘱)标记[1=是,0=否] + fsiOrderDtos.setCurrDrordFlag("1"); + fsiOrderDtosList.add(fsiOrderDtos); + } + } + + fsiEncounterDtos.setFsiOrderDtos(fsiOrderDtosList); + + // 计算fsiOrderDtosList中所有元素的sumamt的总和 + BigDecimal sumamt = fsiOrderDtosList.stream().map(FsiOrderDtos::getSumamt).reduce(BigDecimal::add).get(); + + fsiEncounterDtos.setMatnStas("0"); + fsiEncounterDtos.setMedfeeSumamt(sumamt); + fsiEncounterDtos.setOwnpayAmt(sumamt); + fsiEncounterDtos.setSelfpayAmt(sumamt); + fsiEncounterDtos.setAcctPayamt(sumamt); + fsiEncounterDtos.setMaAmt(new BigDecimal("0")); + fsiEncounterDtos.setHifpPayamt(new BigDecimal("0")); + fsiEncounterDtos.setSetlTotlnum(1); + //在 social_user data字段中找 + fsiEncounterDtos.setInsutype(patientRegistration.getInsutype()); + //报销标志 + fsiEncounterDtos.setReimFlag("1"); + fsiEncounterDtos.setOutSetlFlag("0"); + + socialRequest.call3101(im3101); + + } +}