public override bool LoadMedSrv(EmsCreatedParameter emsCreatedParameter, int pos) //EmsCreateParameter { base.LoadMedSrv(emsCreatedParameter, pos); MedSrvDO med = emsCreatedParameter.getMedSrvDO(); Dictionary <String, Object> ctmInfo = new Dictionary <string, object>(); ctmInfo.Add("CustomInfo", emsCreatedParameter.GetParameter() == null ? null : emsCreatedParameter.GetParameter().ToString()); EmsRstDTO[] rsts = CreateRemote(med.Id_srv, null, ctmInfo); EmsRstDTO rst = rsts[0]; if (rst != null) { uiEmsDTO.Emsdrugs.deSerializeJson((rst.Document[0] as EmsDrugItemDO).serializeJson()); //String utf8Str = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(rst.DocumentString)); //uiEmsDTO.Emsdrugs.deSerializeJson(utf8Str); if (rst.Extension != null && rst.Extension.Keys.Contains("MedSrvDO")) { this.uiEmsDTO.MedSrvDO = rst.Extension["MedSrvDO"] as MedSrvDO; strSd_srvtp = this.uiEmsDTO.MedSrvDO.Sd_srvtp; } if (null != rst.Extension && rst.Extension.Keys.Contains("MpDepFilter")) { this.strMpDepFilter = (String)rst.Extension["MpDepFilter"]; } if (null != uiEmsDTO.Emsdrugs.EmsOrDrugListEx) { uiEmsDTO.Emsdrugs.EmsOrDrugList.Clear(); uiEmsDTO.Emsdrugs.EmsOrDrugListEx.Cast <EmsOrDrug>().ToList().ForEach(item => { uiEmsDTO.Emsdrugs.EmsOrDrugList.Add(item); }); } } return(true); }
/// <summary> /// 创建医疗服务单 /// </summary> /// <param name="medSrvDO"></param> private bool HandleCreateEms(EmsCreatedParameter emsCreateParameter, object param = null) { #region 1.有效性验证 // 针对 Banner 的 有效性判断,该结构中含有患者就诊信息结构 if (this.ent4BannerDTO == null || emsCreateParameter == null || emsCreateParameter.getMedSrvDO() == null) { return(false); } var medSrvDO = emsCreateParameter.getMedSrvDO(); #endregion #region 2.获取指定类型的医疗单UI对象 var t0 = new AssCostTimeTool(String.Format("创建医疗单时候({0}),总耗时:", medSrvDO.Name), false); var t1 = new AssCostTimeTool("创建医疗单时候,实例化UI模型耗时:", false); var ins = EmsDriverFactory.EmsDriverShare().DriverWith(medSrvDO.Id_srv, medSrvDO.Sd_srvtp, this, this.ent4BannerDTO); if (ins == null) { return(false); } var emsView = ins.GetEmsView(); GetDefaultEmsView().ClearContext(); SwitchEmsView(emsView); t1.SaveTimeLog(); #endregion #region 3.医疗单模型加载数据 emsView.GetViewModel().AddNew(); if (param == null) { param = emsCreateParameter.GetParameter(); } emsView.GetViewModel().SetCustomParam(param); // 加载数据 t1.Reset("创建医疗单时候,数据模型加载数据耗时:"); if (!emsView.GetViewModel().LoadMedSrv(emsCreateParameter)) { if (!String.IsNullOrEmpty(emsView.GetViewModel().GetErrorMsg())) { this.SetStatusMsg(emsView.GetViewModel().GetErrorMsg()); } return(false); } if (emsView.GetViewModel().GetTipInfoMsg().Length > 0 && !getFgselfpay(emsView.GetViewModel())) { this.ShowInfo(this, emsView.GetViewModel().GetTipInfoMsg()); //emsView.GetViewModel().ClearTipInfo(); } //服务不可开立校验 if (medSrvDO != null && !String.IsNullOrEmpty(medSrvDO.Id_srv)) { var dic = AssToolEx.OrdEnabelValivate((new String[] { medSrvDO.Id_srv }), this.ent4BannerDTO.Code_entp); if (dic.ContainsKey(medSrvDO.Id_srv)) { //this.SetStatusMsg(dic[medSrvDO.Id_srv]); this.ShowInfo(dic[medSrvDO.Id_srv]); return(false); } } ////异步执行的委托 //xap.rui.appfw.async.AsyncExecuteDelegate workDelegate = workArgs => //{ // //参数是Argument,这是自己传入的,自行转化类型 // var argList = workArgs.Argument as List<object>; // BaseEmsViewModel model = argList[0] as BaseEmsViewModel; // EmsCreatedParameter crt = argList[1] as EmsCreatedParameter; // // 异步调用,远程服务等。返回结果保存在参数的Result中。 // workArgs.Result = model.LoadMedSrv(crt); //}; ////异步执行完毕后,回到调用线程执行的完毕委托 //xap.rui.appfw.async.AsyncDoneDelegate doneDelegate = doneArgs => //{ // //如果已经取消了,则返回 // if (doneArgs.Cancelled) // return; // //如果异步执行时发生了异常,可以在这里处理 // if (doneArgs.Error != null) // { // Exception ex = doneArgs.Error; // //记录日志 // LogManager.GetLogger().ErrorEx(ex.Message, ex); // //发布异常到UI // ex.Publish(); // //标记为已处理异常,如果不标记,框架会抛出异常 // //doneArgs.ErrorHandled = true; // return; // } // //异步执行完毕后,处理异步数据结果 // var data = doneArgs.Result ; //}; //// //List<object> argsList = new List<object>(); //argsList.Add(emsView.GetViewModel()); //argsList.Add(emsCreateParameter); //// //workDelegate.AsyncExecute(argsList, doneDelegate); // 设置状态 this.isCreateEms = true; // 刷新UI emsView.Refresh(); t1.SaveTimeLog(); #endregion #region 4.其他医疗单状态处理 // t1.Reset("创建医疗单时候,其他事件处理耗时:"); this.allowEdit = true; // 允许 UI 编辑 var ret = this.SentNotify(EventCodeType.NM_UIMSG_ALLOW_EDIT); t1.SaveTimeLog(); t0.SaveTimeLog(); #endregion return(ret); }
/// <summary> /// 创建医疗单 /// </summary> /// <param name="emsCreateParameter"></param> /// <param name="pos"></param> /// <returns></returns> //public override bool LoadMedSrv(EmsCreatedParameter emsCreateParameter, int pos) //{ // base.LoadMedSrv(emsCreateParameter, pos); // MedSrvDO med = emsCreateParameter.getMedSrvDO(); // String id_mm = emsCreateParameter.getMmID(); // // 获取列表最后一个数据 // EmsOrDrug newDrug = null; // EmsCrtDTO emsCrt = new EmsCrtDTO(); // emsCrt.Id_srv = med.Id_srv; // emsCrt.Id_mm = id_mm; // emsCrt.EmsMgrInfo = this.emsMgrDTO; // emsCrt.EnContext = BaseEmsView.BaseEmsInfoContext["CiEnContextDTO"] as CiEnContextDTO; // emsCrt.EmsDriver = ((int)this.uiEmsDTO.EmsType).ToString(); // // 临时用,验证结束需要调整到后台 // emsCrt.CustomInfo = emsCreateParameter.GetParameter() == null ? null : emsCreateParameter.GetParameter().ToString(); // EmsRstDTO rst = emsMainService.create(emsCrt); // if (rst != null) // { // String utf8Str = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(rst.EmsDocument)); // EmsDrugItemDO emsDrugItem = new EmsDrugItemDO(); // emsDrugItem.deSerializeJson(utf8Str); // FMap2 emsExtMap = rst.EmsExtension; // this.id_dosages = emsExtMap["id_dosages"] as string; // MedSrvDO medSrv = emsExtMap["MedSrvDO"] as MedSrvDO; // OrWfDeptInfoDTO wf = emsExtMap["OrWfDeptInfoDTO"] as OrWfDeptInfoDTO; // SkinTestRstDTO skinTestRst = emsExtMap["SkinTestRstDTO"] as SkinTestRstDTO; // if (emsExtMap["isShowWarnInfo"] != null && (bool)emsExtMap["isShowWarnInfo"]) // { // this.tipInfoMsgString = emsExtMap["specillDrugWarnInfo"] as string; // } // // 物品参照 // XapDataList<EmsOrDrug> emsOrDrugRef = new XapDataList<EmsOrDrug>(); // if (emsDrugItem.EmsOrDrugEx == null || emsDrugItem.EmsOrDrugEx.Count == 0) { // this.errorMsgString = "服务"+emsDrugItem.Name_srv+"未绑定物品,请联系信息科!"; // return false; // } // foreach (EmsOrDrug drug in emsDrugItem.EmsOrDrugEx) // { // emsOrDrugRef.Add(drug); // } // emsDrugItem.EmsOrDrug = emsOrDrugRef; // // 列表中显示的物品 // XapDataList<EmsOrDrug> emsOrDrugList = new XapDataList<EmsOrDrug>(); // FArrayList drugList_ex = emsDrugItem.EmsOrDrugListEx; // foreach (EmsOrDrug drug in drugList_ex) // { // emsOrDrugList.Add(drug); // } // if (pos < 0) // { // this.uiEmsDTO.MedSrvDO = med; // emsDrugItem.EmsOrDrugList = emsOrDrugList; // // 当物品id查询不到对应物品时,不做赋值操作 // if (emsOrDrugList.Count > 0) // { // this.uiEmsDTO.Emsdrugs = emsDrugItem; // } // newDrug = this.uiEmsDTO.Emsdrugs.EmsOrDrugList.LastOrDefault(); // } // else // { // newDrug = this.uiEmsDTO.Emsdrugs.EmsOrDrugList.ElementAt(pos); // } // // 设置当前选择项目 // SetSelectedObject(newDrug); // if (emsOrDrugList.Count == 0) // { // this.errorMsgString = med.Name + "(" + id_mm + "), 没有关联物品或者物品数据错误!"; // this.logicEx.Clear<EmsOrDrug>(newDrug); // return false; // } // // 获取从后台返回的用于医嘱列表显示的数据 // EmsOrDrug tempDrug = emsOrDrugList[0]; // //皮试判断逻辑 // string skinErrorInfo = AssToolEx.CheckSkinTestRst(tempDrug, skinTestRst, this.GetEnt4BannerDTO()); // if (!string.IsNullOrEmpty(skinErrorInfo)) // { // this.errorMsgString = skinErrorInfo; // this.logicEx.Clear<EmsOrDrug>(newDrug); // return false; // } // // 加载第一条记录信息已经是全的了,不用执行后边的 // if (pos < 0) // { // return true; // } // if (!newDrug.IsUPDATED) // { // tempDrug.Status = DOStatus.NEW; // } // else // { // 增加该逻辑分支 针对 已保存的 医嘱项目 进行服务项目的修改 -- 2016-11-21 by wangqz // tempDrug.Status = DOStatus.UPDATED; // } // // 保留id_orsrv ,当对编辑项通过退格键删除后,在选择其他服务,Id_orsrv存在 // tempDrug.Id_orsrv = newDrug.Id_orsrv; // // 新加的药品要与已有的保持同频次,同周期,同用法 // tempDrug.Id_route = this.uiEmsDTO.Emsdrugs.Id_route; // tempDrug.Name_route = this.uiEmsDTO.Emsdrugs.Name_route; // // 同频次 // tempDrug.Id_freq = this.uiEmsDTO.Emsdrugs.Id_freq; // tempDrug.Name_freq = this.uiEmsDTO.Emsdrugs.Name_freq; // tempDrug.Sd_frequnitct = this.uiEmsDTO.Emsdrugs.Sd_frequnitct; // tempDrug.Freqct = this.uiEmsDTO.Emsdrugs.Freqct; // // 如果只有一条记录,恢复到服务默认的频次,用法 // fillSameInfoWithMedSrvDO(tempDrug, medSrv); // // 同周期 // tempDrug.Use_days = this.uiEmsDTO.Emsdrugs.Use_days; // // 计算总次数 // int times_cur = CalQuantumUtil.GetInstance().getTotalTimes(tempDrug.Id_freq, (int)this.uiEmsDTO.Emsdrugs.Use_days); // // 计算总量 // tempDrug.Quan_cur = CalQuantumUtil.GetInstance().getMMQuantum(tempDrug.Sd_opmutp, tempDrug.Quan_med, tempDrug.Factor_mb, tempDrug.Factor_cb, times_cur); // // 计算总价 // tempDrug.Totalprice = tempDrug.Price * tempDrug.Quan_cur; // // 将返回数据加到表格数据源中 // newDrug.Replace(tempDrug); // } // return true; //} public override bool LoadMedSrv(EmsCreatedParameter emsCreateParameter, int pos) { base.LoadMedSrv(emsCreateParameter, pos); MedSrvDO med = emsCreateParameter.getMedSrvDO(); String id_mm = emsCreateParameter.getMmID(); Dictionary <String, Object> ctmInfo = new Dictionary <string, object>(); ctmInfo.Add("CustomInfo", emsCreateParameter.GetParameter() == null ? null : emsCreateParameter.GetParameter().ToString()); EmsRstDTO[] rsts = CreateRemote(med.Id_srv, id_mm, ctmInfo); EmsRstDTO rst = rsts[0]; if (rst != null) { // 获取列表最后一个数据 EmsOrDrug newDrug = null; EmsDrugItemDO emsDrugItem = (rst.Document[0] as EmsDrugItemDO); //String utf8Str = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(rst.DocumentString)); //EmsDrugItemDO emsDrugItem = new EmsDrugItemDO(); //emsDrugItem.deSerializeJson(utf8Str); FMap2 emsExtMap = rst.Extension; this.id_dosages = emsExtMap["DosagesFilter"] as string; MedSrvDO medSrv = emsExtMap["MedSrvDO"] as MedSrvDO; OrWfDeptInfoDTO wf = emsExtMap["OrWfDeptInfoDTO"] as OrWfDeptInfoDTO; SkinTestRstDTO skinTestRst = emsExtMap["SkinTestRstDTO"] as SkinTestRstDTO; if (emsExtMap["IsShowWarnInfo"] != null && (bool)emsExtMap["IsShowWarnInfo"]) { this.tipInfoMsgString = emsExtMap["SpecilDrugWarnInfo"] as string; } // 物品参照 if (emsDrugItem.EmsOrDrug == null) { emsDrugItem.EmsOrDrug = new XapDataList <EmsOrDrug>(); } foreach (EmsOrDrug drug in emsDrugItem.EmsOrDrugListEx) { emsDrugItem.EmsOrDrug.Add(drug); } // 列表中显示的物品 XapDataList <EmsOrDrug> emsOrDrugList = new XapDataList <EmsOrDrug>(); foreach (EmsOrDrug drug in emsDrugItem.EmsOrDrugListEx) { emsOrDrugList.Add(drug); } // 获取从后台返回的用于医嘱列表显示的数据 EmsOrDrug tempDrug = emsOrDrugList[0]; if (pos < 0) { this.uiEmsDTO.MedSrvDO = med; emsDrugItem.EmsOrDrugList = emsOrDrugList; // 当物品id查询不到对应物品时,不做赋值操作 if (emsOrDrugList.Count > 0) { this.uiEmsDTO.Emsdrugs = emsDrugItem; } newDrug = this.uiEmsDTO.Emsdrugs.EmsOrDrugList.LastOrDefault(); this.uiEmsDTO.Emsdrugs.Id_dep = tempDrug.Id_mp_dep; this.uiEmsDTO.Emsdrugs.Name_dep = tempDrug.Name_mp_dep; } else { newDrug = this.uiEmsDTO.Emsdrugs.EmsOrDrugList.ElementAt(pos); } // 设置当前选择项目 SetSelectedObject(newDrug); //皮试判断逻辑 string skinErrorInfo = AssToolEx.CheckSkinTestRst(tempDrug, skinTestRst, this.GetEnt4BannerDTO()); if (skinErrorInfo != null) { this.errorMsgString = skinErrorInfo; this.logicEx.Clear <EmsOrDrug>(newDrug); return(false); } // 加载第一条记录信息已经是全的了,不用执行后边的 if (pos < 0) { return(true); } if (!newDrug.IsUPDATED) { tempDrug.Status = DOStatus.NEW; } else { // 增加该逻辑分支 针对 已保存的 医嘱项目 进行服务项目的修改 -- 2016-11-21 by wangqz tempDrug.Status = DOStatus.UPDATED; } // 保留id_orsrv ,当对编辑项通过退格键删除后,在选择其他服务,Id_orsrv存在 tempDrug.Id_orsrv = newDrug.Id_orsrv; // 新加的药品要与已有的保持同频次,同周期,同用法 tempDrug.Id_route = this.uiEmsDTO.Emsdrugs.Id_route; tempDrug.Name_route = this.uiEmsDTO.Emsdrugs.Name_route; // 同频次 tempDrug.Id_freq = this.uiEmsDTO.Emsdrugs.Id_freq; tempDrug.Name_freq = this.uiEmsDTO.Emsdrugs.Name_freq; tempDrug.Sd_frequnitct = this.uiEmsDTO.Emsdrugs.Sd_frequnitct; tempDrug.Freqct = this.uiEmsDTO.Emsdrugs.Freqct; // 如果只有一条记录,恢复到服务默认的频次,用法 fillSameInfoWithMedSrvDO(tempDrug, medSrv); // 同周期 tempDrug.Use_days = this.uiEmsDTO.Emsdrugs.Use_days; // 计算总次数 int times_cur = CalQuantumUtil.GetInstance().getTotalTimes(tempDrug.Id_freq, (int)this.uiEmsDTO.Emsdrugs.Use_days); // 计算总量 tempDrug.Quan_cur = CalQuantumUtil.GetInstance().getMMQuantum(tempDrug.Sd_opmutp, tempDrug.Quan_med, tempDrug.Factor_mb, tempDrug.Factor_cb, times_cur); // 计算总价 tempDrug.Totalprice = tempDrug.Price * tempDrug.Quan_cur; // 将返回数据加到表格数据源中 newDrug.Replace(tempDrug); } return(true); }