Commit fbf11d3ae61008c004b76aa0087e93ef4d3eb9f4

Authored by dongqin
1 parent 2047b6c517

修复异常

Showing 2 changed files with 250 additions and 9 deletions

platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/ApplyOrderFacade.java View file @ fbf11d3
... ... @@ -7,13 +7,18 @@
7 7 import com.lyms.platform.common.constants.ErrorCodeConstants;
8 8 import com.lyms.platform.common.enums.*;
9 9 import com.lyms.platform.common.exception.BusinessException;
10   -import com.lyms.platform.common.result.*;
  10 +import com.lyms.platform.common.result.BaseListResponse;
  11 +import com.lyms.platform.common.result.BaseObjectResponse;
  12 +import com.lyms.platform.common.result.BaseResponse;
11 13 import com.lyms.platform.common.utils.*;
12 14 import com.lyms.platform.operate.web.request.*;
13 15 import com.lyms.platform.operate.web.result.*;
14 16 import com.lyms.platform.operate.web.utils.CommonsHelper;
15 17 import com.lyms.platform.operate.web.utils.FunvCommonUtil;
16   -import com.lyms.platform.permission.model.*;
  18 +import com.lyms.platform.permission.model.Organization;
  19 +import com.lyms.platform.permission.model.OrganizationQuery;
  20 +import com.lyms.platform.permission.model.PatientService;
  21 +import com.lyms.platform.permission.model.Users;
17 22 import com.lyms.platform.permission.service.CouponService;
18 23 import com.lyms.platform.permission.service.OrganizationService;
19 24 import com.lyms.platform.permission.service.UsersService;
... ... @@ -22,7 +27,8 @@
22 27 import org.apache.commons.collections.CollectionUtils;
23 28 import org.apache.commons.lang.StringUtils;
24 29 import org.apache.commons.lang.math.NumberUtils;
25   -import org.apache.http.HttpResponse;
  30 +import org.slf4j.Logger;
  31 +import org.slf4j.LoggerFactory;
26 32 import org.springframework.beans.factory.annotation.Autowired;
27 33 import org.springframework.data.mongodb.core.MongoTemplate;
28 34 import org.springframework.data.mongodb.core.query.Criteria;
... ... @@ -31,7 +37,6 @@
31 37 import org.springframework.stereotype.Component;
32 38  
33 39 import javax.servlet.ServletOutputStream;
34   -import javax.servlet.http.HttpServletRequest;
35 40 import javax.servlet.http.HttpServletResponse;
36 41 import java.io.*;
37 42 import java.text.SimpleDateFormat;
... ... @@ -47,6 +52,7 @@
47 52 public static final String HUADA_URL = PropertiesUtils.getPropertyValue("huada_url");
48 53 public static final String SYSCODE = PropertiesUtils.getPropertyValue("huada_syscode");
49 54 public static final String SECRET = PropertiesUtils.getPropertyValue("huada_secret");
  55 + public static final String HIS_VERSION = PropertiesUtils.getPropertyValue("his_version");
50 56  
51 57 @Autowired
52 58 private ApplyOrderService applyOrderService;
... ... @@ -86,6 +92,11 @@
86 92 @Autowired
87 93 private MongoTemplate mongoTemplate;
88 94  
  95 + @Autowired
  96 + private SieveFacade sieveFacade;
  97 +
  98 + Logger logger = LoggerFactory.getLogger(ApplyOrderFacade.class);
  99 +
89 100 //添加回执单
90 101 public BaseResponse addReferralReceipt(ReferralReceiptRequest referralReceipt) {
91 102 ReferralApplyOrderModel referralApplyOrderModel = new ReferralApplyOrderModel();
... ... @@ -389,7 +400,7 @@
389 400 if (CollectionUtils.isNotEmpty(sieveModels)) {
390 401 SieveModel sieveModel = sieveModels.get(0);
391 402 mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is(sieveModel.getId())), Update.update("sieveType", sieveApplyOrderModel.getSieveType()).
392   - set("costType",sieveApplyOrderModel.getCostType()), SieveModel.class);
  403 + set("costType", sieveApplyOrderModel.getCostType()), SieveModel.class);
393 404 if (sieveModel.getSieveHospitalId() != null && !sieveModel.getSieveHospitalId().equals(sieveApplyOrderAddRequest.getSieveHospitalId())) {
394 405 sieveModel.setSieveHospitalId(sieveApplyOrderAddRequest.getSieveHospitalId());
395 406 sieveService.updateOneChanQianDiaSieve(sieveModel);
396 407  
397 408  
398 409  
... ... @@ -503,16 +514,140 @@
503 514 int days = DateUtil.daysBetween(sieveModel.getLastMenses(), sieveModel.getApplyDate());
504 515 sieveModel.setDueWeek(days);
505 516 SieveService.handOrder(sieveModel);
  517 + sieveModel.setSieveType(sieveApplyOrderModel.getSieveType());
  518 + sieveModel.setCostType(sieveApplyOrderModel.getCostType());
506 519 sieveService.updateOneChanQianDiaSieve(sieveModel);
507 520 operateLogFacade.addModifyOptLog(userId, Integer.parseInt(hospitalId), sieveModels.get(0), sieveModel, OptActionEnums.UPDATE.getId(), "增加产前筛查");
508 521 }
  522 + // 调用华大接口
  523 + System.out.println("debug=========>开始调用华大接口");
  524 + callHuaDa(sieveApplyOrderModel, hospitalId);
  525 + System.out.println("debug=========>结束调用华大接口");
509 526 } else {
510 527 return new BaseResponse().setErrorcode(ErrorCodeConstants.DATA_EXIST).setErrormsg("已申请过产筛");
511 528 }
  529 +
  530 +
  531 +
512 532 return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功");
513 533 }
514 534  
515 535 /**
  536 + * 调用华大接口
  537 + *
  538 + * @param sieveApplyOrderModel
  539 + * @param hospitalId
  540 + */
  541 + private void callHuaDa(SieveApplyOrderModel sieveApplyOrderModel, String hospitalId) {
  542 + try{
  543 + String sieveType = sieveApplyOrderModel.getSieveType();
  544 + //if ("4".equals(HIS_VERSION)) {
  545 + if (StringUtils.isNotEmpty(sieveType) && "2".equals(sieveType)) {
  546 + final String productCode = "DX1331";
  547 + HuadaSieveApplyOrderAddRequest request = new HuadaSieveApplyOrderAddRequest();
  548 + // 产品编号
  549 + request.setProductCode(productCode);
  550 + // 客户编号
  551 + Organization organization = organizationService.getOrganization(Integer.parseInt(hospitalId));
  552 + String shortCode = organization.getShortCode();
  553 + request.setCustomerCode(shortCode);
  554 + // 孕妇姓名
  555 + Patients patients = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(sieveApplyOrderModel.getParentId())), Patients.class);
  556 + String username = patients.getUsername();
  557 + request.setSampleName(username);
  558 + // 样品编号(如果是正常双胎的情况:样本编号后要加+D;如果是减胎的情况:样本编号后要加+V;如果是重抽血的情况:样本编号后要加+R;)
  559 + request.setSampleNum(sieveApplyOrderModel.getNumber());
  560 + // 采样日期
  561 + request.setBloodDate(DateUtil.getYmd(sieveApplyOrderModel.getCollectionDate()));
  562 + // 送检单唯一标识
  563 + request.setExtBaseInfoId(sieveApplyOrderModel.getId());
  564 + // 样品管类型 STRECK:STRECK
  565 + // EDTA:EDTA
  566 + // K牌采血管:K牌采血管
  567 + // G牌采血管:G牌采血管
  568 + String d = "1".equals(sieveApplyOrderModel.getFetusNum()) || "4".equals(sieveApplyOrderModel.getFetusNum()) ? "D" :"";
  569 + request.setTubeType(sieveApplyOrderModel.getYpglx() + d);
  570 + // 孕周(格式:18w+1)注:“w”必须小写,“+”号后面的天数必须是0~6
  571 + request.setGestationalWeeks(sieveApplyOrderModel.getYunSize());
  572 + // 证件类型(01:身份证、02:护照)
  573 + request.setZidcardType("01");
  574 + // 孕妇联系电话
  575 + request.setMotherPhoneNum(patients.getPhone());
  576 + // 收费类型(样本用途)(工作量,只有收费、免费)
  577 + //
  578 + //{
  579 + //1:科研收费
  580 + // 2:科研免费
  581 + // 3:临床收费
  582 + // 4:临床免费
  583 + // 咱们页面可以支持医生填写免费和收费,并且能统计。最终给华大传数据,所有用户默认成【临床收费】
  584 + //
  585 + // 后台固定传参:3
  586 + request.setChargeType("3");
  587 + // 孕妇年龄
  588 + request.setAge(DateUtil.getAge(patients.getBirth()).toString());
  589 + // 末次月经,就诊末次月经
  590 + request.setLmp(DateUtil.getYmd(patients.getLastMenses()));
  591 + // 是否是否体外受精-胚胎移植(IVF)
  592 + // {
  593 + // 0:是否IVF-否
  594 + // 1:是否IVF-是
  595 + request.setAdosculation(sieveApplyOrderModel.getIvf());
  596 + // 既往史: 一年内异体输血
  597 + // {
  598 + // 0:既往史: 一年内异体输血-无
  599 + // 1:既往史: 一年内异体输血-有(不接受)
  600 + // }
  601 + request.setAllogeneticTransfusion(sieveApplyOrderModel.getYtsx());
  602 + // 四周内异体细胞免疫
  603 + // {
  604 + // 0:四周内异体细胞免疫-无
  605 + // 1:四周内异体细胞免疫-有(不接受)
  606 + // }
  607 + request.setCellularImmunity(sieveApplyOrderModel.getYtxbzl());
  608 + // 干细胞治疗
  609 + // {
  610 + // 0:干细胞治疗-无
  611 + // 1:干细胞治疗-有(不接受)
  612 + // }
  613 + request.setStemCell(sieveApplyOrderModel.getGxbzl());
  614 + // 样本类型
  615 + //
  616 + // {
  617 + //S051:样本类型-全血
  618 + // }
  619 + request.setSampleType("S051");
  620 + // 辅助检查(B超结果),页面传入什么输入
  621 + // {
  622 + // 0:辅助检查(重要)-正常(单胎活)
  623 + // 1:辅助检查(重要)-正常(双胎活)
  624 + // 2:辅助检查(重要)-正常(多胎活)
  625 + // 3:辅助检查(重要)-异常(单胎)
  626 + // 4:辅助检查(重要)-异常(双胎)
  627 + // 5:辅助检查(重要)-异常(多胎)
  628 + // 6:辅助检查(重要)-减胎
  629 + // }
  630 + request.setBtypeUltrasonic(sieveApplyOrderModel.getFetusNum());
  631 + // 其他辅助筛查,页面传入什么输入
  632 + // {
  633 + // 0:筛查模式-未做
  634 + // 1:筛查模式-nt筛查
  635 + // 2:筛查模式-早孕期筛查
  636 + // 3:筛查模式-中孕期筛查
  637 + // 4:筛查模式-早中孕期联合筛查
  638 + // }
  639 + request.setScreeningModel(sieveApplyOrderModel.getSieveModel());
  640 + request.setIdCard(patients.getCardNo());
  641 + huadaSaveSampleInfo(request);
  642 + }
  643 + // }
  644 + }catch (Exception e){
  645 + e.printStackTrace();
  646 + logger.error("调用华大接口失败", e);
  647 + }
  648 + }
  649 +
  650 + /**
516 651 * 查询转诊申请
517 652 *
518 653 * @param id
519 654  
... ... @@ -1485,7 +1620,41 @@
1485 1620 HuadaCallbackModel huadaCallbackModel = JSONObject.parseObject(rows.toString(), HuadaCallbackModel.class);
1486 1621 System.out.println(huadaCallbackModel.toString());
1487 1622  
  1623 + String cardId = huadaCallbackModel.getCardId();
  1624 + Patients patients = mongoTemplate.findOne(Query.query(Criteria.where("cardNo").is(cardId)), Patients.class);
  1625 + if (patients != null) {
  1626 + String patientsId = patients.getId();
  1627 + SieveResultModel sieveResultModel = mongoTemplate.findOne(Query.query(Criteria.where("parentId").is(patientsId)), SieveResultModel.class);
  1628 + SieveResultModel model = getSieveResultModel(huadaCallbackModel, patientsId);
  1629 + if (sieveResultModel != null) {
  1630 + Update update = new Update();
  1631 + Map<String, Object> object = BeanUtils.objectToObjectMap(model);
  1632 + Set<Map.Entry<String, Object>> entries = object.entrySet();
  1633 + for (Map.Entry<String, Object> entry : entries) {
  1634 + Object entryValue = entry.getValue();
  1635 + if (entryValue != null) {
  1636 + if (entryValue instanceof String) {
  1637 + if (StringUtils.isEmpty(entryValue.toString())) {
  1638 + continue;
  1639 + }
  1640 + }
  1641 + update.set(entry.getKey(), entry.getValue());
  1642 + }
  1643 + }
  1644 + mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is(sieveResultModel.getId())), update, SieveResultModel.class);
  1645 + logger.info(String.format("更新产筛结果: { %s }", update.toString()));
  1646 + } else {
  1647 + mongoTemplate.insert(model);
  1648 + logger.info(String.format("新增产筛结果: { %s }", model.toString()));
  1649 + }
1488 1650  
  1651 + // 后续业务操作
  1652 + SieveAddRequest sieveAddRequest = new SieveAddRequest();
  1653 + sieveAddRequest.setParentId(patientsId);
  1654 + Integer userId = null;
  1655 + sieveFacade.addOrUpdateSieveModel(sieveAddRequest, userId, model);
  1656 +
  1657 + }
1489 1658 } catch (Exception e) {
1490 1659 e.printStackTrace();
1491 1660 map.put("code", "500");
... ... @@ -1495,6 +1664,61 @@
1495 1664 map.put("code", "200");
1496 1665 map.put("msg", "success");
1497 1666 return map;
  1667 + }
  1668 +
  1669 + /**
  1670 + * 组装 SieveResultModel
  1671 + *
  1672 + * @param huadaCallbackModel
  1673 + * @param patientsId
  1674 + * @return
  1675 + */
  1676 + private SieveResultModel getSieveResultModel(final HuadaCallbackModel huadaCallbackModel, String patientsId) {
  1677 + SieveResultModel newModel = new SieveResultModel();
  1678 + newModel.setResultTime(new Date());
  1679 + newModel.setReportType("1");
  1680 + newModel.setParentId(patientsId);
  1681 + newModel.setSampleInfoId(huadaCallbackModel.getSampleInfoId());
  1682 + newModel.setSampleReportId(huadaCallbackModel.getSampleReportId());
  1683 + // 底风险0 高风险2
  1684 + newModel.setSbst(huadaCallbackModel.getT18().contains("未检出") ? "0" : "2");
  1685 + newModel.setStzhz13(huadaCallbackModel.getT13().contains("未检出") ? "0" : "2");
  1686 + newModel.setTszhz(huadaCallbackModel.getT21().contains("未检出") ? "0" : "2");
  1687 +
  1688 + final String[] split18 = huadaCallbackModel.getT18Risk().split("/");
  1689 + final String[] split13 = huadaCallbackModel.getT13Risk().split("/");
  1690 + final String[] split21 = huadaCallbackModel.getT21Risk().split("/");
  1691 + /*Map<String, String> map18 = Maps.newHashMap();
  1692 + map18.put("valueOne", split18[0]);
  1693 + map18.put("valueTwo", split18[1]);
  1694 + map18.put("valueKey", huadaCallbackModel.getZ18ZScore());
  1695 + Map<String, String> map13 = Maps.newHashMap();
  1696 + map13.put("valueOne", split13[0]);
  1697 + map13.put("valueTwo", split13[1]);
  1698 + map13.put("valueKey", huadaCallbackModel.getZ13ZScore());
  1699 + Map<String, String> map21 = Maps.newHashMap();
  1700 + map21.put("valueOne", split21[0]);
  1701 + map21.put("valueTwo", split21[1]);
  1702 + map21.put("valueKey", huadaCallbackModel.getZ21ZScore());*/
  1703 + newModel.setSbstValue(new HashMap<String, String>(){{
  1704 + put("valueOne", split18[0]);put("valueTwo", split18[1]);put("valueKey", huadaCallbackModel.getZ18ZScore()); }});
  1705 + newModel.setStzhz13Value(new HashMap<String, String>(){{
  1706 + put("valueOne", split13[0]);put("valueTwo", split13[1]);put("valueKey", huadaCallbackModel.getZ13ZScore()); }});
  1707 + newModel.setTszhzValue(new HashMap<String, String>(){{
  1708 + put("valueOne", split21[0]);put("valueTwo", split21[1]);put("valueKey", huadaCallbackModel.getZ21ZScore()); }});
  1709 +
  1710 + String reportTypeStr = huadaGetReportType(newModel.getSampleReportId());
  1711 + String reportType = "1";
  1712 + if ("正式报告".equals(reportTypeStr)) {
  1713 + reportType = "1";
  1714 + } else if ("重取报告".equals(reportTypeStr)) {
  1715 + reportType = "2";
  1716 + } else if ("失败报告".equals(reportTypeStr)) {
  1717 + reportType = "3";
  1718 + }
  1719 + newModel.setReportType(reportType);
  1720 +
  1721 + return newModel;
1498 1722 }
1499 1723  
1500 1724 public void huadaFtp(String sampleReportId,HttpServletResponse response) {
platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/SieveFacade.java View file @ fbf11d3
... ... @@ -126,6 +126,22 @@
126 126 }
127 127  
128 128  
  129 + addOrUpdateSieveModel(sieveAddRequest, userId, sieveResultModel);
  130 +
  131 +
  132 + return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功");
  133 + }
  134 +
  135 + /**
  136 + * add or update SieveModel
  137 + * and addTrackDownInfo()
  138 + *
  139 + *
  140 + * @param sieveAddRequest
  141 + * @param userId
  142 + * @param sieveResultModel
  143 + */
  144 + public void addOrUpdateSieveModel(SieveAddRequest sieveAddRequest, Integer userId, SieveResultModel sieveResultModel) {
129 145 SieveQuery sieveQuery = new SieveQuery();
130 146 sieveQuery.setParentId(sieveAddRequest.getParentId());
131 147 sieveQuery.setYn(YnEnums.YES.getId());
... ... @@ -157,9 +173,6 @@
157 173 //添加追访记录
158 174 addTrackDownInfo(userId, patients);
159 175 }
160   -
161   -
162   - return new BaseResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功");
163 176 }
164 177  
165 178  
... ... @@ -233,7 +246,11 @@
233 246 trackDownRecord.setTrackType(TrackDownDateEnums.E.getId());
234 247 }
235 248 }
236   - trackDownService.addOrupdateTrackDownRecord(userId, trackDownRecord);
  249 +
  250 + // 兼容华大接口调用
  251 + if (userId != null) {
  252 + trackDownService.addOrupdateTrackDownRecord(userId, trackDownRecord);
  253 + }
237 254 }
238 255 }
239 256