|
@@ -43,14 +43,40 @@ public class SiMzFeeService {
|
|
|
}
|
|
|
|
|
|
public ResultVo<String> outpatientRegistration(MzPatientInfo p) {
|
|
|
- JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.OUTPATIENT_REGISTRATION,
|
|
|
- p.getInsuplcAdmdvs(), p.getStaffId());
|
|
|
Regstrtn regstrtn = mzDao.selectRegstrtn(p.getPatNo(), p.getTimes());
|
|
|
if (null == regstrtn) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "mz_visit_table患者信息为空,请联系医生重开处方。");
|
|
|
}
|
|
|
+
|
|
|
+ ReadCardBizType readCardBizType = ReadCardBizType.get(p.getReadCardBizType());
|
|
|
+ if (readCardBizType != ReadCardBizType.REGISTRATION && !p.getInsuplcAdmdvs().startsWith("43")) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "省外异地的患者请读社保卡登记!");
|
|
|
+ }
|
|
|
+ if (readCardBizType == ReadCardBizType.REGISTRATION) {
|
|
|
+ MdtrtCertType mdtrtCertType = MdtrtCertType.getByLabel(p.getMdtrtCertType());
|
|
|
+ regstrtn.setMdtrtCertType(mdtrtCertType.getCode());
|
|
|
+ if (mdtrtCertType == MdtrtCertType.SOCIAL_SECURITY_CARD) {
|
|
|
+ String[] out = p.getReadCardResult().toString().split("\\|");
|
|
|
+ if (!p.getName().trim().equals(out[4].trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "社保卡姓名与HIS姓名不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ regstrtn.setMdtrtCertNo(out[2]);
|
|
|
+ regstrtn.setCardSn(out[3]);
|
|
|
+ } else if (mdtrtCertType == MdtrtCertType.MEDICAL_INSURANCE_ELECTRONIC_VOUCHER) {
|
|
|
+ JSONObject qrinfo = new JSONObject(FilterUtil.cast(p.getReadCardResult()));
|
|
|
+ if (!p.getName().trim().equals(qrinfo.getString("userName").trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "电子医保凭证姓名与HIS姓名不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ if (!p.getSocialNo().trim().equals(qrinfo.getString("idNo").trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "电子医保凭证身份证与HIS身份证不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ regstrtn.setMdtrtCertNo(qrinfo.getString("ecToken"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.OUTPATIENT_REGISTRATION,
|
|
|
+ p.getInsuplcAdmdvs(), p.getStaffId());
|
|
|
regstrtn.setInsutype(p.getInsutype());
|
|
|
- regstrtn.setMdtrtCertType(MdtrtCertType.RESIDENT_IDENTITY_CARD.getCode());
|
|
|
regstrtn.setPsnType(p.getPsnType());
|
|
|
regstrtn.setIptOtpNo(p.getPatNo());
|
|
|
String ref = JSONObject.toJSONStringWithDateFormat(regstrtn, "yyyy-MM-dd HH:mm:ss");
|
|
@@ -261,10 +287,31 @@ public class SiMzFeeService {
|
|
|
ResultVo<FundDetail> fundDetail1 = getFundDetailResultVo(p);
|
|
|
if (fundDetail1 != null) return fundDetail1;
|
|
|
MzPreSetlmt mzPreSetlmt = mzDao.selectPreSetlmt(p.getPatNo(), p.getTimes());
|
|
|
+ ReadCardBizType readCardBizType = ReadCardBizType.get(p.getReadCardBizType());
|
|
|
+ if (readCardBizType == ReadCardBizType.SETTLEMENT) {
|
|
|
+ MdtrtCertType mdtrtCertType = MdtrtCertType.getByLabel(p.getMdtrtCertType());
|
|
|
+ mzPreSetlmt.setMdtrtCertType(mdtrtCertType.getCode());
|
|
|
+ if (mdtrtCertType == MdtrtCertType.SOCIAL_SECURITY_CARD) {
|
|
|
+ String[] out = p.getReadCardResult().toString().split("\\|");
|
|
|
+ if (!p.getName().trim().equals(out[4].trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "社保卡姓名与HIS姓名不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ mzPreSetlmt.setMdtrtCertNo(out[2]);
|
|
|
+ mzPreSetlmt.setCardSn(out[3]);
|
|
|
+ } else if (mdtrtCertType == MdtrtCertType.MEDICAL_INSURANCE_ELECTRONIC_VOUCHER) {
|
|
|
+ JSONObject qrinfo = JSONObject.parseObject(p.getReadCardResult().toString());
|
|
|
+ if (!p.getName().trim().equals(qrinfo.getString("userName").trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "电子医保凭证姓名与HIS姓名不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ if (!p.getSocialNo().trim().equals(qrinfo.getString("idNo").trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "电子医保凭证身份证与HIS身份证不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ mzPreSetlmt.setMdtrtCertNo(qrinfo.getString("ecToken"));
|
|
|
+ }
|
|
|
+ }
|
|
|
mzPreSetlmt.setMedfeeSumamt(mzPreSetlmt.getMedfeeSumamt().setScale(2, RoundingMode.HALF_UP));
|
|
|
JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.OUTPATIENT_PRE_SETTLEMENT,
|
|
|
mzPreSetlmt.getInsuplcAdmdvs(), p.getStaffId());
|
|
|
- mzPreSetlmt.setMdtrtCertType(MdtrtCertType.RESIDENT_IDENTITY_CARD.getCode());
|
|
|
mzPreSetlmt.setPsnSetlway(PsnSetlWay.SETTLE_BY_ITEMS.getCode());
|
|
|
mzPreSetlmt.setAcctUsedFlag(YesOrNo.NO.getCodeStr());
|
|
|
mzPreSetlmt.setChrgBchno(p.getPatNo() + "_" + p.getTimes());
|
|
@@ -317,7 +364,28 @@ public class SiMzFeeService {
|
|
|
Setlmt setlmt = mzDao.selectSetlmt(p.getPatNo(), p.getTimes());
|
|
|
JSONObject input = exec.makeTradeHeaderWithInsureArea(SiFunction.OUTPATIENT_SETTLEMENT,
|
|
|
setlmt.getInsuplcAdmdvs(), p.getStaffId());
|
|
|
- setlmt.setMdtrtCertType(MdtrtCertType.RESIDENT_IDENTITY_CARD.getCode());
|
|
|
+ ReadCardBizType readCardBizType = ReadCardBizType.get(p.getReadCardBizType());
|
|
|
+ if (readCardBizType == ReadCardBizType.SETTLEMENT) {
|
|
|
+ MdtrtCertType mdtrtCertType = MdtrtCertType.getByLabel(p.getMdtrtCertType());
|
|
|
+ setlmt.setMdtrtCertType(mdtrtCertType.getCode());
|
|
|
+ if (mdtrtCertType == MdtrtCertType.SOCIAL_SECURITY_CARD) {
|
|
|
+ String[] out = p.getReadCardResult().toString().split("\\|");
|
|
|
+ if (!p.getName().trim().equals(out[4].trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "社保卡姓名与HIS姓名不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ setlmt.setMdtrtCertNo(out[2]);
|
|
|
+ setlmt.setCardSn(out[3]);
|
|
|
+ } else if (mdtrtCertType == MdtrtCertType.MEDICAL_INSURANCE_ELECTRONIC_VOUCHER) {
|
|
|
+ JSONObject qrinfo = JSONObject.parseObject(p.getReadCardResult().toString());
|
|
|
+ if (!p.getName().trim().equals(qrinfo.getString("userName").trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "电子医保凭证姓名与HIS姓名不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ if (!p.getSocialNo().trim().equals(qrinfo.getString("idNo").trim())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "电子医保凭证身份证与HIS身份证不一致,请确认是否人证相符。");
|
|
|
+ }
|
|
|
+ setlmt.setMdtrtCertNo(qrinfo.getString("ecToken"));
|
|
|
+ }
|
|
|
+ }
|
|
|
setlmt.setMedfeeSumamt(setlmt.getMedfeeSumamt().setScale(2, RoundingMode.HALF_UP));
|
|
|
setlmt.setPsnSetlway(PsnSetlWay.SETTLE_BY_ITEMS.getCode());
|
|
|
setlmt.setChrgBchno(p.getPatNo() + "_" + p.getTimes());
|
|
@@ -347,7 +415,7 @@ public class SiMzFeeService {
|
|
|
setlEntity.setInsuplcAdmdvs(setlmt.getInsuplcAdmdvs());
|
|
|
setlEntity.setBegntime(mzDao.selectBegntime(p.getPatNo(), p.getTimes()));
|
|
|
setlEntity.setEndtime(setlEntity.getSetlTime());
|
|
|
- setlEntity.setMzSaved(0);
|
|
|
+ setlEntity.setMzSaved(p.getSaved());
|
|
|
setlinfoDao.insert(setlEntity);
|
|
|
setlinfoDao.updateSiZyInfoSetlId(p.getPatNo(), p.getTimes(), 0, setlEntity.getSetlId(),
|
|
|
setlEntity.getMedinsSetlId(), input.getString("msgid"));
|