diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/ApplyOrderFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/ApplyOrderFacade.java index f5cd64d..ba615ad 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/ApplyOrderFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/ApplyOrderFacade.java @@ -7,13 +7,18 @@ import com.lyms.platform.biz.service.*; import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.enums.*; import com.lyms.platform.common.exception.BusinessException; -import com.lyms.platform.common.result.*; +import com.lyms.platform.common.result.BaseListResponse; +import com.lyms.platform.common.result.BaseObjectResponse; +import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.common.utils.*; import com.lyms.platform.operate.web.request.*; import com.lyms.platform.operate.web.result.*; import com.lyms.platform.operate.web.utils.CommonsHelper; import com.lyms.platform.operate.web.utils.FunvCommonUtil; -import com.lyms.platform.permission.model.*; +import com.lyms.platform.permission.model.Organization; +import com.lyms.platform.permission.model.OrganizationQuery; +import com.lyms.platform.permission.model.PatientService; +import com.lyms.platform.permission.model.Users; import com.lyms.platform.permission.service.CouponService; import com.lyms.platform.permission.service.OrganizationService; import com.lyms.platform.permission.service.UsersService; @@ -22,7 +27,8 @@ import com.lyms.platform.query.*; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; -import org.apache.http.HttpResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -31,7 +37,6 @@ import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; @@ -47,6 +52,7 @@ public class ApplyOrderFacade { public static final String HUADA_URL = PropertiesUtils.getPropertyValue("huada_url"); public static final String SYSCODE = PropertiesUtils.getPropertyValue("huada_syscode"); public static final String SECRET = PropertiesUtils.getPropertyValue("huada_secret"); + public static final String HIS_VERSION = PropertiesUtils.getPropertyValue("his_version"); @Autowired private ApplyOrderService applyOrderService; @@ -86,6 +92,11 @@ public class ApplyOrderFacade { @Autowired private MongoTemplate mongoTemplate; + @Autowired + private SieveFacade sieveFacade; + + Logger logger = LoggerFactory.getLogger(ApplyOrderFacade.class); + //添加回执单 public BaseResponse addReferralReceipt(ReferralReceiptRequest referralReceipt) { ReferralApplyOrderModel referralApplyOrderModel = new ReferralApplyOrderModel(); @@ -389,7 +400,7 @@ public class ApplyOrderFacade { if (CollectionUtils.isNotEmpty(sieveModels)) { SieveModel sieveModel = sieveModels.get(0); mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is(sieveModel.getId())), Update.update("sieveType", sieveApplyOrderModel.getSieveType()). - set("costType",sieveApplyOrderModel.getCostType()), SieveModel.class); + set("costType", sieveApplyOrderModel.getCostType()), SieveModel.class); if (sieveModel.getSieveHospitalId() != null && !sieveModel.getSieveHospitalId().equals(sieveApplyOrderAddRequest.getSieveHospitalId())) { sieveModel.setSieveHospitalId(sieveApplyOrderAddRequest.getSieveHospitalId()); sieveService.updateOneChanQianDiaSieve(sieveModel); @@ -503,16 +514,140 @@ public class ApplyOrderFacade { int days = DateUtil.daysBetween(sieveModel.getLastMenses(), sieveModel.getApplyDate()); sieveModel.setDueWeek(days); SieveService.handOrder(sieveModel); + sieveModel.setSieveType(sieveApplyOrderModel.getSieveType()); + sieveModel.setCostType(sieveApplyOrderModel.getCostType()); sieveService.updateOneChanQianDiaSieve(sieveModel); operateLogFacade.addModifyOptLog(userId, Integer.parseInt(hospitalId), sieveModels.get(0), sieveModel, OptActionEnums.UPDATE.getId(), "增加产前筛查"); } + // 调用华大接口 + System.out.println("debug=========>开始调用华大接口"); + callHuaDa(sieveApplyOrderModel, hospitalId); + System.out.println("debug=========>结束调用华大接口"); } else { return new BaseResponse().setErrorcode(ErrorCodeConstants.DATA_EXIST).setErrormsg("已申请过产筛"); } + + + return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); } /** + * 调用华大接口 + * + * @param sieveApplyOrderModel + * @param hospitalId + */ + private void callHuaDa(SieveApplyOrderModel sieveApplyOrderModel, String hospitalId) { + try{ + String sieveType = sieveApplyOrderModel.getSieveType(); + //if ("4".equals(HIS_VERSION)) { + if (StringUtils.isNotEmpty(sieveType) && "2".equals(sieveType)) { + final String productCode = "DX1331"; + HuadaSieveApplyOrderAddRequest request = new HuadaSieveApplyOrderAddRequest(); + // 产品编号 + request.setProductCode(productCode); + // 客户编号 + Organization organization = organizationService.getOrganization(Integer.parseInt(hospitalId)); + String shortCode = organization.getShortCode(); + request.setCustomerCode(shortCode); + // 孕妇姓名 + Patients patients = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(sieveApplyOrderModel.getParentId())), Patients.class); + String username = patients.getUsername(); + request.setSampleName(username); + // 样品编号(如果是正常双胎的情况:样本编号后要加+D;如果是减胎的情况:样本编号后要加+V;如果是重抽血的情况:样本编号后要加+R;) + request.setSampleNum(sieveApplyOrderModel.getNumber()); + // 采样日期 + request.setBloodDate(DateUtil.getYmd(sieveApplyOrderModel.getCollectionDate())); + // 送检单唯一标识 + request.setExtBaseInfoId(sieveApplyOrderModel.getId()); + // 样品管类型 STRECK:STRECK + // EDTA:EDTA + // K牌采血管:K牌采血管 + // G牌采血管:G牌采血管 + String d = "1".equals(sieveApplyOrderModel.getFetusNum()) || "4".equals(sieveApplyOrderModel.getFetusNum()) ? "D" :""; + request.setTubeType(sieveApplyOrderModel.getYpglx() + d); + // 孕周(格式:18w+1)注:“w”必须小写,“+”号后面的天数必须是0~6 + request.setGestationalWeeks(sieveApplyOrderModel.getYunSize()); + // 证件类型(01:身份证、02:护照) + request.setZidcardType("01"); + // 孕妇联系电话 + request.setMotherPhoneNum(patients.getPhone()); + // 收费类型(样本用途)(工作量,只有收费、免费) + // + //{ + //1:科研收费 + // 2:科研免费 + // 3:临床收费 + // 4:临床免费 + // 咱们页面可以支持医生填写免费和收费,并且能统计。最终给华大传数据,所有用户默认成【临床收费】 + // + // 后台固定传参:3 + request.setChargeType("3"); + // 孕妇年龄 + request.setAge(DateUtil.getAge(patients.getBirth()).toString()); + // 末次月经,就诊末次月经 + request.setLmp(DateUtil.getYmd(patients.getLastMenses())); + // 是否是否体外受精-胚胎移植(IVF) + // { + // 0:是否IVF-否 + // 1:是否IVF-是 + request.setAdosculation(sieveApplyOrderModel.getIvf()); + // 既往史: 一年内异体输血 + // { + // 0:既往史: 一年内异体输血-无 + // 1:既往史: 一年内异体输血-有(不接受) + // } + request.setAllogeneticTransfusion(sieveApplyOrderModel.getYtsx()); + // 四周内异体细胞免疫 + // { + // 0:四周内异体细胞免疫-无 + // 1:四周内异体细胞免疫-有(不接受) + // } + request.setCellularImmunity(sieveApplyOrderModel.getYtxbzl()); + // 干细胞治疗 + // { + // 0:干细胞治疗-无 + // 1:干细胞治疗-有(不接受) + // } + request.setStemCell(sieveApplyOrderModel.getGxbzl()); + // 样本类型 + // + // { + //S051:样本类型-全血 + // } + request.setSampleType("S051"); + // 辅助检查(B超结果),页面传入什么输入 + // { + // 0:辅助检查(重要)-正常(单胎活) + // 1:辅助检查(重要)-正常(双胎活) + // 2:辅助检查(重要)-正常(多胎活) + // 3:辅助检查(重要)-异常(单胎) + // 4:辅助检查(重要)-异常(双胎) + // 5:辅助检查(重要)-异常(多胎) + // 6:辅助检查(重要)-减胎 + // } + request.setBtypeUltrasonic(sieveApplyOrderModel.getFetusNum()); + // 其他辅助筛查,页面传入什么输入 + // { + // 0:筛查模式-未做 + // 1:筛查模式-nt筛查 + // 2:筛查模式-早孕期筛查 + // 3:筛查模式-中孕期筛查 + // 4:筛查模式-早中孕期联合筛查 + // } + request.setScreeningModel(sieveApplyOrderModel.getSieveModel()); + request.setIdCard(patients.getCardNo()); + huadaSaveSampleInfo(request); + } + // } + }catch (Exception e){ + e.printStackTrace(); + logger.error("调用华大接口失败", e); + } + } + + /** * 查询转诊申请 * * @param id @@ -1485,7 +1620,41 @@ public class ApplyOrderFacade { HuadaCallbackModel huadaCallbackModel = JSONObject.parseObject(rows.toString(), HuadaCallbackModel.class); System.out.println(huadaCallbackModel.toString()); + String cardId = huadaCallbackModel.getCardId(); + Patients patients = mongoTemplate.findOne(Query.query(Criteria.where("cardNo").is(cardId)), Patients.class); + if (patients != null) { + String patientsId = patients.getId(); + SieveResultModel sieveResultModel = mongoTemplate.findOne(Query.query(Criteria.where("parentId").is(patientsId)), SieveResultModel.class); + SieveResultModel model = getSieveResultModel(huadaCallbackModel, patientsId); + if (sieveResultModel != null) { + Update update = new Update(); + Map object = BeanUtils.objectToObjectMap(model); + Set> entries = object.entrySet(); + for (Map.Entry entry : entries) { + Object entryValue = entry.getValue(); + if (entryValue != null) { + if (entryValue instanceof String) { + if (StringUtils.isEmpty(entryValue.toString())) { + continue; + } + } + update.set(entry.getKey(), entry.getValue()); + } + } + mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is(sieveResultModel.getId())), update, SieveResultModel.class); + logger.info(String.format("更新产筛结果: { %s }", update.toString())); + } else { + mongoTemplate.insert(model); + logger.info(String.format("新增产筛结果: { %s }", model.toString())); + } + // 后续业务操作 + SieveAddRequest sieveAddRequest = new SieveAddRequest(); + sieveAddRequest.setParentId(patientsId); + Integer userId = null; + sieveFacade.addOrUpdateSieveModel(sieveAddRequest, userId, model); + + } } catch (Exception e) { e.printStackTrace(); map.put("code", "500"); @@ -1497,6 +1666,61 @@ public class ApplyOrderFacade { return map; } + /** + * 组装 SieveResultModel + * + * @param huadaCallbackModel + * @param patientsId + * @return + */ + private SieveResultModel getSieveResultModel(final HuadaCallbackModel huadaCallbackModel, String patientsId) { + SieveResultModel newModel = new SieveResultModel(); + newModel.setResultTime(new Date()); + newModel.setReportType("1"); + newModel.setParentId(patientsId); + newModel.setSampleInfoId(huadaCallbackModel.getSampleInfoId()); + newModel.setSampleReportId(huadaCallbackModel.getSampleReportId()); + // 底风险0 高风险2 + newModel.setSbst(huadaCallbackModel.getT18().contains("未检出") ? "0" : "2"); + newModel.setStzhz13(huadaCallbackModel.getT13().contains("未检出") ? "0" : "2"); + newModel.setTszhz(huadaCallbackModel.getT21().contains("未检出") ? "0" : "2"); + + final String[] split18 = huadaCallbackModel.getT18Risk().split("/"); + final String[] split13 = huadaCallbackModel.getT13Risk().split("/"); + final String[] split21 = huadaCallbackModel.getT21Risk().split("/"); + /*Map map18 = Maps.newHashMap(); + map18.put("valueOne", split18[0]); + map18.put("valueTwo", split18[1]); + map18.put("valueKey", huadaCallbackModel.getZ18ZScore()); + Map map13 = Maps.newHashMap(); + map13.put("valueOne", split13[0]); + map13.put("valueTwo", split13[1]); + map13.put("valueKey", huadaCallbackModel.getZ13ZScore()); + Map map21 = Maps.newHashMap(); + map21.put("valueOne", split21[0]); + map21.put("valueTwo", split21[1]); + map21.put("valueKey", huadaCallbackModel.getZ21ZScore());*/ + newModel.setSbstValue(new HashMap(){{ + put("valueOne", split18[0]);put("valueTwo", split18[1]);put("valueKey", huadaCallbackModel.getZ18ZScore()); }}); + newModel.setStzhz13Value(new HashMap(){{ + put("valueOne", split13[0]);put("valueTwo", split13[1]);put("valueKey", huadaCallbackModel.getZ13ZScore()); }}); + newModel.setTszhzValue(new HashMap(){{ + put("valueOne", split21[0]);put("valueTwo", split21[1]);put("valueKey", huadaCallbackModel.getZ21ZScore()); }}); + + String reportTypeStr = huadaGetReportType(newModel.getSampleReportId()); + String reportType = "1"; + if ("正式报告".equals(reportTypeStr)) { + reportType = "1"; + } else if ("重取报告".equals(reportTypeStr)) { + reportType = "2"; + } else if ("失败报告".equals(reportTypeStr)) { + reportType = "3"; + } + newModel.setReportType(reportType); + + return newModel; + } + public void huadaFtp(String sampleReportId,HttpServletResponse response) { try { diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SieveFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SieveFacade.java index 73b39aa..285f389 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SieveFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SieveFacade.java @@ -126,6 +126,22 @@ public class SieveFacade { } + addOrUpdateSieveModel(sieveAddRequest, userId, sieveResultModel); + + + return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); + } + + /** + * add or update SieveModel + * and addTrackDownInfo() + * + * + * @param sieveAddRequest + * @param userId + * @param sieveResultModel + */ + public void addOrUpdateSieveModel(SieveAddRequest sieveAddRequest, Integer userId, SieveResultModel sieveResultModel) { SieveQuery sieveQuery = new SieveQuery(); sieveQuery.setParentId(sieveAddRequest.getParentId()); sieveQuery.setYn(YnEnums.YES.getId()); @@ -157,9 +173,6 @@ public class SieveFacade { //添加追访记录 addTrackDownInfo(userId, patients); } - - - return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); } @@ -233,7 +246,11 @@ public class SieveFacade { trackDownRecord.setTrackType(TrackDownDateEnums.E.getId()); } } - trackDownService.addOrupdateTrackDownRecord(userId, trackDownRecord); + + // 兼容华大接口调用 + if (userId != null) { + trackDownService.addOrupdateTrackDownRecord(userId, trackDownRecord); + } } }