Ejemplo n.º 1
0
 private void FillSameMpDeptInfo(EmsDrugItemDO ems)
 {
     foreach (EmsOrDrug item in (GetTableDataSource() as XapDataList <EmsOrDrug>))
     {
         item.Id_mp_dep   = ems.Id_dep;
         item.Name_mp_dep = ems.Name_dep;
     }
 }
Ejemplo n.º 2
0
        public ExtMmForm(XapDataList <EmsOrDrug> list, EmsDrugItemDO drugItemDO, EmsOrDrug emsordrug) : this()
        {
            InitializeComponent();
            //IMaterialStockService stoctService = XapServiceMgr.find<IMaterialStockService>();
            //GetStockReqDTO[] reqDtos = new GetStockReqDTO[list.Count];
            //for (int i = 0; i < list.Count; i++)
            //{
            //    GetStockReqDTO reqDTO = new GetStockReqDTO();
            //    reqDTO.Id_mm = list[i].Id_mm;
            //    reqDTO.Id_dep = emsordrug.Id_mp_dep;
            //    reqDTO.Req_unit_id = list[i].Id_unit_sale;
            //    reqDtos[i] = reqDTO;
            //}

            //MaterialStockDTO[] stockdto = stoctService.getMaterialStocks(reqDtos);
            //for (int i = list.Count - 1; i >= 0; i--)
            //{
            //    MaterialStockDTO materialDo = stockdto.FirstOrDefault(p => p.Id_mm == list[i].Id_mm);
            //    if (materialDo != null)
            //    {
            //        double mmcount = (double)materialDo.Quan_stock;
            //        if (mmcount <= 0)
            //        {
            //            list.RemoveAt(i);
            //        }
            //        else
            //        {
            //            list[i].Fact_count = mmcount;
            //            list[i].Price = materialDo.Price_act;
            //        }
            //    }

            IEnumerable <EmsOrDrug> query = null;

            query = from items in list orderby items.Fact_count descending select items;
            int flag = 0;

            foreach (var item in query)
            {
                list[flag] = item;
                flag++;
            }
            mm = new ExtMmRefView(list, emsordrug);
            mm.DoubleClickEvent += new EventHandler(mm_DoubleClickEvent);
            splitContainer1.AddControl(this.orCom, xap.cli.sdk.controls.ControlPosition.Bottom, 30);
            splitContainer1.AddControl(mm, xap.cli.sdk.controls.ControlPosition.Center);
            this.saveButton.MouseClick   += new MouseEventHandler(saveButton_MouseClick);
            this.cancelButton.MouseClick += new MouseEventHandler(cancelButton_MouseClick);
            this.Controls.Add(splitContainer1);
        }
Ejemplo n.º 3
0
        protected EmsOrDrug fillSameInfoForEmsOrDrug(EmsOrDrug defEmsOrdrug, EmsDrugItemDO emsdrugs)
        {
            if (GetCountWithOutDelete() /*emsdrugs.EmsOrDrugList.Count*/ == 1)
            {
                if (emsdrugs.Use_days == null || emsdrugs.Use_days == 0)
                {
                    emsdrugs.Use_days = 1;
                }
            }

            // 相同的频次
            {
                defEmsOrdrug.Id_freq       = emsdrugs.Id_freq;
                defEmsOrdrug.Name_freq     = emsdrugs.Name_freq;
                defEmsOrdrug.Sd_frequnitct = emsdrugs.Sd_frequnitct;
                defEmsOrdrug.Freqct        = emsdrugs.Freqct;
            }

            // 相同的用法
            {
                defEmsOrdrug.Id_route   = emsdrugs.Id_route;
                defEmsOrdrug.Name_route = emsdrugs.Name_route;
            }
            // 计算不同的执行科室
            {
                OrWfDeptInfoDTO wf = new GetDeptMpImp().GetDept_mp_ids(GetEnt4BannerDTO().Code_entp, GetEnt4BannerDTO().Id_entp, defEmsOrdrug.Sd_srvtp, defEmsOrdrug.Id_srvca, defEmsOrdrug.Id_srv, defEmsOrdrug.Id_route, "", GetEnt4BannerDTO().Id_dep_nur, GetEnt4BannerDTO().Id_dep_phy);

                if (defEmsOrdrug.Id_mp_dep == null)
                {
                    defEmsOrdrug.Id_mp_dep   = wf == null ? "" : wf.Firstid_mp_dept;
                    defEmsOrdrug.Name_mp_dep = wf == null ? "" : wf.Firstname_mp_dept;
                }
                if (defEmsOrdrug.Id_dep_wh == null)
                {
                    defEmsOrdrug.Id_dep_wh = wf == null ? "" : wf.Id_dept_wh;
                }
            }

            if (defEmsOrdrug.Use_days == null)
            {
                defEmsOrdrug.Use_days = (emsdrugs.Use_days == null ? 0 : emsdrugs.Use_days);
            }

            if (defEmsOrdrug.Quan_cur == null)
            {
                defEmsOrdrug.Quan_cur = 0;
            }

            return(defEmsOrdrug);
        }
Ejemplo n.º 4
0
        public MmForm(XapDataList <EmsOrDrug> list, EmsDrugItemDO drugItemDO) : this()
        {
            IMaterialStockService stoctService = XapServiceMgr.find <IMaterialStockService>();

            GetStockReqDTO[] reqDtos = new GetStockReqDTO[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                GetStockReqDTO reqDTO = new GetStockReqDTO();
                reqDTO.Id_mm       = list[i].Id_mm;
                reqDTO.Id_dep      = "";
                reqDTO.Req_unit_id = list[i].Id_unit_sale;
                reqDtos[i]         = reqDTO;
            }
            MaterialStockDTO[] stockdto = stoctService.getMaterialStocks(reqDtos);
            for (int i = list.Count - 1; i >= 0; i--)
            {
                MaterialStockDTO materialDo = stockdto.FirstOrDefault(p => p.Id_mm == list[i].Id_mm);
                if (materialDo != null)
                {
                    double mmcount = (double)materialDo.Quan_stock;
                    if (mmcount <= 0)
                    {
                        list.RemoveAt(i);
                    }
                    else
                    {
                        list[i].Fact_count = Math.Round(mmcount);
                        list[i].Price      = materialDo.Price_act;
                    }
                }
            }
            IEnumerable <EmsOrDrug> query = null;

            query = from items in list orderby items.Fact_count descending select items;
            int flag = 0;

            foreach (var item in query)
            {
                list[flag] = item;
                flag++;
                //Console.WriteLine(item.Id+":"+item.Name);
            }



            mm = new MmRefView(list);
            mm.DoubleClickEvent += new EventHandler(mm_DoubleClickEvent);

            this.Panel = mm;
        }
Ejemplo n.º 5
0
        public override bool OrdValivate(object model, BaseEmsView sender)
        {
            EmsDrugItemDO Emsdrugs = (model as EmsDrugsViewModel).GetFormDataSource() as EmsDrugItemDO;

            if (base.OrdValivate(model, sender) && Emsdrugs != null)
            {
                #region 药品重复检查
                IEnumerable <IGrouping <string, EmsOrDrug> > enuma = Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).GroupBy(i => i.Id_mm).Where(g => g.Count() > 1);
                bool bcf = enuma.Count() >= 1;
                if (bcf)
                {
                    foreach (IGrouping <string, EmsOrDrug> group in enuma)
                    {
                        EmsOrDrug ems = group.First();
                        sender.OrdErrorList.Add("药品【" + ems.Name_mm + "】有重复!");
                    }
                }
                #endregion

                #region 空药品
                if (Emsdrugs.EmsOrDrugList.Count(p => !p.IsDELETED && string.IsNullOrEmpty(p.Id_srv)) > 0)
                {
                    sender.OrdErrorList.Add("药品有空数据!");
                }

                #endregion

                #region 剂|总量大于0
                foreach (EmsOrDrug item in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).ToList())
                {
                    if (item.Quan_med == null || item.Quan_med.ToDouble() <= 0)
                    {
                        sender.OrdErrorList.Add(item.Name_mm + "剂量必须大于0!");
                    }
                    if (item.Quan_cur == null || item.Quan_cur.ToDouble() <= 0)
                    {
                        sender.OrdErrorList.Add(item.Name_mm + "总量必须大于0!");
                    }
                }
                #endregion
                List <string> depMps = new List <string>();
                foreach (EmsOrDrug item in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).ToList())
                {
                    if (!depMps.Contains(item.Id_mp_dep))
                    {
                        depMps.Add(item.Id_mp_dep);
                    }
                }
                if (depMps.Count() > 1)
                {
                    sender.OrdErrorList.Add("药品的执行科室不一致,不能保存!");
                }
                #region 执行科室校验
                #endregion
                #region 在院执行为true时,在院执行次数必须大于0
                if (Emsdrugs.Fg_mp_in == true && (Emsdrugs.Times_mp_in == null || Emsdrugs.Times_mp_in <= 0))
                {
                    sender.OrdErrorList.Add("在院执行时,在院执行次数必须大于0!");
                }
                #endregion
                #region 药品不能为空
                if (Emsdrugs.EmsOrDrugList.Count(p => !p.IsDELETED) == 0)
                {
                    sender.OrdErrorList.Add("药品不能为空!");
                }
                #endregion


                #region 用药天数必须大于0
                if (Emsdrugs.Use_days < 0)
                {
                    sender.OrdErrorList.Add("用药天数小于0!");
                }
                #endregion
                #region 药品的单价不能为空
                string priceError = "";
                foreach (EmsOrDrug drug in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED))
                {
                    if (drug.Price == null)
                    {
                        priceError += "药品【" + drug.Name_srv + "】的价格为空,请与信息科联系!";
                    }
                }
                if (priceError != "")
                {
                    sender.OrdErrorList.Add(priceError);
                }
                #endregion
                #region 校验每个服务的药品用法是否在剂型关联的用法集合里
                List <string> id_dosages = new List <string>();
                foreach (EmsOrDrug drug in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED))
                {
                    id_dosages.Add(drug.Id_dosage);
                }
                RouteDosageRefDO[] rdros = LogicEx.GetInstance().getRouteDoSageRefDOById_dosages(id_dosages);
                string             error = "";
                foreach (EmsOrDrug drug in Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED))
                {
                    RouteDosageRefDO item = rdros.FirstOrDefault(p => p.Id_dosage == drug.Id_dosage && p.Id_route == drug.Id_route);
                    if (item == null)
                    {
                        UdidocDO udidoc = LogicEx.GetInstance().getUdidocDOById(drug.Id_dosage);
                        if (udidoc != null)
                        {
                            error += drug.Name_srv + "剂型为" + udidoc.Name + ",不能使用" + drug.Name_route + "用法;";
                        }
                    }
                }
                if (error != "")
                {
                    sender.OrdErrorList.Add(error);
                }
                #endregion
                #region 药品库存的判断
                string mmcounterror = LogicEx.GetInstance().validateDrugCount(Emsdrugs.EmsOrDrugList.ToList());
                if (!string.IsNullOrEmpty(mmcounterror))
                {
                    sender.OrdErrorList.Add(mmcounterror);
                }
                #endregion
                #region 空数据记录提示
                EmsOrDrug drugitem = Emsdrugs.EmsOrDrugList.Where(p => !p.IsDELETED).ToList().FirstOrDefault(p => p.Id_srv == null);
                if (drugitem != null)
                {
                    sender.OrdErrorList.Add("医疗单列表中存在空数据,请删除后保存");
                }
                #endregion
                #region 用法数据完整性校验
                if (String.IsNullOrEmpty(Emsdrugs.Id_route))
                {
                    sender.OrdErrorList.Add("药品的用法ID为空,请重新选择用法");
                }
                #endregion
            }

            return(sender.OrdErrorList.Count == 0);
        }
Ejemplo n.º 6
0
        public override bool LoadMedSrv(EmsCreatedParameter emsCreatedParameter, int pos) //EmsCreateParameter
        {
            MedSrvDO med   = emsCreatedParameter.getMedSrvDO();
            String   id_mm = emsCreatedParameter.getMmID();

            if (String.IsNullOrEmpty(id_mm))
            {
                this.errorMsgString = "没有物品ID";
                return(false);
            }

            // 获取列表最后一个数据
            EmsOrDrug newDrug = null;

            AssCostTimeTool.Enabled = true;

            AssCostTimeTool t1 = new AssCostTimeTool("加载数据时候,LoadMedSrv2 解析 MedSrv 耗时:", false);

            EmsRstDTO[] rsts = CreateRemote(med.Id_srv, id_mm);
            EmsRstDTO   rst  = rsts[0];

            if (rst != 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;

                MedSrvDO        medSrv = emsExtMap["MedSrvDO"] as MedSrvDO;
                OrWfDeptInfoDTO wf     = emsExtMap["OrWfDeptInfoDTO"] as OrWfDeptInfoDTO;

                emsDrugItem.EmsOrDrug = new XapDataList <EmsOrDrug>();

                // 列表中显示的物品
                XapDataList <EmsOrDrug> emsOrDrugList = new XapDataList <EmsOrDrug>();
                FArrayList drugList_ex = emsDrugItem.EmsOrDrugListEx;
                foreach (EmsOrDrug drug in drugList_ex)
                {
                    emsOrDrugList.Add(drug);
                    emsDrugItem.EmsOrDrug.Add(drug);
                }

                newDrug = this.GetSelectedObject() as EmsOrDrug;
                if (pos < 0)
                {
                    this.uiEmsDTO.MedSrvDO    = med;
                    emsDrugItem.EmsOrDrugList = emsOrDrugList;
                    this.uiEmsDTO.Emsdrugs    = emsDrugItem;
                    return(true);
                }

                //TODO: 可以放到查询药品前,重复就不用走后台了
                if (this.uiEmsDTO.Emsdrugs.EmsOrDrugList.Count(p => p.Name_srv == newDrug.Name_srv && !p.IsDELETED) > 1)
                {
                    this.errorMsgString = "已经存在服务【" + medSrv.Name + "】!";
                    this.uiEmsDTO.Emsdrugs.EmsOrDrugList.Remove(newDrug);
                    this.logicEx.Clear <EmsOrDrug>(newDrug);
                    newDrug.Status = DOStatus.NEW;
                    this.uiEmsDTO.Emsdrugs.EmsOrDrug.Clear();
                    this.uiEmsDTO.Emsdrugs.EmsOrDrug.Add(newDrug);
                    return(false);
                }

                // 获取从后台返回的用于医嘱列表显示的数据
                if (emsOrDrugList == null || string.IsNullOrEmpty(emsOrDrugList[0].Id_mm))
                {// TODO 什么情况没有数据
                    this.errorMsgString = "服务未绑定物品,请联系信息科!";
                    this.logicEx.Clear <EmsOrDrug>(newDrug);
                    return(false);
                }
                EmsOrDrug tempDrug = emsOrDrugList[0];

                if (!newDrug.IsUPDATED)
                {
                    tempDrug.Status = DOStatus.NEW;
                }
                else
                { // 增加该逻辑分支   针对 已保存的 医嘱项目 进行服务项目的修改 -- 2016-11-21 by wangqz
                    tempDrug.Status   = DOStatus.UPDATED;
                    tempDrug.Id_orsrv = newDrug.Id_orsrv;
                }


                // 新加的药品要与已有的保持同频次,同周期,同用法
                tempDrug.Id_route   = this.uiEmsDTO.Emsdrugs.Id_route;
                tempDrug.Name_route = this.uiEmsDTO.Emsdrugs.Name_route;

                // 草药外配标识在医疗单中,勾选外配,全为外配
                tempDrug.Fg_extdispense = this.uiEmsDTO.Emsdrugs.Fg_extdispense;

                // 同频次
                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;

                // 计算总次数 TODO 需要提供前台计算方法,数据都有了,不用走后台了
                int?times_cur = this.uiEmsDTO.Emsdrugs.Times_cur; // CalQuantumUtil.GetInstance().getTotalTimes(tempDrug.Id_freq, (int)this.uiEmsDTO.Emsdrugs.Use_days);


                int?orders = this.uiEmsDTO.Emsdrugs.Orders;
                // 计算总量
                tempDrug.Quan_cur = CalQuantumUtil.GetInstance().getMMQuantum(tempDrug.Sd_mupkgutp, tempDrug.Quan_med, tempDrug.Factor_mb, tempDrug.Factor_cb, orders);

                tempDrug.Totalprice = tempDrug.Price * tempDrug.Quan_cur; // 计算总价

                // 将返回数据加到表格数据源中
                newDrug.Replace(tempDrug);
            }

            return(true);
        }
Ejemplo n.º 7
0
 public IpOpTotalCount(EmsDrugItemDO emsDrugItemDO, Ent4BannerDTO PatInfo)
 {
     this.emsDrugItemDO = emsDrugItemDO;
     this.PatInfo       = PatInfo;
 }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
        protected void HandleTimesMpInInfo(String routeSets, EmsDrugItemDO itemDO)
        {
            // 如果医疗单处于不可以编辑状态,则针对于在院执行次数相关控制逻辑失效,不再需要处理
            if (!this.allowEdit)
            {
                return;
            }

            var fg_mp_in    = AssXapFormUtils.GetUserRender(GetXapFormControl(), "orcard.fg_mp_in");
            var times_mp_in = AssXapFormUtils.GetUserRender(GetXapFormControl(), "orcard.times_mp_in");

            // 如果模型 在院执行标记为空 则不在院执行
            if (itemDO.Fg_mp_in == null)
            { //
                fg_mp_in.Enabled    = false;
                times_mp_in.Enabled = false;
                itemDO.Times_mp_in  = 0;
            }

            // 如果用法在集合为空
            if (String.IsNullOrEmpty(routeSets))
            {
                String[] IVDrugSets = { BdSrvDictCodeConst.SD_SRVTP_DRUG_WESTDRUG_ZX, BdSrvDictCodeConst.SD_SRVTP_DRUG_WESTDRUG_DSY }; //默认: 注射、溶媒
                var      drug       = (this.GetViewModel().GetTableDataSource() as XapDataList <EmsOrDrug>).FirstOrDefault(p => !p.IsDELETED);
                if (!String.IsNullOrEmpty(drug.Id_srv) && !String.IsNullOrEmpty(drug.Sd_srvtp))
                {
                    if (IVDrugSets.Contains(drug.Sd_srvtp.Substring(0, 6)))
                    {
                        if (itemDO.Fg_mp_in == null)
                        {
                            itemDO.Fg_mp_in    = true;
                            itemDO.Times_mp_in = itemDO.Freqct * itemDO.Use_days;
                            int total = this.GetLogicEx().GetDrugUseTotalCount(this.GetViewModel().GetEmsUIDTO() as EmsUIDTO);
                            ((times_mp_in as XLabelBaseUserRender).UserRender as XNumbericUpDown).MaxValue = total;
                        }
                        else if (itemDO.Fg_mp_in == false)
                        {
                            itemDO.Fg_mp_in    = false;
                            itemDO.Times_mp_in = 0;
                        }
                        else
                        {
                        }
                    }
                    // 没有配置可修改用法集合时候,都不能修改
                    fg_mp_in.Enabled    = false;
                    times_mp_in.Enabled = false;
                }
            }
            else
            {
                // 如果当前用法非空并且当前的用法在系统参数配置的用法集合内时候,需要设置在院执行标志
                if (!String.IsNullOrEmpty(itemDO.Id_route) && routeSets.ToLower().IndexOf(itemDO.Id_route.ToLower()) >= 0)
                {
                    if (itemDO.Fg_mp_in == null)
                    {
                        itemDO.Fg_mp_in    = true;
                        itemDO.Times_mp_in = itemDO.Freqct * itemDO.Use_days;
                    }
                    else if (!itemDO.Fg_mp_in.Value)
                    { // 这个逻辑永远不会执行,暂时注销
                        itemDO.Fg_mp_in    = true;
                        itemDO.Times_mp_in = itemDO.Freqct * itemDO.Use_days;
                    }
                    //else {

                    //}
                    int total = this.GetLogicEx().GetDrugUseTotalCount(this.GetViewModel().GetEmsUIDTO() as EmsUIDTO);
                    ((times_mp_in as XLabelBaseUserRender).UserRender as XNumbericUpDown).MaxValue = total;
                    itemDO.Times_mp_in  = itemDO.Times_mp_in > total ? total : itemDO.Times_mp_in;
                    fg_mp_in.Enabled    = true;
                    times_mp_in.Enabled = itemDO.Fg_mp_in.Value;
                }
                else
                {
                    fg_mp_in.Enabled    = false;
                    times_mp_in.Enabled = false;
                    itemDO.Times_mp_in  = 0;
                    itemDO.Fg_mp_in     = false;
                }
            }
            if (null == itemDO.Fg_mp_in)
            {
                itemDO.Fg_mp_in = false;
            }
            times_mp_in.Enabled = fg_mp_in.Enabled & itemDO.Fg_mp_in.Value;
        }