Esempio n. 1
0
        public void DrawGph( string GphType ,decimal ASKID ,decimal Channel ,int BG_Width ,int BG_Height ,int left ,int right ,int up ,int down ,int xmax,int ymax)
        {
            init.DBConnect();
            if (GphType == "BASE64")
            {
                sqlstr = "select ID,坐标值 from 检验图形记录 where 申请ID  = " + ASKID.ToString() + " and 报告项目ID = " + Channel.ToString();

                ada = new OracleDataAdapter(sqlstr, ConnectDB.con);
                ada.Fill(dsGraph, "检验图形记录");
                dtGraph = dsGraph.Tables[0];
                Base64StringToImage();
                return;
            }
            else
            {
                if (GphType == "散点图")
                {
                    sqlstr = "select to_number(substr( column_value , instr( column_value ,'|') +1 )) getrow,"
                            + "to_number(substr( column_value , 1,instr( column_value ,'|') -1 )) rowvalue "
                            + "from table(nec_散点图(" + ASKID.ToString() + ",'" + Channel.ToString() + "'))";
                }
                else if (GphType == "折线图")
                {
                    sqlstr = "select to_number(substr( column_value , instr( column_value ,'|') +1 )) getrow,"
                                + "to_number(substr( column_value , 1,instr( column_value ,'|') -1 )) rowvalue "
                                + "from table(Nec_Str2list( "
                                + "(select 坐标值 from 检验图形记录 where 申请ID  = " + ASKID.ToString() + " and 报告项目ID = " + Channel.ToString() + "),',',null,'1'))";
                }
                //界标
                sqlLandmark = "select ID,界标,图形 from 检验图形记录 where 申请ID  = " + ASKID.ToString() + " and 报告项目ID = " + Channel.ToString();

                ada = new OracleDataAdapter(sqlstr, ConnectDB.con);
                ada.Fill(dsGraph, "检验图形记录");
                dtGraph = dsGraph.Tables[0];

                ada = new OracleDataAdapter(sqlLandmark, ConnectDB.con);
                ada.Fill(dsLandmark, "检验图形记录");
                dtLandmark = dsLandmark.Tables[0];

                //画图参数
                if (ymax == 0) ymax = 500;
                float pic_X = (BG_Width - left - right) / (xmax - 1);
                float pic_H = (BG_Height - up - down) / (ymax - 1);

                Pen Pic_Bolder = new Pen(Color.Black, 1);
                Pen Pic_line = new Pen(Color.Black, 1);
                Pen Pic_Data = new Pen(Color.Black, 1);
                SolidBrush brusth = new SolidBrush(Color.Blue);

                Bitmap Bg = new Bitmap(BG_Width, BG_Height, PixelFormat.Format24bppRgb);
                Graphics Ph = Graphics.FromImage(Bg);

                Font f = new Font(FontFamily.GenericSerif, 1.0F, FontStyle.Regular);
                Ph.Clear(Color.White);

                //Rectangle rec = new Rectangle(50, 15, 360, 150);
                //Ph.DrawRectangle(Pic_Bolder, rec);

                //原点
                PointF cpt = new PointF(left, BG_Height - down);
                //x轴三角形
                PointF[] xpt = new PointF[3] { new PointF(BG_Width - right + 5, cpt.Y), new PointF(BG_Width - right, cpt.Y - 5), new PointF(BG_Width - right, cpt.Y + 5) };
                //y轴三角形
                PointF[] ypt = new PointF[3] { new PointF(cpt.X, up), new PointF(cpt.X - 5, up + 5), new PointF(cpt.X + 5, up + 5) };

                Point[] DataPt = new Point[dtGraph.Rows.Count];
                //坐标点
                int x;
                int y;
                int m = 0;
                for (int n = 0; n < dtGraph.Rows.Count; n++)
                {
                    drGraph = dtGraph.Rows[n];
                    x = Convert.ToInt32((Convert.ToInt32(drGraph[0].ToString()) - 1) * pic_X + cpt.X);
                    y = Convert.ToInt32(cpt.Y - Convert.ToInt32(drGraph[1].ToString()) * pic_H);
                    DataPt[m] = new Point(x, y);
                    m++;
                }

                //画x轴
                Ph.DrawLine(Pens.Black, cpt.X, cpt.Y, BG_Width - right, cpt.Y);
                //画x轴箭头
                Ph.DrawPolygon(Pens.Black, xpt);
                //填充x轴箭头
                Ph.FillPolygon(new SolidBrush(Color.Black), xpt);
                Ph.DrawString("x", new Font("宋体", 9), Brushes.Black, new PointF(BG_Width - right - 10, cpt.Y + 5));

                //画y轴
                Ph.DrawLine(Pens.Black, cpt.X, cpt.Y, cpt.X, up);
                //画y轴箭头
                Ph.DrawPolygon(Pens.Black, ypt);
                //填充y轴箭头
                Ph.FillPolygon(new SolidBrush(Color.Black), ypt);
                Ph.DrawString("y", new Font("宋体", 9), Brushes.Black, new PointF(cpt.X - 10, up + 10));

                ////画x轴刻度
                //for (int i = 0; i < 900 / 50; i++)
                //{
                //    gph.DrawLine(Pens.White, cpt.X + i * 50, cpt.Y, cpt.X + i * 50, cpt.Y - 3);
                //    gph.DrawString(i.ToString(), new Font("宋体", 12), Brushes.White, new PointF(cpt.X + i * 50, cpt.Y + 20));
                //}
                Ph.DrawString(Convert.ToString((xmax - 1)), new Font("宋体", 9), Brushes.Black, new PointF(cpt.X + (xmax - 1) * pic_X, cpt.Y + 5));
                ////画y轴刻度
                //for (int i = 0; i < 27; i++)
                //{
                //    gph.DrawLine(Pens.White, cpt.X, cpt.Y - i * 20, cpt.X + 3, cpt.Y - i * 20);
                //    gph.DrawString(Convert.ToString(i), new Font("宋体", 12), Brushes.White, new PointF(cpt.X - 30, cpt.Y - i * 20 - 10));
                //}
                Ph.DrawString(Convert.ToString((ymax - 1)), new Font("宋体", 9), Brushes.Black, new PointF(cpt.X - 20, cpt.Y - (ymax - 1) * pic_H));

                if (GphType == "散点图")
                {
                    //画点
                    Point p = new Point(0, 0);
                    for (int n = 0; n < DataPt.Length; n++)
                    {
                        p = new Point(DataPt[n].X, DataPt[n].Y);
                        Ph.DrawString("○", f, new SolidBrush(Color.Black), p);
                    }
                }
                else if (GphType == "折线图")
                {
                    //画折线
                    Ph.DrawCurve(Pic_Data, DataPt);
                }

                //rec.
                Point SPoint = new Point();
                Point Epoint = new Point();
                if (dtLandmark.Rows[0]["界标"].ToString().Length != 0)
                {
                    if (dtLandmark.Rows[0]["界标"].ToString().Split(' ').Length == 18)
                    {
                        //实线
                        Pic_line.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[0].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[0].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[1].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[1].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[2].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[2].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (ymax - 1) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[3].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[3].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[4].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[4].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[5].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[5].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[6].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[6].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[0].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[7].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[10].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[11].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[11].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[1].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + 127 * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[10].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + 127 * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[7].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[8].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + (xmax - 1) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y);
                        Epoint.X = Convert.ToInt32(cpt.X + (xmax - 1) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (ymax - 1) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);
                        //虚线
                        Pic_line.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[2].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[15].ToString())) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + (xmax - 1) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[13].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[15].ToString())) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[1].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[17].ToString())) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[17].ToString())) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[17].ToString())) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[16].ToString())) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[12].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[8].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[16].ToString())) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);

                        SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) * pic_X);
                        SPoint.Y = Convert.ToInt32(cpt.Y - Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) * pic_H);
                        Epoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[9].ToString()) * pic_X);
                        Epoint.Y = Convert.ToInt32(cpt.Y - (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[14].ToString()) + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[16].ToString())) * pic_H);
                        Ph.DrawLine(Pic_line, SPoint, Epoint);
                    }
                    else
                    {
                        for (int i = 0; i < dtLandmark.Rows[0]["界标"].ToString().Split(' ').Length; i++)
                        {
                            if (Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[i].ToString()) == 0) continue;
                            Pic_line.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                            SPoint.X = Convert.ToInt32(cpt.X + Convert.ToInt32(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[i].ToString()) * pic_X);
                            SPoint.Y = Convert.ToInt32(cpt.Y);
                            Epoint.X = Convert.ToInt32(cpt.X + Convert.ToDouble(dtLandmark.Rows[0]["界标"].ToString().Split(' ')[i].ToString()) * pic_X);
                            Epoint.Y = up;
                            Ph.DrawLine(Pic_line, SPoint, Epoint);
                        }
                    }
                }

                //画标题
                string Title = "画折线测试";
                SolidBrush brush = new SolidBrush(Color.RoyalBlue);
                Ph.DrawString(Title, new Font("Franklin Gothic Demi", 12, FontStyle.Italic), brush, new Point(75, 0));
                Ph.Save();

                Bg.Save("11.Bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                //Bg.Save(Response.OutputStream, ImageFormat.Gif);

                Bitmap b = new Bitmap(320, 180);
                Graphics g = Graphics.FromImage(b);

                //图像缩放
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                g.DrawImage(Bg, new Rectangle(0, 0, 320, 180), new Rectangle(0, 0, Bg.Width, Bg.Height), GraphicsUnit.Pixel);
                g.Dispose();

                b.Save("11.Bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                SavePhoto(dtLandmark.Rows[0]["ID"].ToString());
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 标本核收
        /// </summary>
        public void SampleHS()
        {
            SaveResult saveResult = new SaveResult();
            DataSet    dsTestSpecimenList;
            DataSet    dsTestApplyDetail;
            DataSet    dsGUID;
            string     strTestApplyDetailID = "";

            //strBarCode = "102021875157";
            //OracleParameter[] parameters ={
            //                        new OracleParameter("SPECIMEN_ID_IN",OracleType.VarChar,4000),
            //                        new OracleParameter("STATUS_IN",OracleType.Number,1),
            //                        new OracleParameter("OPERATOR_IN",OracleType.VarChar,36),
            //                        new OracleParameter("OPERATOR_TIME_IN",OracleType.DateTime),
            //                        new OracleParameter("LOT_IN",OracleType.VarChar,40),
            //                        new OracleParameter("deny_reason_in",OracleType.VarChar,36)};

            dsTestSpecimenList = dsHandle.GetDataSet("SPECIMEN_ID", "Test_Specimen_list", "Barcode='" + strBarCode + "'");
            foreach (DataRow dr in dsTestSpecimenList.Tables[0].Rows)
            {
                dsTestApplyDetail    = dsHandle.GetDataSet("wm_concat(TEST_APPLY_DETAIL_ID) TEST_APPLY_DETAIL_ID", "TEST_APPLY_DETAIL", "SPECIMEN_ID='" + dr["SPECIMEN_ID"].ToString() + "'");
                strTestApplyDetailID = strTestApplyDetailID + "," + dsTestApplyDetail.Tables[0].Rows[0]["TEST_APPLY_DETAIL_ID"].ToString();
            }
            ;
            if (strTestApplyDetailID.Substring(0, 1) == ",")
            {
                strTestApplyDetailID = strTestApplyDetailID.Substring(1);
            }
            dsGUID = dsHandle.GetDataSet("sysdate", "dual", "");

            ConnectDB         init = new ConnectDB();
            OracleCommand     cmd  = new OracleCommand();
            OracleTransaction transaction;

            init.DBConnect();
            cmd.Connection  = ConnectDB.con;                    // init.con;
            transaction     = ConnectDB.con.BeginTransaction(); // init.con.BeginTransaction();
            cmd.Transaction = transaction;

            cmd.CommandText = "P_TEST_SPECIMEN_LIST_UP";//声明存储过程名
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("SPECIMEN_ID_IN", OracleType.VarChar, 200);
            cmd.Parameters.Add("STATUS_IN", OracleType.Number);
            cmd.Parameters.Add("OPERATOR_IN", OracleType.VarChar, 20);
            cmd.Parameters.Add("OPERATOR_TIME_IN", OracleType.DateTime);
            cmd.Parameters.Add("LOT_IN", OracleType.VarChar, 20);
            cmd.Parameters.Add("deny_reason_in", OracleType.VarChar, 36);

            cmd.Parameters["SPECIMEN_ID_IN"].Value   = strTestApplyDetailID;
            cmd.Parameters["STATUS_IN"].Value        = 6;
            cmd.Parameters["OPERATOR_IN"].Value      = "操作员";
            cmd.Parameters["OPERATOR_TIME_IN"].Value = Convert.ToDateTime(dsGUID.Tables[0].Rows[0][0].ToString());
            cmd.Parameters["LOT_IN"].Value           = string.Empty;
            cmd.Parameters["deny_reason_in"].Value   = strInstrumentID;

            cmd.Parameters["SPECIMEN_ID_IN"].Direction   = ParameterDirection.Input;
            cmd.Parameters["STATUS_IN"].Direction        = ParameterDirection.Input;
            cmd.Parameters["OPERATOR_IN"].Direction      = ParameterDirection.Input;
            cmd.Parameters["OPERATOR_TIME_IN"].Direction = ParameterDirection.Input;
            cmd.Parameters["LOT_IN"].Direction           = ParameterDirection.Input;
            cmd.Parameters["deny_reason_in"].Direction   = ParameterDirection.Input;

            try
            {
                cmd.ExecuteNonQuery();//执行存储过程
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                writelog.Write(strDeviceName, "核收时出错!" + ex.Message, "log");
            }
            //init.DisConnectDB(init.con);
            //transaction = null;
            //cmd = null;
            //init = null;
        }
Esempio n. 3
0
        /// <summary>
        /// type 调用类型
        /// 0 - 初始化
        /// 1 - 连接
        /// 9 - 断开
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public string CallDll(string para)
        {
            writeLog = new Write_Log();
            dsHandle = new DataSetHandle();
            ds       = new DataSet();

            string strInstrumentID   = "";
            string strMicroPlateID   = "";
            string strSampleNO       = "";
            string strSampleID       = "";
            string strCallSource     = "";
            string strInstrumentKind = "";
            string strPara           = "";
            string strType           = "";
            string strReadBatch      = "";
            string strDeviceId       = "";

            strInstrumentID = "";
            strType         = "";
            strMicroPlateID = "";
            strSampleID     = "";
            strSampleNO     = "";
            strCallSource   = "";

            if (boolRun)
            {
                return(strError);
            }

            Dictionary <string, string> para_dic = new Dictionary <string, string>();

            string[] para_value = para.Split(';');
            foreach (string para_col in para_value)
            {
                if (string.IsNullOrEmpty(para_col))
                {
                    break;
                }
                string[] tmp = para_col.Split('=');
                para_dic.Add(tmp[0].ToUpper(), tmp[1]);
            }
            strPara = "";
            //仪器ID
            if (para.ToUpper().IndexOf("TEST_INSTRUMENT_ID=") >= 0)
            {
                strInstrumentID = para_dic["TEST_INSTRUMENT_ID"];
                strPara         = strPara + "TEST_INSTRUMENT_ID=" + strInstrumentID + ";";
            }
            //类型
            if (para.ToUpper().IndexOf("TYPE=") >= 0)
            {
                strType = para_dic["TYPE"];
                strPara = strPara + "TYPE=" + strType + ";";
            }


            //检验标本ID
            if (para.ToUpper().IndexOf("TEST_SAMPLE_ID=") >= 0)
            {
                strSampleID = para_dic["TEST_SAMPLE_ID"];
                strPara     = strPara + "TEST_SAMPLE_ID=" + strSampleID + ";";
            }
            //标本ID
            if (para.ToUpper().IndexOf("SAMPLE_NO=") >= 0)
            {
                strSampleNO = para_dic["SAMPLE_NO"];
                if (!string.IsNullOrEmpty(strSampleNO))
                {
                    strPara = strPara + "SAMPLE_NO=" + strSampleNO + ";";
                }
            }
            //调用来源
            if (para.ToUpper().IndexOf("CALL_SOURCE=") >= 0)
            {
                strCallSource = para_dic["CALL_SOURCE"];
                strPara       = strPara + "CALL_SOURCE=" + strCallSource + ";";
            }
            //单个读取
            if (para.ToUpper().IndexOf("READ_BATCH=") >= 0)
            {
                strReadBatch = para_dic["READ_BATCH"];
                strPara      = strPara + "READ_BATCH=" + strReadBatch + ";";
            }

            if (ConnectDB.con.State != ConnectionState.Open)
            {
                ConnectDB init = new ConnectDB();
                init.DBConnect();
            }
            //处理一台电脑解析多个数据
            for (int j = 0; j < strInstrumentID.Split(',').Length; j++)
            {
                strDeviceId = strInstrumentID.Split(',')[j];
                ds          = dsHandle.GetDataSet("通讯类型,名称", "检验仪器", "ID = '" + strDeviceId + "'");
                if (ds == null || ds.Tables[0].Rows.Count == 0)
                {
                    strError = "未找到Id[" + strDeviceId + "]的仪器";
                    writeLog.Write(strError, "log");
                    break;
                }
                strCommType   = ds.Tables[0].Rows[0]["通讯类型"].ToString();
                strDeviceName = ds.Tables[0].Rows[0]["名称"].ToString();

                //strCallSource = "1";
                //BH调用exe
                if (strCallSource == "1")
                {
                    int WINDOW_HANDLER = FindWindow(null, @"解析程序");
                    if (WINDOW_HANDLER == 0)
                    //if (WINDOW_HANDLER.Equals(IntPtr.Zero))
                    {
                        strError = "解析程序未运行!";
                        MessageBox.Show(strError, "导入数据", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        writeLog.Write(strDeviceName, strError, "log");
                        break;
                    }
                    else
                    {
                        byte[] sarr = System.Text.Encoding.Default.GetBytes(strPara);
                        int    len  = sarr.Length;

                        COPYDATASTRUCT cds;
                        cds.dwData = (IntPtr)1000;
                        cds.lpData = strPara;
                        cds.cbData = len + 1;
                        SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
                    }
                }
                else
                {
                    if (strCommType == "1")
                    {
                        #region  时运行
                        if (strType != "9")
                        {
                            if (!dictionary_initDll_COM.ContainsKey(strDeviceName))
                            {
                                Init_COM initDll_COM = new Init_COM();


                                if (string.IsNullOrEmpty(initDll_COM.strSampleID) && !string.IsNullOrEmpty(strSampleID))
                                {
                                    initDll_COM.strSampleID = strSampleID;
                                }
                                if (string.IsNullOrEmpty(initDll_COM.strInstrumentID) && !string.IsNullOrEmpty(strInstrumentID))
                                {
                                    initDll_COM.strInstrumentID = strInstrumentID.Split(',')[j];
                                }
                                dictionary_initDll_COM.Add(strDeviceName, initDll_COM);
                            }
                        }
                        if (strType == "0")
                        {
                            //initDll_COM.Start(strDeviceId);
                            foreach (Init_COM item in dictionary_initDll_COM.Values)
                            {
                                if (string.IsNullOrEmpty(item.status))
                                {
                                    item.Start(strDeviceId);
                                }
                            }
                        }
                        else if (strType == "9")
                        {
                            //initDll_COM.Stop();
                            foreach (Init_COM item in dictionary_initDll_COM.Values)
                            {
                                item.Stop();
                                strError = item.strError;
                            }
                            dictionary_initDll_COM.Clear();
                        }
                        #endregion
                    }
                    else if (strCommType == "2")
                    {
                        if (initDll_TCP == null)
                        {
                            initDll_TCP = new Init_TCP();
                            initDll_TCP.strInstrumentID = strInstrumentID.Split(',')[j];
                        }
                        if (strType == "0")
                        {
                            initDll_TCP.Init();
                        }
                        else if (strType == "9")
                        {
                            initDll_TCP.Stop();
                        }
                        strError = initDll_TCP.strError;
                    }
                    //xt 数据库类型支持多个同时应用
                    else if (strCommType == "3")
                    {
                        if (initDll_DB == null)
                        {
                            initDll_DB = new Init_DB();
                            initDll_DB.strInstrumentID = strInstrumentID.Split(',')[j];
                            initDll_DB.strTestNO       = strSampleNO;
                            initDll_DB.Init();

                            #region  时运行
                            //if (strType != "9")
                            //{
                            //    if (!dictionary_initDll_DB.ContainsKey(strDeviceName))
                            //    {
                            //        initDll_DB = new Init_DB();


                            //        if (string.IsNullOrEmpty(initDll_DB.strTestNO) && !string.IsNullOrEmpty(strSampleID))
                            //        {
                            //            initDll_DB.strTestNO = strSampleID;
                            //        }
                            //        if (string.IsNullOrEmpty(initDll_DB.strInstrumentID) && !string.IsNullOrEmpty(strInstrumentID))
                            //        {
                            //            initDll_DB.strInstrumentID = strInstrumentID.Split(',')[j];
                            //        }
                            //        dictionary_initDll_DB.Add(strDeviceName, initDll_DB);
                            //    }

                            //}
                            //if (strType == "0")
                            //{
                            //    //initDll_COM.Start(strDeviceId);
                            //    foreach (Init_DB item in dictionary_initDll_DB.Values)
                            //    {
                            //        if (string.IsNullOrEmpty(item.status))
                            //            item.Init(strDeviceId);
                            //    }

                            //}
                            //else if (strType == "9")
                            //{
                            //    //initDll_COM.Stop();
                            //    foreach (Init_DB item in dictionary_initDll_DB.Values)
                            //    {

                            //        item.Stop();
                            //        strError = item.strError;

                            //    }
                            //    dictionary_initDll_DB.Clear();
                            //}
                            #endregion
                        }
                        strError = initDll_DB.strError;
                    }
                    else if (strCommType == "4")
                    {
                        if (initDll_TXT == null)
                        {
                            initDll_TXT = new Init_TXT();
                        }
                        initDll_TXT.strInstrumentID = strInstrumentID.Split(',')[j];
                        initDll_TXT.bnReadBatch     = (strReadBatch == "1" ? true : false);
                        initDll_TXT.Start();
                        strError = initDll_TXT.strError;
                    }
                    else
                    {
                        strError = "未设置仪器的通讯类型!";
                    }
                    if (strType == "9")
                    {
                        if (ConnectDB.con.State == ConnectionState.Open)
                        {
                            ConnectDB init = new ConnectDB();
                            init.DisConnectDB(ConnectDB.con);
                        }
                    }
                }
                if (!String.IsNullOrEmpty(strError))
                {
                    writeLog.Write(strDeviceName, strError, "log");
                }
            }
            return(strError);
        }