This commit is contained in:
佟明轩 2025-05-23 16:59:41 +08:00
parent 33a0ccff84
commit 7c281fda32
2 changed files with 443 additions and 0 deletions

View File

@ -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<DiagnosisMedi
" FROM diagnosis_medical_item_list AS dmil LEFT JOIN item ON dmil.item_id = item.id" +
" WHERE dmil.diagnosis_code = #{code} ")
List<ChargeItemListVo> 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<ChargeItemListVo> selectDetailByCodeNotDelete(String code);
}

View File

@ -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<Diagnosis> 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<SocialUser> 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<DiagnosisMedicalRecord> 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<SocialDiagnose> diagnoseList = JSONArray.parseArray(record.getDiagnosisDetail(),SocialDiagnose.class);
fsiEncounterDtos.setDscgMainDiseCodg(diagnoseList.get(0).getCode());
fsiEncounterDtos.setDscgMainDiseName(diagnoseList.get(0).getName());
patientDtos.setFsiEncounterDtos(fsiEncounterDtos);
//诊断信息DTO
List<FsiDiagnoseDtos> 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<FsiOrderDtos> fsiOrderDtosList= new ArrayList<>();
//获取病例商品信息 病例服务信息
List<DiagnosisMedicalGoodsList> goodsList = diagnosisMedicalGoodsListMapper.listByDiagnosisCode(diagnosis.getCode());
List<ChargeItemListVo> 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<ItemGroupList> itemGroupListWrapper = new QueryWrapper<>();
itemGroupListWrapper.eq("item_id",itemInfo.getId());
itemGroupListWrapper.ne("del_flag",1);
List<ItemGroupList> 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);
}
}