public ServiceResponseData SaveRefundMessage() { try { DataTable dtPresc = requestData.GetData <DataTable>(0); DataTable dtMedical = requestData.GetData <DataTable>(1); int operatoreid = requestData.GetData <int>(2); OP_FeeRefundHead refundHead = new OP_FeeRefundHead(); refundHead.RefundDocID = operatoreid; refundHead.RefundDate = DateTime.Now; refundHead.RefundPayFlag = 0; refundHead.Flag = 0; refundHead.PatListID = dtPresc == null || dtPresc.Rows.Count == 0 ? Convert.ToInt32(dtMedical.Rows[0]["patlistid"]): Convert.ToInt32(dtPresc.Rows[0]["patlistid"]); refundHead.PatName = dtPresc == null || dtPresc.Rows.Count == 0 ? dtMedical.Rows[0]["patname"].ToString(): dtPresc.Rows[0]["patname"].ToString(); refundHead.InvoiceNum = dtPresc == null || dtPresc.Rows.Count == 0 ? dtMedical.Rows[0]["invoiceNO"].ToString():dtPresc.Rows[0]["invoiceNO"].ToString(); this.BindDb(refundHead); refundHead.save(); if (dtPresc != null) { for (int i = 0; i < dtPresc.Rows.Count; i++) { if (dtPresc.Rows[i]["ItemName"].ToString().Trim() == "小 计") { continue; } OP_FeeRefundDetail refundDetail = new OP_FeeRefundDetail(); refundDetail.ReHeadID = refundHead.ReHeadID; refundDetail.FeeItemHeadID = Convert.ToInt32(dtPresc.Rows[i]["FeeItemHeadID"]); OP_FeeItemHead opfeeitemhead = NewObject <OP_FeeItemHead>().getmodel(refundDetail.FeeItemHeadID) as OP_FeeItemHead; if (opfeeitemhead.ChargeStatus != 0 && opfeeitemhead.ChargeFlag != 1 && opfeeitemhead.DistributeFlag != Convert.ToInt32(dtPresc.Rows[i]["DistributeFlag"])) { throw new Exception("该处方没有正常的收费记录"); } refundDetail.DistributeFlag = opfeeitemhead.DistributeFlag;//取数据库最新记录状态,防止并发状态 refundDetail.RefundFlag = 0; refundDetail.FeeItemDetailID = Convert.ToInt32(dtPresc.Rows[i]["PresDetailID"]); refundDetail.ItemID = Convert.ToInt32(dtPresc.Rows[i]["ItemID"]); refundDetail.ItemName = dtPresc.Rows[i]["ItemName"].ToString(); refundDetail.OldAmount = Convert.ToDecimal(dtPresc.Rows[i]["Amount"]); decimal refundminimun = Convert.ToDecimal(dtPresc.Rows[i]["RefundMiniNum"]); decimal refundpacknum = Convert.ToDecimal(dtPresc.Rows[i]["RefundPackNum"]); decimal refundpresamount = Convert.ToDecimal(dtPresc.Rows[i]["refundpresamount"]); decimal unitNO = Convert.ToDecimal(dtPresc.Rows[i]["UnitNO"]); decimal refundamount = ((refundpacknum * unitNO) + refundminimun) * refundpresamount; refundDetail.RefundAmount = refundamount; refundDetail.NewAmount = refundDetail.OldAmount - refundDetail.RefundAmount; refundDetail.RefundFee = Convert.ToDecimal(dtPresc.Rows[i]["RefundFee"]); refundDetail.RefundPresAmount = refundpresamount; this.BindDb(refundDetail); refundDetail.save(); } } if (dtMedical != null) { //根据组合项目生成明细 for (int i = 0; i < dtMedical.Rows.Count; i++) { int feeItemHeadID = Convert.ToInt32(dtMedical.Rows[i]["FeeItemHeadID"]); OP_FeeItemHead opfeeitemhead = NewObject <OP_FeeItemHead>().getmodel(feeItemHeadID) as OP_FeeItemHead; if (opfeeitemhead.ChargeStatus != 0 && opfeeitemhead.ChargeFlag != 1 && opfeeitemhead.DistributeFlag != Convert.ToInt32(dtMedical.Rows[i]["DistributeFlag"])) { throw new Exception("该处方没有正常的收费记录"); } List <OP_FeeItemDetail> list = NewObject <OP_FeeItemDetail>().getlist <OP_FeeItemDetail>(" FeeItemHeadID=" + feeItemHeadID + " and ExamItemID=" + dtMedical.Rows[i]["ExamItemID"] + " "); foreach (OP_FeeItemDetail detail in list) { OP_FeeRefundDetail refundDetail = new OP_FeeRefundDetail(); refundDetail.ReHeadID = refundHead.ReHeadID; refundDetail.FeeItemHeadID = feeItemHeadID; refundDetail.DistributeFlag = opfeeitemhead.DistributeFlag;//取数据库最新记录状态,防止并发状态 refundDetail.RefundFlag = 0; refundDetail.FeeItemDetailID = detail.PresDetailID; refundDetail.ItemID = detail.ItemID; refundDetail.ItemName = detail.ItemName; refundDetail.OldAmount = detail.Amount; if (dtMedical.Rows[i]["Sel"] != DBNull.Value && Convert.ToInt32(dtMedical.Rows[i]["Sel"]) == 1) { refundDetail.RefundAmount = detail.Amount; } else { refundDetail.RefundAmount = 0; } refundDetail.NewAmount = refundDetail.OldAmount - refundDetail.RefundAmount; refundDetail.RefundFee = detail.RetailPrice * refundDetail.RefundAmount; refundDetail.RefundPresAmount = detail.PresAmount; this.BindDb(refundDetail); refundDetail.save(); } } } responseData.AddData(true); return(responseData); } catch (Exception err) { throw new Exception(err.Message); } }