Explorar o código

查询可看到上一工单

shim %!s(int64=8) %!d(string=hai) anos
pai
achega
55c0e13b55
Modificáronse 1 ficheiros con 105 adicións e 62 borrados
  1. 105 62
      UAS-MES/FunctionCode/Query/Query_ExeProgress.cs

+ 105 - 62
UAS-MES/FunctionCode/Query/Query_ExeProgress.cs

@@ -31,7 +31,7 @@ namespace UAS_MES.Query
 
         DataTable dt;
 
-        string ms_id;//记录ms_id
+        DataTable ms_id;//记录ms_id
 
         DataTable ListA;//记录数据的当前序列号和之前序列号
 
@@ -60,9 +60,21 @@ namespace UAS_MES.Query
         {
             if (e.KeyCode == Keys.Enter)
             {
-                ms_id = dh.getFieldDataByCondition("makeserial", "max(ms_id) ms_id", "ms_sncode='" + sn_code.Text + "' or ms_beforesn='"+sn_code.Text+"'").ToString();
-                ListA = (DataTable)dh.ExecuteSql("select ms_beforesn,ms_sncode from makeserial where ms_id='"+ms_id+"'","select");
-                dt = (DataTable)dh.ExecuteSql("select ms_status,ms_nextstepcode,ms_paststep,ms_stepcode,NVL(ms_ifrework, 0) ms_ifrework,NVL(ms_reworkstatus, 0) ms_reworkstatus from makeserial where ms_id='" + ms_id + "'", "select");
+                ms_id = (DataTable)dh.ExecuteSql("select ms_id from makeserial where ms_sncode='" + sn_code.Text + "' or ms_beforesn='"+sn_code.Text+"' order by ms_id","select");
+                if (ms_id.Rows.Count==0)
+                {
+                    //无值则提示
+                    MessageBox.Show("序列号" + sn_code.Text + "不存在");
+                    return;
+                }
+                StringBuilder ms_ids = new StringBuilder();//存所有的ms_id
+                int idCount = ms_id.Rows.Count;
+                for (int i=0;i<idCount;i++)
+                {
+                    ms_ids.Append("'"+ms_id.Rows[i]["ms_id"].ToString()+"',");
+                }
+                ListA = (DataTable)dh.ExecuteSql("select ms_beforesn,ms_sncode,ms_makecode from makeserial where ms_id in ("+ms_ids.ToString().Substring(0,ms_ids.ToString().Length-1)+")","select");
+                dt = (DataTable)dh.ExecuteSql("select ms_status,ms_nextstepcode,ms_paststep,ms_stepcode,NVL(ms_ifrework, 0) ms_ifrework,NVL(ms_reworkstatus, 0) ms_reworkstatus from makeserial where ms_id in (" + ms_ids.ToString().Substring(0, ms_ids.ToString().Length - 1) + ") order by ms_id", "select");
                 if (dt.Rows.Count > 0)
                 {
                     if (Step != null && Step.Count > 0)
@@ -71,11 +83,11 @@ namespace UAS_MES.Query
                         SerialPanel.Controls.Clear();
                         PaintColor.Clear();
                     }
-                    string ifRework = dt.Rows[0]["ms_ifrework"].ToString();
+                    string ifRework = dt.Rows[idCount-1]["ms_ifrework"].ToString();
                     //执行过的步骤
-                    PastStep = dt.Rows[0]["ms_paststep"].ToString();
+                    PastStep = dt.Rows[idCount - 1]["ms_paststep"].ToString();
                     //下一步骤
-                    nextStepCode = dt.Rows[0]["ms_nextstepcode"].ToString();
+                    nextStepCode = dt.Rows[idCount - 1]["ms_nextstepcode"].ToString();
                     //如果为不良的时候
                     string BadStep = "";
                     string RejectStep = "";
@@ -84,41 +96,49 @@ namespace UAS_MES.Query
                     if (ifRework != "0")
                     {
                         //是返工的
-                        if (dt.Rows[0]["ms_reworkstatus"].ToString() == "3")
+                        if (dt.Rows[idCount - 1]["ms_reworkstatus"].ToString() == "3")
                         {
-                            BadStep = dt.Rows[0]["ms_stepcode"].ToString();
+                            BadStep = dt.Rows[idCount - 1]["ms_stepcode"].ToString();
                         }
-                        else if (dt.Rows[0]["ms_reworkstatus"].ToString() == "4")
+                        else if (dt.Rows[idCount - 1]["ms_reworkstatus"].ToString() == "4")
                         {
-                            RejectStep = dt.Rows[0]["ms_stepcode"].ToString();
+                            RejectStep = dt.Rows[idCount - 1]["ms_stepcode"].ToString();
                         }
                     }
                     else
                     {
                         //不是返工的
-                        if (dt.Rows[0]["ms_status"].ToString() == "3")
+                        if (dt.Rows[idCount - 1]["ms_status"].ToString() == "3")
                         {
-                            BadStep = dt.Rows[0]["ms_stepcode"].ToString();
+                            BadStep = dt.Rows[idCount - 1]["ms_stepcode"].ToString();
                         }
-                        else if (dt.Rows[0]["ms_status"].ToString() == "4")
+                        else if (dt.Rows[idCount - 1]["ms_status"].ToString() == "4")
                         {
-                            RejectStep = dt.Rows[0]["ms_stepcode"].ToString();
+                            RejectStep = dt.Rows[idCount - 1]["ms_stepcode"].ToString();
                         }
                     }
-                    currentStep = dt.Rows[0]["ms_stepcode"].ToString();
-                    //添加开始节点绿色,除了返工
-                    if (BadStep==""&& ((dt.Rows[0]["ms_status"].ToString() == "3"&&ifRework=="0")||(dt.Rows[0]["ms_reworkstatus"].ToString()=="3"&&ifRework=="-1")))
+                    currentStep = dt.Rows[idCount - 1]["ms_stepcode"].ToString();
+                    //如果只有一个
+                    if (idCount == 1)
                     {
-                        PaintColor.Add(Brushes.Red);
+                        //添加开始节点绿色,除了返工单
+                        if (BadStep == "" && ((dt.Rows[idCount - 1]["ms_status"].ToString() == "3" && ifRework == "0") || (dt.Rows[idCount - 1]["ms_reworkstatus"].ToString() == "3" && ifRework == "-1")))
+                        {
+                            PaintColor.Add(Brushes.Red);
+                        }
+                        else
+                        {
+                            PaintColor.Add(Brushes.Green);
+                        }
                     }
-                    else
+                    else//有至少两个工单,之前的工单肯定是已经完工的
                     {
                         PaintColor.Add(Brushes.Green);
                     }
                     //查询执行过的步骤
                     sql.Clear();
-                    sql.Append("select CD_DETNO,CD_STEPCODE,ms_makecode from craft left join craftdetail on cd_crid = cr_id  left join makeserial ");
-                    sql.Append("on ms_craftcode=cr_code and ms_prodcode=cr_prodcode where ms_id='" + ms_id + "' order by cd_detno");
+                    sql.Append("select CD_DETNO,CD_STEPCODE,ms_makecode,ms_id from craft left join craftdetail on cd_crid = cr_id  left join makeserial ");
+                    sql.Append("on ms_craftcode=cr_code and ms_prodcode=cr_prodcode where ms_id in (" + ms_ids.ToString().Substring(0, ms_ids.ToString().Length - 1) + ") order by ms_id,cd_detno");
                     dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
                     Step = new Dictionary<int, string>();
                     for (int i = 0; i < dt.Rows.Count + 2; i++)
@@ -135,70 +155,83 @@ namespace UAS_MES.Query
                     int index = 0;
                     for (int i = 0; i < dt.Rows.Count; i++)
                     {
-                        if (nextStepCode == dt.Rows[i]["CD_STEPCODE"].ToString())
+                        //正在生产的途程才算
+                        if (dt.Rows[i]["ms_id"].ToString()==ms_id.Rows[ms_id.Rows.Count-1]["ms_id"].ToString())
                         {
-                            index = i;
+                            if (nextStepCode == dt.Rows[i]["CD_STEPCODE"].ToString())
+                            {
+                                index = i;
+                            }
                         }
                     }
                     for (int i = 0; i < dt.Rows.Count; i++)
                     {
-                        ////下一步不在途程中,不良或者报废或者完工
-                        if (nextStepCode == ""||nextStepCode==" ")
+                        //只考虑正在生产的途程,之前工单的途程工序必定为绿色完工
+                        if (dt.Rows[i]["ms_id"].ToString() == ms_id.Rows[ms_id.Rows.Count - 1]["ms_id"].ToString())
                         {
-                            //返工单
-                            if (currentStep=="")
-                            {
-                                passed = false;
-                            }
-                            //找到不良步骤
-                            if (BadStep == dt.Rows[i]["CD_STEPCODE"].ToString())
-                            {
-                                PaintColor.Add(Brushes.Red);
-                                //是不良品,后面就不执行
-                                passed = false;
-                            }
-                            //找到报废步骤
-                            else if (PastStep.Contains(dt.Rows[i]["CD_STEPCODE"].ToString() + "," + RejectStep)&&RejectStep!="")
+                            ////下一步不在途程中,不良或者报废或者完工
+                            if (nextStepCode == "" || nextStepCode == " ")
                             {
-                                PaintColor.Add(Brushes.Black);
-                                //是报废品,后面就不执行
-                                passed = false;
+                                //返工单
+                                if (currentStep == "")
+                                {
+                                    passed = false;
+                                }
+                                //找到不良步骤
+                                if (BadStep == dt.Rows[i]["CD_STEPCODE"].ToString())
+                                {
+                                    PaintColor.Add(Brushes.Red);
+                                    //是不良品,后面就不执行
+                                    passed = false;
+                                }
+                                //找到报废步骤
+                                else if (PastStep.Contains(dt.Rows[i]["CD_STEPCODE"].ToString() + "," + RejectStep) && RejectStep != "")
+                                {
+                                    PaintColor.Add(Brushes.Black);
+                                    //是报废品,后面就不执行
+                                    passed = false;
+                                }
+                                else
+                                {
+                                    //通过加绿色
+                                    if (passed)
+                                    {
+                                        PaintColor.Add(Brushes.Green);
+                                    }
+                                    //不通过加白色
+                                    else
+                                    {
+                                        PaintColor.Add(Brushes.White);
+                                    }
+                                }
                             }
+                            ////序列号下一步不为空
                             else
                             {
-                                //通过加绿色
-                                if (passed)
+                                /////SN下一步是否在途程中,是则标记
+                                //找到下一步
+                                if (i < index)
                                 {
+                                    //已执行
                                     PaintColor.Add(Brushes.Green);
                                 }
-                                //不通过加白色
                                 else
                                 {
+                                    //未执行
                                     PaintColor.Add(Brushes.White);
                                 }
                             }
                         }
-                        ////序列号下一步不为空
                         else
                         {
-                            /////SN下一步是否在途程中,是则标记
-                            //找到下一步
-                            if (i < index)
-                            {
-                                //已执行
-                                PaintColor.Add(Brushes.Green);
-                            }
-                            else
-                            {
-                                //未执行
-                                PaintColor.Add(Brushes.White);
-                            }
+                            //就是之前生产的途程,为绿色
+                            PaintColor.Add(Brushes.Green);
                         }
                     }
                     if (ifRework != "0")
                     {
                         //完工添加绿色,未完工添加白色
-                        if (dh.CheckExist("Makeserial", "ms_id='" + ms_id + "' and ms_reworkstatus='2'"))
+                        if (dh.CheckExist("Makeserial", "ms_id='" + ms_id.Rows[ms_id.Rows.Count - 1]["ms_id"] + "' and ms_reworkstatus='2'"))
                             PaintColor.Add(Brushes.Green);
                         else
                             PaintColor.Add(Brushes.White);
@@ -206,17 +239,27 @@ namespace UAS_MES.Query
                     else
                     {
                         //完工添加绿色,未完工添加白色
-                        if (dh.CheckExist("Makeserial", "ms_id='" + ms_id + "' and ms_status='2'"))
+                        if (dh.CheckExist("Makeserial", "ms_id='" + ms_id.Rows[ms_id.Rows.Count - 1]["ms_id"] + "' and ms_status='2'"))
                             PaintColor.Add(Brushes.Green);
                         else
                             PaintColor.Add(Brushes.White);
                     }
                     Refresh();
                     SerialPanel.Refresh();
+                    StringBuilder mp_sncodes = new StringBuilder();
+                    StringBuilder makecodes = new StringBuilder();
+                    //拼接序列号的和工单号的
+                    for (int i=0;i<ListA.Rows.Count;i++)
+                    {
+                        //sql  mp_sncode
+                        mp_sncodes.Append("'" + ListA.Rows[i]["ms_sncode"].ToString() + "',"+(ListA.Rows[i]["ms_beforesn"].ToString()==""?"":(" '"+ListA.Rows[i]["ms_beforesn"].ToString()+"',")));
+                        //sql ma_code
+                        makecodes.Append("'"+ListA.Rows[i]["ms_makecode"].ToString()+"',");
+                    }
                     sql.Clear();
                     sql.Append("select mp_makecode,ma_prodcode,sc_linecode,ma_craftcode,mp_sourcecode,mp_sncode,");
                     sql.Append("mp_indate,mp_inman,em_name from makeprocess left join make on mp_makecode=ma_code left join employee on mp_inman = em_code left join source on ");
-                    sql.Append("mp_sourcecode=sc_code where mp_sncode in ('" + ListA.Rows[0]["ms_sncode"].ToString() + "'"+(ListA.Rows[0]["ms_beforesn"].ToString()==""?"":(",'"+ListA.Rows[0]["ms_beforesn"].ToString()+"'")) +") and ma_code='" + dt.Rows[0]["ms_makecode"].ToString() + "' order by mp_indate");
+                    sql.Append("mp_sourcecode=sc_code where mp_sncode in ("+mp_sncodes.ToString().Substring(0,mp_sncodes.ToString().Length-1)+") and ma_code in (" + makecodes.ToString().Substring(0,makecodes.ToString().Length-1)+ ") order by mp_indate");
                     dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
                     BaseUtil.FillDgvWithDataTable(CraftInfDgv, dt);
                 }