public void updateIPQCDetails(RepairDetailRequest param)
        {
            DateTime           now   = SSGlobalConfig.Now;
            CV_QM_REPAIR_ORDER order = param.repairOrder;

            using (TransactionScope ts = new TransactionScope())
            {
                //明细
                foreach (CV_QM_REPAIR_IPQC_DETAIL detail in param.detailList)
                {
                    QM_REPAIR_IPQC_DETAIL tmp = new QM_REPAIR_IPQC_DETAIL()
                    {
                        PK = detail.PK,
                        QualityDecision = detail.QualityDecision
                    };
                    ipqc_detailbo.UpdateSome(tmp);

                    //string sql = "";
                    //if (detail.QualityDecision.Equals("OK"))
                    //{
                    //    //修改SN状态为prcs(2),并将LocPK改成包装
                    //    sql = string.Format(CultureInfo.InvariantCulture, ipqcSql2, 2,order.ReportLine, "TP06", detail.SN);
                    //}
                    //else
                    //{
                    //    //修改SN状态为qc(6)
                    //    sql = string.Format(CultureInfo.InvariantCulture, ipqcSql1, 6, detail.SN);
                    //}
                    //log.Info("updateIPQCDetails Sql : " + sql);
                    //bscbo.ExecuteNonQueryBySql(sql);

                    if (detail.QualityDecision.Equals("OK"))
                    {
                        //修改SN状态为prcs(2),并将LocPK改成包装
                        string sql = string.Format(CultureInfo.InvariantCulture, ipqcSql2, 2, order.ReportLine, "TP06", detail.SN);
                        log.Info("updateIPQCDetails Sql : " + sql);
                        alt_bscbo.ExecuteNonQueryBySql(sql);
                    }
                }

                QM_REPAIR_IPQC ipqc = new QM_REPAIR_IPQC()
                {
                    TGuid      = order.TGuid,
                    Status     = "关闭",
                    ModifiedBy = param.user,
                    ModifiedOn = now
                };
                //IPQC单状态
                ipqcbo.UpdateSome(ipqc);
                ts.Complete();
            }
        }
        public RepairOrderResponse getRepairBySN(CV_QM_REPAIR_ORDER param)
        {
            param.Type = 1;//离线维修
            RepairOrderResponse response = new RepairOrderResponse();
            //获得拼板的其余SN
            string    cmd_pcbSql = string.Format(CultureInfo.InvariantCulture, pcbSql, param.AbnormalitySN);
            DataTable pcbDt      = alt_bscbo.GetDataTableBySql(cmd_pcbSql);

            if (pcbDt == null || pcbDt.Rows.Count == 0)
            {
                //不是拼板 -- 按原有逻辑
                //判断SN是否已经关联IPQC
                string    cmd_detailSql = string.Format(CultureInfo.InvariantCulture, detailSql, param.AbnormalitySN);
                DataTable dt            = alt_bscbo.GetDataTableBySql(cmd_detailSql);
                if (dt == null || dt.Rows.Count == 0)
                {
                    IList <CV_QM_REPAIR_ORDER> list = cv_repair_orderbo.GetEntities(param);
                    if (list == null || list.Count == 0)
                    {
                        response.message = "序列号[" + param.AbnormalitySN + "]尚未报修";
                    }
                    else
                    {
                        //判断最新的报修单维修结果是否为OK
                        if (list[0].Result == null || !list[0].Result.Equals("OK"))
                        {
                            response.message = "序列号[" + param.AbnormalitySN + "]未维修OK";
                        }
                        else if (!string.IsNullOrEmpty(list[0].ReportWorkshop) && !list[0].ReportWorkshop.Equals("SMT"))
                        {
                            response.message = "序列号[" + param.AbnormalitySN + "]报修车间不是SMT";
                        }
                        else if (!string.IsNullOrEmpty(param.OrderID) && !param.OrderID.Equals(list[0].OrderID))
                        {
                            response.message = "序列号[" + param.AbnormalitySN + "]的工单[" + list[0].OrderID + "]与现有SN的工单不一致";
                        }
                        else
                        {
                            response.orderList = new List <CV_QM_REPAIR_ORDER>();
                            response.orderList.Add(list[0]);
                        }
                    }
                }
                else
                {
                    response.message = "序列号[" + param.AbnormalitySN + "]已经存在质量判定OK或者未质量判定的IPQC送检单";
                }
            }
            else
            {
                string         lotIDs    = "";//拼板   拼接查出来的SN   格式为:'M1801FGS','M1801FGT','M1801FGU','M1801FGV'
                IList <string> lotIdList = new List <string>();
                string         pcbID     = "";
                foreach (DataRow row in pcbDt.Rows)
                {
                    if (!string.IsNullOrEmpty(lotIDs))
                    {
                        lotIDs += ",";
                    }
                    else
                    {
                        pcbID = row["pcbID"].ToString();
                    }
                    lotIDs += "'" + row["LotID"] + "'";
                    lotIdList.Add(row["LotID"].ToString());
                }
                     
                //1.获得拼板对应的最新维修单
                string    cmd_repairSql = string.Format(CultureInfo.InvariantCulture, repairSql, lotIDs, param.Type);
                DataTable repairDt      = alt_bscbo.GetDataTableBySql(cmd_repairSql);
                List <CV_QM_REPAIR_ORDER>         list         = new List <CV_QM_REPAIR_ORDER>();
                ModelHandler <CV_QM_REPAIR_ORDER> modelHandler = new ModelHandler <CV_QM_REPAIR_ORDER>();
                list = modelHandler.FillModel(repairDt);

                if (list == null || list.Count == 0)
                {
                    response.message = "拼板PCB[" + param.AbnormalitySN + "]尚未报修";
                }
                else
                {
                    bool flag = true;
                    //2.判断维修单的维修结果是否OK
                    foreach (CV_QM_REPAIR_ORDER cvOrder in list)
                    {
                        if (!"OK".Equals(cvOrder.Result))
                        {
                            response.message = "拼板PCB[" + cvOrder.AbnormalitySN + "]未维修OK";
                            flag             = false;
                            break;
                        }
                        if (!"SMT".Equals(cvOrder.ReportWorkshop))
                        {
                            response.message = "拼板PCB[" + cvOrder.AbnormalitySN + "]报修车间不是SMT";
                            flag             = false;
                            break;
                        }

                        if (!string.IsNullOrEmpty(param.OrderID) && !param.OrderID.Equals(cvOrder.OrderID))
                        {
                            response.message = "拼板PCB[" + cvOrder.AbnormalitySN + "]的工单[" + cvOrder.OrderID + "]与现有SN的工单不一致";
                            flag             = false;
                            break;
                        }
                        if (lotIdList.Contains(cvOrder.AbnormalitySN))
                        {
                            lotIdList.Remove(cvOrder.AbnormalitySN);
                        }
                        cvOrder.Attribute10 = pcbID;//PCB拼板号
                    }

                    if (flag)
                    {
                        //3.判断拼板PCB是否已经关联IPQC
                        string    cmd_pcbDetailSql = string.Format(CultureInfo.InvariantCulture, pcbDetailSql, lotIDs);
                        DataTable pcbDetailDt      = alt_bscbo.GetDataTableBySql(cmd_pcbDetailSql);
                        if (pcbDetailDt == null || pcbDetailDt.Rows.Count == 0)
                        {
                            //4.没有维修单的---SN没坏
                            foreach (string lotId in lotIdList)
                            {
                                CV_QM_REPAIR_ORDER order = new CV_QM_REPAIR_ORDER()
                                {
                                    AbnormalitySN   = lotId,
                                    DefID           = list[0].DefID,
                                    DefDescript     = list[0].DefDescript,
                                    OrderID         = list[0].OrderID,
                                    ProductDecision = "OK",
                                    QualityDecision = "OK",
                                    Attribute10     = pcbID
                                };
                                list.Add(order);
                            }
                            list[0].Attribute09 = "edit";          //第一个有值
                            list[0].Attribute08 = "" + list.Count; //PCB拼板数
                            response.orderList  = list;
                        }
                        else
                        {
                            response.message = "拼板PCB[" + pcbDetailDt.Rows[0]["SN"] + "]已经存在质量判定OK或者未质量判定的IPQC送检单";
                        }
                    }
                }
            }
            return(response);
        }