yl
2024-03-29 9c634fd767aec36ef97c3a814bf7a29c67d20ee1
VueWebApi/Tools/ScanStartReport.cs
@@ -17,10 +17,12 @@
        /// <summary>
        /// 扫码信息为工单+工序条码
        /// </summary>
        /// <param name="stu_torgcode">所属组织编码</param>
        /// <param name="SelectType">操作类型(开工:START、报工:REPORT)</param>
        /// <param name="ordercode">工单编号</param>
        /// <param name="stepcode">工序编码</param>
        /// <returns></returns>
        public static ToMessage ZZEncodingSeach(string ordercode, string stepcode)
        public static ToMessage ZZEncodingSeach(string stu_torgcode, string SelectType, string ordercode, string stepcode)
        {
            var sql = "";
            string flwtype = ""; //工序属性
@@ -32,19 +34,53 @@
            var dynamicParams = new DynamicParameters();
            try
            {
                //判断当前工单是否关闭
                sql = @"select *   from TK_Wrk_Man where wo_code=@ordercode and wkshp_code=@stu_torgcode and status='CLOSED'";
                dynamicParams.Add("@ordercode", ordercode);
                dynamicParams.Add("@stu_torgcode", stu_torgcode);
                var da0 = DapperHelper.selectdata(sql, dynamicParams);
                if (da0.Rows.Count > 0)
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "当前工单已关闭,不允许开报工操作!";
                    mes.data = null;
                    return mes;
                }
                //0.判断当前工单所属车间是否为当前登录人员车间
                sql = @"select *   from TK_Wrk_Man where wo_code=@ordercode and wkshp_code=@stu_torgcode";
                dynamicParams.Add("@ordercode", ordercode);
                dynamicParams.Add("@stu_torgcode", stu_torgcode);
                var da1 = DapperHelper.selectdata(sql, dynamicParams);
                if (da1.Rows.Count <= 0)
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "不是本车间生产任务,不允许操作!";
                    mes.data = null;
                    return mes;
                }
                //1.根据工单+工序查找当前工序是否首道工序
                sql = @"select A.wo_code,P.partcode,P.partname,P.partspec, T.stepcode,T.stepname,A.seq,T.flwtype,T.descr,A.status,A.plan_qty,A.isbott,A.isend
                sql = @"select A.wo_code,P.partcode,P.partname,P.partspec, T.stepcode,T.stepname,A.seq,T.flwtype,T.descr,A.status,A.plan_qty,isnull(A.start_qty,0) as start_qty,A.isbott,A.isend,L.org_code,L.org_name,
                        M.m_po,W.saleOrderCode
                        from TK_Wrk_Step A
                        left join  TStep T on A.step_code=T.stepcode
                        left join  TK_Wrk_Man M on A.wo_code=M.wo_code
                        left join TKimp_Ewo W on M.m_po=W.wo and M.materiel_code=W.materiel_code and M.sourceid=W.id
                        left join  TMateriel_Info P on M.materiel_code=P.partcode
                        left join  TOrganization L on M.wkshp_code=L.org_code
                        where A.wo_code=@ordercode and A.step_code=@stepcode";
                dynamicParams.Add("@ordercode", ordercode);
                dynamicParams.Add("@stepcode", stepcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
                {
                    rt.wkshopcode = data.Rows[0]["org_code"].ToString(); //车间编码
                    rt.wkshopname = data.Rows[0]["org_name"].ToString(); //车间名称
                    rt.saleOrderCode = data.Rows[0]["saleOrderCode"].ToString();//销售订单号
                    rt.m_po = data.Rows[0]["m_po"].ToString();//订单号
                    rt.wo_code = data.Rows[0]["WO_CODE"].ToString(); //工单号
                    rt.partnumber = data.Rows[0]["PARTCODE"].ToString(); //产品编码
                    rt.partname = data.Rows[0]["PARTNAME"].ToString(); //产品名称
@@ -85,340 +121,667 @@
                    mes.data = null;
                    return mes;
                }
                switch (flwtype)
                switch (SelectType)
                {
                    case "Z":  //自制工序
                        if (isbott == "Y")  //首道工序
                    case "START": //开工
                        switch (flwtype) //工序属性(自制、外协)
                        {
                            //1.首道工序时,判断是否有开工记录
                            sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='S'";
                            dynamicParams.Add("@ordercode", ordercode);
                            dynamicParams.Add("@stepcode", stepcode);
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data0.Rows.Count > 0)  //有开工记录
                            {
                                //首道工序时,判断是否有报工记录
                                sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                dynamicParams.Add("@ordercode", ordercode);
                                dynamicParams.Add("@stepcode", stepcode);
                                var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                if (data1.Rows.Count > 0)
                            case "Z":  //自制工序
                                if (isbott == "Y")  //首道工序
                                {
                                    decimal good_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //报工总数量
                                    decimal ng_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //不良数量
                                    decimal bad_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //报废数量
                                    decimal kbqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - (good_qty + ng_qty+bad_qty); //剩余可报工数量=任务数量-(报工数量+不良数量+报废数量)
                                    if (kbqty <= 0)//无可报工数量
                                    //1.首道工序时,判断是否有开工记录
                                    sql = @"select *   from TK_Wrk_Record R
                                    left join TEqpInfo E on R.eqp_code=E.code
                                    where R.wo_code=@ordercode and R.step_code=@stepcode  and R.style='S'";
                                    dynamicParams.Add("@ordercode", ordercode);
                                    dynamicParams.Add("@stepcode", stepcode);
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data0.Rows.Count > 0)  //有开工记录
                                    {
                                        mes.code = "300";
                                        mes.count = 0;
                                        mes.Message = "当前工序无可报工数量!";
                                        mes.data = null;
                                        return mes;
                                    }
                                    else
                                    {
                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());            //任务数量
                                        rt.startqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());           //开工数量=任务数量
                                        rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - good_qty- ng_qty-bad_qty;  //未报数量=任务数量-已报数量-不良数量-报废数量
                                        rt.reportqty = good_qty + ng_qty+bad_qty;             //已报数量=报工数量+不良数量+报废数量
                                        if (decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - decimal.Parse(data0.Rows[0]["START_QTY"].ToString()) == 0)
                                        {
                                            mes.code = "300";
                                            mes.count = 0;
                                            mes.Message = "当前工单工序任务无可开工数量!";
                                            mes.data = null;
                                            break;
                                        }
                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                        //开工数量=任务数量-已开工总数量
                                        rt.startqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - decimal.Parse(data0.Rows[0]["START_QTY"].ToString());
                                        //未开数量=任务数量-已开工总数量
                                        rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - decimal.Parse(data0.Rows[0]["START_QTY"].ToString());
                                        //已开数量
                                        rt.reportqty = decimal.Parse(data0.Rows[0]["START_QTY"].ToString());
                                        mes.code = "200";
                                        mes.count = 1;
                                        mes.Message = "弹窗报工界面!";
                                        mes.data = rt;
                                    }
                                    else
                                    {
                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                        rt.startqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //开工数量
                                        rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //未报数量
                                        rt.reportqty = 0;                                                    //已报数量
                                        mes.code = "200";
                                        mes.count = 0;
                                        mes.Message = "弹窗开工界面!";
                                        mes.data = rt;
                                    }
                                }
                                else
                                else   //非首道工序
                                {
                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                    rt.startqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //开工数量
                                    rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //未报数量
                                    rt.reportqty = 0;                                                    //已报数量
                                    mes.code = "200";
                                    mes.count = 1;
                                    mes.Message = "弹窗报工界面!";
                                    mes.data = rt;
                                }
                            }
                            else
                            {
                                rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                rt.startqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //开工数量
                                rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //未报数量
                                rt.reportqty = 0;                                                    //已报数量
                                mes.code = "200";
                                mes.count = 0;
                                mes.Message = "弹窗开工界面!";
                                mes.data = rt;
                            }
                        }
                        else   //非首道工序
                        {
                            //查找当前工序上到工序(自制或者外协)
                            sql = @"select A.step_code,S.stepname,S.flwtype  from TFlw_Rtdt A
                                    //查找当前工序上到工序(自制或者外协)
                                    sql = @"select A.step_code,S.stepname,S.flwtype  from TFlw_Rtdt A
                                               left join TK_Wrk_Man M on A.rout_code=M.route_code
                                               left join TStep S on A.step_code=S.stepcode
                                               where M.wo_code=@wocode  and A.seq=@seq-1";
                            dynamicParams.Add("@wocode", data.Rows[0]["WO_CODE"].ToString());
                            dynamicParams.Add("@seq", decimal.Parse(data.Rows[0]["SEQ"].ToString()));
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data0.Rows.Count > 0)
                            {
                                //1.非首道工序时,判断本道是否有开工记录
                                sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                dynamicParams.Add("@ordercode", ordercode);
                                dynamicParams.Add("@stepcode", stepcode);
                                var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                if (data1.Rows.Count > 0)//本道有开工记录
                                {
                                    //非首道工序时,判断本道是否有报工记录
                                    sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                    dynamicParams.Add("@ordercode", ordercode);
                                    dynamicParams.Add("@stepcode", stepcode);
                                    var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data2.Rows.Count > 0) //有报工记录
                                    dynamicParams.Add("@wocode", data.Rows[0]["WO_CODE"].ToString());
                                    dynamicParams.Add("@seq", decimal.Parse(data.Rows[0]["SEQ"].ToString()));
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data0.Rows.Count > 0)
                                    {
                                        if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //自制工序
                                        //1.非首道工序时,判断本道是否有开工记录
                                        sql = @"select *   from TK_Wrk_Record R
                                        left join TEqpInfo E on R.eqp_code=E.code
                                        where R.wo_code=@ordercode and R.step_code=@stepcode   and R.style='S'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", stepcode);
                                        var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data1.Rows.Count > 0)//本道有开工记录
                                        {
                                            //查找上到工序报工记录
                                            //非首道工序时,判断本道是否有报工记录
                                            sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                            dynamicParams.Add("@ordercode", ordercode);
                                            dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                            var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                            if (data3.Rows.Count > 0) //上道有报工
                                            dynamicParams.Add("@stepcode", stepcode);
                                            var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                            if (data2.Rows.Count > 0) //有报工记录
                                            {
                                                decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //上道报工总数量
                                                decimal good_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //本道不良总数量
                                                decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道总报废数量
                                                decimal sybqty = sgood_qty - good_qty - ng_qty-bad_qty;//本道剩余可报数量=上道报工总数量-本道报工总数量-本道不良总数量-本道报废总数
                                                if (sybqty <= 0)
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //判断上道工序属性:自制工序
                                                {
                                                    mes.code = "300";
                                                    //查找上到工序报工记录
                                                    sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有报工
                                                    {
                                                        decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //上道报工总合格数量
                                                        decimal bstartgood_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        decimal bgood_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总合格数量
                                                        decimal bng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //本道报工总不良数量
                                                        decimal bbad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道报工总报废数量
                                                        //本道工序可开工数量=上道工序报工总数-本道工序开工总数
                                                        if (sgood_qty - bstartgood_qty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工单工序任务暂无可开工数量!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                        rt.startqty = sgood_qty - bstartgood_qty;//开工数量=上道工序报工总数-本道工序开工总数
                                                        rt.noreportqty = sgood_qty - bstartgood_qty; //未开数量=上道工序报工总数-本道工序开工总数
                                                        rt.reportqty = bstartgood_qty;//已开数量=本道工序开工总数
                                                        mes.code = "200";
                                                        mes.count = 0;
                                                        mes.Message = "弹窗开工界面!";
                                                        mes.data = rt;
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开工!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //判断上道工序属性:委外工序
                                                {
                                                    //查找上到工序收料记录
                                                    sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有收料
                                                    {
                                                        decimal sqty = data3.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();  //上道收料数量
                                                        decimal bstartqty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        decimal bgood_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                        decimal bng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //本道不良总数量
                                                        decimal bbad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道总报废数量
                                                        if (sqty - bstartqty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工单工序任务无可开工数量!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                        //开工数量=上道工序收料总数-本道工序开工总数
                                                        rt.startqty = sqty - bstartqty;
                                                        //未开数量=上道工序收料总数-本道工序开工总数
                                                        rt.noreportqty = sqty - bstartqty;
                                                        //已开数量=本道工序开工总数
                                                        rt.reportqty = bstartqty;
                                                        mes.code = "200";
                                                        mes.count = 0;
                                                        mes.Message = "弹窗开工界面!";
                                                        mes.data = rt;
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开工,请前往外协操作页执行!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                            }
                                            else  //本道无报工记录
                                            {
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //判断上道工序属性:自制工序
                                                {
                                                    //查找上到工序报工记录
                                                    sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有报工
                                                    {
                                                        decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //上道报工总数量
                                                        decimal bstart_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        //上道报工总数-本道开工总数
                                                        if (sgood_qty- bstart_qty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工单工序任务暂无可开工数量!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                        rt.startqty = sgood_qty - bstart_qty;//开工数量=上道工序报工总数-本道工序开工总数
                                                        rt.noreportqty = sgood_qty - bstart_qty; //未开数量=上道工序报工总数-本道工序开工总数
                                                        rt.reportqty = bstart_qty;//已开数量=本道工序开工总数
                                                        mes.code = "200";
                                                        mes.count = 0;
                                                        mes.Message = "弹窗开工界面!";
                                                        mes.data = rt;
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开工!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //委外工序
                                                {
                                                    //查找上到工序收料记录
                                                    sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有收料
                                                    {
                                                        decimal sqty = data3.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();//上道收料数量
                                                        decimal bstart_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        //上道收料总数-本道开工总数
                                                        if (sqty - bstart_qty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工单工序任务暂无可开工数量!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                        rt.startqty = sqty - bstart_qty;//开工数量=上道收料总数-本道开工总数
                                                        rt.noreportqty = sqty - bstart_qty; //未开数量=上道收料总数-本道开工总数
                                                        rt.reportqty = bstart_qty;//已开数量=本道开工总数
                                                        mes.code = "200";
                                                        mes.count = 0;
                                                        mes.Message = "弹窗开工界面!";
                                                        mes.data = rt;
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                            }
                                        }
                                        else //无开工记录
                                        {
                                            if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //当前工序上道自制工序
                                            {
                                                //查找上到工序报工记录
                                                sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                                dynamicParams.Add("@ordercode", ordercode);
                                                dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                                if (data2.Rows.Count > 0) //上到工序有报工
                                                {
                                                    decimal good_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();//上道工序报工总合格数量
                                                    if (good_qty == null || good_qty == 0)
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格产出为0,本道不允许开工!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                    rt.startqty = good_qty;                               //开工数量=(上一道的报工总数量)
                                                    rt.noreportqty = good_qty;                            //未开数量=(上一道的报工总数量)
                                                    rt.reportqty = 0;                                     //已开数量
                                                    mes.code = "200";
                                                    mes.count = 0;
                                                    mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!";
                                                    mes.data = null;
                                                    return mes;
                                                    mes.Message = "弹窗开工界面!";
                                                    mes.data = rt;
                                                }
                                                else
                                                {
                                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                    rt.startqty = sybqty;                                                //开工数量=本道剩余可报数量
                                                    rt.noreportqty = sybqty;                                             //未报数量=本道剩余可报数量
                                                    rt.reportqty = good_qty + ng_qty+bad_qty;                            //已报数量=本道报工总数量+本道报工总不良+本道报废总数
                                                    mes.code = "200";
                                                    mes.count = 1;
                                                    mes.Message = "弹窗报工界面!";
                                                    mes.data = rt;
                                                }
                                            }
                                            else
                                            {
                                                mes.code = "300";
                                                mes.count = 0;
                                                mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开报工!";
                                                mes.data = null;
                                                return mes;
                                            }
                                        }
                                        if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //委外工序
                                        {
                                            //查找上到工序收料记录
                                            sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                            dynamicParams.Add("@ordercode", ordercode);
                                            dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                            var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                            if (data3.Rows.Count > 0) //上道有收料
                                            {
                                                decimal sqty = data3.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();  //上道收料数量
                                                decimal good_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //本道不良总数量
                                                decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道总报废数量
                                                decimal sybqty = sqty - good_qty - ng_qty-bad_qty;//本道剩余可报数量=上道收料总数量-本道报工总数量-本道不良总数量-本道总报废数
                                                if (sybqty <= 0)
                                                {
                                                    mes.code = "300";
                                                    mes.count = 0;
                                                    mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!";
                                                    mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开工!";
                                                    mes.data = null;
                                                    return mes;
                                                }
                                                else
                                            }
                                            if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //委外工序
                                            {
                                                //查找上道工序外协收料记录
                                                sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                                dynamicParams.Add("@ordercode", ordercode);
                                                dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                                if (data2.Rows.Count > 0) //上道工序有收料
                                                {
                                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                    rt.startqty = sybqty;                                                //开工数量=本道剩余可报数量
                                                    rt.noreportqty = sybqty;                                             //未报数量=本道剩余可报数量
                                                    rt.reportqty = good_qty + ng_qty+bad_qty;                            //已报数量=本道报工总数量+本道报工总不良+本道总报废数
                                                    decimal sqty = data2.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();//收料数量
                                                    decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();// 不良数量
                                                    decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();// 报废数量
                                                    if (sqty == null || sqty == 0)
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格收料为0,本道不允许开报工!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                    rt.startqty = sqty;                                                  //开工数量=(上一道的收料数量)
                                                    rt.noreportqty = sqty;                                               //未开数量=(上一道的收料数量)
                                                    rt.reportqty = 0;                                                    //已开数量
                                                    mes.code = "200";
                                                    mes.count = 1;
                                                    mes.Message = "弹窗报工界面!";
                                                    mes.count = 0;
                                                    mes.Message = "弹窗开工界面!";
                                                    mes.data = rt;
                                                }
                                            }
                                            else
                                            {
                                                mes.code = "300";
                                                mes.count = 0;
                                                mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                                mes.data = null;
                                                return mes;
                                                else
                                                {
                                                    mes.code = "300";
                                                    mes.count = 0;
                                                    mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                                    mes.data = null;
                                                    return mes;
                                                }
                                            }
                                        }
                                    }
                                    else  //本道无报工记录
                                    else
                                    {
                                        if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //自制工序
                                        {
                                            //查找上到工序报工记录
                                            sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                            dynamicParams.Add("@ordercode", ordercode);
                                            dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                            var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                            if (data3.Rows.Count > 0) //上道有报工
                                            {
                                                decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                decimal sybqty = sgood_qty;                                      //本道剩余可报数量=上道报工数量
                                                rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                rt.startqty = sybqty;                                                //开工数量=本道剩余可报数量
                                                rt.noreportqty = sybqty;                                             //未报数量=本道剩余可报数量
                                                rt.reportqty = 0;                                                    //已报数量
                                                mes.code = "200";
                                                mes.count = 1;
                                                mes.Message = "弹窗报工界面!";
                                                mes.data = rt;
                                            }
                                            else
                                            {
                                                mes.code = "300";
                                                mes.count = 0;
                                                mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开报工!";
                                                mes.data = null;
                                                return mes;
                                            }
                                        }
                                        if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //委外工序
                                        {
                                            //查找上到工序收料记录
                                            sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                            dynamicParams.Add("@ordercode", ordercode);
                                            dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                            var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                            if (data3.Rows.Count > 0) //上道有收料
                                            {
                                                decimal sqty = data3.AsEnumerable().Select(d =>d.Field<decimal>("SQTY")).Sum();//上道收料数量
                                                decimal sybqty = sqty;                   //本道剩余可收数量=上道收料数量
                                                rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                rt.startqty = sybqty;                                                //开工数量=本道剩余可收数量
                                                rt.noreportqty = sybqty;                                             //未报数量=本道剩余可收数量
                                                rt.reportqty = 0;                                                    //已报数量
                                                mes.code = "200";
                                                mes.count = 1;
                                                mes.Message = "弹窗报工界面!";
                                                mes.data = rt;
                                            }
                                            else
                                            {
                                                mes.code = "300";
                                                mes.count = 0;
                                                mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                                mes.data = null;
                                                return mes;
                                            }
                                        }
                                        mes.code = "300";
                                        mes.count = 0;
                                        mes.Message = "未找到当前工序的上道工序信息,请联系管理员核实!";
                                        mes.data = null;
                                        return mes;
                                    }
                                }
                                else //无开工记录
                                {
                                    if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //自制工序
                                    {
                                        //查找上到工序报工记录
                                        sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                        var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data2.Rows.Count > 0) //上到工序有报工
                                        {
                                            string good_qty = data2.Rows[0]["GOOD_QTY"].ToString();//报工数量
                                            string ng_qty = data2.Rows[0]["NG_QTY"].ToString();// 不良数量
                                            string bad_qty = data2.Rows[0]["BAD_QTY"].ToString();// 报废数量
                                            rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                            rt.startqty = decimal.Parse(good_qty);                               //开工数量=(上一道的报工数量)
                                            rt.noreportqty = decimal.Parse(good_qty);                            //未报数量=(上一道的报工数量)
                                            rt.reportqty = 0;                                                    //已报数量
                                            mes.code = "200";
                                            mes.count = 0;
                                            mes.Message = "弹窗开工界面!";
                                            mes.data = rt;
                                        }
                                        else
                                        {
                                            mes.code = "300";
                                            mes.count = 0;
                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开报工!";
                                            mes.data = null;
                                            return mes;
                                        }
                                    }
                                    if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //委外工序
                                    {
                                        //查找上道工序外协收料记录
                                        sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                        var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data2.Rows.Count > 0) //上道工序有收料
                                        {
                                            decimal sqty = data2.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();//收料数量
                                            decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();// 不良数量
                                            decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();// 报废数量
                                            rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                            rt.startqty = sqty;                                                  //开工数量=(上一道的收料数量)
                                            rt.noreportqty = sqty;                                               //未报数量=(上一道的收料数量)
                                            rt.reportqty = 0;                                                    //已报数量
                                            mes.code = "200";
                                            mes.count = 0;
                                            mes.Message = "弹窗开工界面!";
                                            mes.data = rt;
                                        }
                                        else
                                        {
                                            mes.code = "300";
                                            mes.count = 0;
                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                            mes.data = null;
                                            return mes;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                break;
                            case "W":  //外协工序
                                mes.code = "300";
                                mes.count = 0;
                                mes.Message = "未找到当前工序的上道工序信息,请联系管理员核实!";
                                mes.Message = "当前标签为外协标签,请前往外协操作标签页扫码!";
                                mes.data = null;
                                return mes;
                            }
                                break;
                            default:   //自制+外协工序
                                break;
                        }
                        break;
                    case "W":  //外协工序
                        mes.code = "300";
                        mes.count = 0;
                        mes.Message = "当前标签为外协标签,请前往外协操作标签页扫码!";
                        mes.data = null;
                    case "REPORT": //报工
                        switch (flwtype)
                        {
                            case "Z":  //自制工序
                                if (isbott == "Y")  //首道工序
                                {
                                    //1.首道工序时,判断是否有开工记录
                                    sql = @"select *   from TK_Wrk_Record R
                                    left join TEqpInfo E on R.eqp_code=E.code
                                    where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='S'";
                                    dynamicParams.Add("@ordercode", ordercode);
                                    dynamicParams.Add("@stepcode", stepcode);
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data0.Rows.Count > 0)  //有开工记录
                                    {
                                        //首道工序时,判断是否有报工记录
                                        sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", stepcode);
                                        var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data1.Rows.Count > 0)
                                        {
                                            decimal start_qty = data0.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //当前开工总数量
                                            decimal good_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //当前报工总数量
                                            decimal ng_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //当前不良数量
                                            decimal bad_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //当前工序报废数量
                                            decimal kbqty = start_qty - (good_qty + ng_qty + bad_qty); //剩余可报工数量=开工总数量-(报工数量+不良数量+报废数量)
                                            if (kbqty <= 0)//无可报工数量
                                            {
                                                mes.code = "300";
                                                mes.count = 0;
                                                mes.Message = "当前工序无可报工数量!";
                                                mes.data = null;
                                                return mes;
                                            }
                                            else
                                            {
                                                rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());//任务数量
                                                rt.startqty = start_qty;           //开工数量=当前开工总数量
                                                rt.noreportqty = kbqty;  //未报数量=剩余可报工数量
                                                rt.reportqty = good_qty + ng_qty + bad_qty;//已报数量=报工数量+不良数量+报废数量
                                                mes.code = "200";
                                                mes.count = 1;
                                                mes.Message = "弹窗报工界面!";
                                                mes.data = rt;
                                            }
                                        }
                                        else
                                        {
                                            rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                            rt.startqty = decimal.Parse(data.Rows[0]["START_QTY"].ToString()); //开工数量
                                            rt.noreportqty = decimal.Parse(data.Rows[0]["START_QTY"].ToString()); //未报数量=开工数量
                                            rt.reportqty = 0;                                                    //已报数量
                                            mes.code = "200";
                                            mes.count = 1;
                                            mes.Message = "弹窗报工界面!";
                                            mes.data = rt;
                                        }
                                    }
                                    else
                                    {
                                        mes.code = "300";
                                        mes.count = 0;
                                        mes.Message = "当前工序未开工!";
                                        mes.data = null;
                                        return mes;
                                    }
                                }
                                else   //非首道工序
                                {
                                    //查找当前工序上到工序(自制或者外协)
                                    sql = @"select A.step_code,S.stepname,S.flwtype  from TFlw_Rtdt A
                                               left join TK_Wrk_Man M on A.rout_code=M.route_code
                                               left join TStep S on A.step_code=S.stepcode
                                               where M.wo_code=@wocode  and A.seq=@seq-1";
                                    dynamicParams.Add("@wocode", data.Rows[0]["WO_CODE"].ToString());
                                    dynamicParams.Add("@seq", decimal.Parse(data.Rows[0]["SEQ"].ToString()));
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data0.Rows.Count > 0)
                                    {
                                        //1.非首道工序时,判断本道是否有开工记录
                                        sql = @"select *   from TK_Wrk_Record R
                                        left join TEqpInfo E on R.eqp_code=E.code
                                        where R.wo_code=@ordercode and R.step_code=@stepcode   and R.style='S'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", stepcode);
                                        var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data1.Rows.Count > 0)//本道有开工记录
                                        {
                                            //非首道工序时,判断本道是否有报工记录
                                            sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                            dynamicParams.Add("@ordercode", ordercode);
                                            dynamicParams.Add("@stepcode", stepcode);
                                            var data2 = DapperHelper.selectdata(sql, dynamicParams);
                                            if (data2.Rows.Count > 0) //有报工记录
                                            {
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //判断上道工序属性:自制工序
                                                {
                                                    //查找上到工序报工记录
                                                    sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有报工
                                                    {
                                                        decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //上道报工总数量
                                                        decimal start_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        decimal good_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                        decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //本道不良总数量
                                                        decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道总报废数量
                                                        decimal sybqty = start_qty - good_qty - ng_qty - bad_qty;//本道剩余可报数量=本道开工总数量-本道报工总数量-本道不良总数量-本道报废总数
                                                        if (sybqty <= 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        else
                                                        {
                                                            if (sgood_qty == null || sgood_qty == 0)
                                                            {
                                                                mes.code = "300";
                                                                mes.count = 0;
                                                                mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格产出为0,本道不允许开报工!";
                                                                mes.data = null;
                                                                return mes;
                                                            }
                                                            rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                            rt.startqty = decimal.Parse(data1.Rows[0]["START_QTY"].ToString());//开工数量=本道开工总数量
                                                            rt.noreportqty = sybqty;                                            //未报数量=本道剩余可报数量
                                                            rt.reportqty = good_qty + ng_qty + bad_qty;                         //已报数量=本道报工总数量+本道报工总不良+本道报废总数
                                                            mes.code = "200";
                                                            mes.count = 1;
                                                            mes.Message = "弹窗报工界面!";
                                                            mes.data = rt;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许报工!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //判断上道工序属性:委外工序
                                                {
                                                    //查找上到工序收料记录
                                                    sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有收料
                                                    {
                                                        decimal sqty = data3.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();  //上道收料数量
                                                        decimal startqty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        decimal good_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                        decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();  //本道不良总数量
                                                        decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道总报废数量
                                                        decimal sybqty = startqty - good_qty - ng_qty - bad_qty;//本道剩余可报数量=本道开工总数量-本道报工总数量-本道不良总数量-本道总报废数
                                                        if (sybqty <= 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        else
                                                        {
                                                            if (sqty == null || sqty == 0)
                                                            {
                                                                mes.code = "300";
                                                                mes.count = 0;
                                                                mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格收料为0,本道不允许开报工!";
                                                                mes.data = null;
                                                                return mes;
                                                            }
                                                            rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                            rt.startqty = startqty;                                         //开工数量=本道开工总数量
                                                            rt.noreportqty = sybqty;                                        //未报数量=本道剩余可报数量
                                                            rt.reportqty = good_qty + ng_qty + bad_qty;                     //已报数量=本道报工总数量+本道报工总不良+本道总报废数
                                                            mes.code = "200";
                                                            mes.count = 1;
                                                            mes.Message = "弹窗报工界面!";
                                                            mes.data = rt;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                            }
                                            else  //本道无报工记录
                                            {
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //自制工序
                                                {
                                                    //查找上到工序报工记录
                                                    sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有报工
                                                    {
                                                        decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //上道报工总数量
                                                        decimal start_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();  //本道开工总数量
                                                        decimal sybqty = start_qty;                                      //本道剩余可报数量=本道开工数量
                                                        if (sgood_qty == null || sgood_qty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格产出为0,本道不允许开报工!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                        rt.startqty = sybqty;                                                //开工数量=本道剩余可报数量
                                                        rt.noreportqty = sybqty;                                             //未报数量=本道剩余可报数量
                                                        rt.reportqty = 0;                                                    //已报数量
                                                        mes.code = "200";
                                                        mes.count = 1;
                                                        mes.Message = "弹窗报工界面!";
                                                        mes.data = rt;
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开报工!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                                if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //委外工序
                                                {
                                                    //查找上到工序收料记录
                                                    sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                                    dynamicParams.Add("@ordercode", ordercode);
                                                    dynamicParams.Add("@stepcode", data0.Rows[0]["STEP_CODE"].ToString());
                                                    var data3 = DapperHelper.selectdata(sql, dynamicParams);
                                                    if (data3.Rows.Count > 0) //上道有收料
                                                    {
                                                        decimal sqty = data3.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();//上道收料数量
                                                        decimal start_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("START_QTY")).Sum();//本道开工总数量
                                                        decimal sybqty = start_qty;                   //本道剩余报数量=本道开工总数量
                                                        if (sqty == null || sqty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格收料为0,本道不允许开报工!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量
                                                        rt.startqty = sybqty;                                                //开工数量=本道剩余报数量
                                                        rt.noreportqty = sybqty;                                             //未报数量=本道剩余报数量
                                                        rt.reportqty = 0;                                                    //已报数量
                                                        mes.code = "200";
                                                        mes.count = 1;
                                                        mes.Message = "弹窗报工界面!";
                                                        mes.data = rt;
                                                    }
                                                    else
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                }
                                            }
                                        }
                                        else //无开工记录
                                        {
                                            mes.code = "300";
                                            mes.count = 0;
                                            mes.Message = "当前工序未开工!";
                                            mes.data = null;
                                            return mes;
                                        }
                                    }
                                    else
                                    {
                                        mes.code = "300";
                                        mes.count = 0;
                                        mes.Message = "未找到当前工序的上道工序信息,请联系管理员核实!";
                                        mes.data = null;
                                        return mes;
                                    }
                                }
                                break;
                            case "W":  //外协工序
                                mes.code = "300";
                                mes.count = 0;
                                mes.Message = "当前标签为外协标签,请前往外协操作标签页扫码!";
                                mes.data = null;
                                break;
                            default:   //自制+外协工序
                                break;
                        }
                        break;
                    default:   //自制+外协工序
                    default:
                        break;
                }
            }
            catch (Exception e)
            {
@@ -436,11 +799,12 @@
        /// <summary>
        /// 生产开报工:外协工序任务开报工判断:工单号+工序
        /// </summary>
        /// <param name="OperType">操作类型</param>
        /// <param name="stu_torgcode">所属组织编码</param>
        /// <param name="SelectType">操作类型</param>
        /// <param name="ordercode">工单编号</param>
        /// <param name="stepcode">工序编码</param>
        /// <returns></returns>
        public static ToMessage WXEncodingSeach(string SelectType, string ordercode, string stepcode)
        public static ToMessage WXEncodingSeach(string stu_torgcode, string SelectType, string ordercode, string stepcode)
        {
            var sql = "";
            string flwtype = ""; //工序属性
@@ -448,24 +812,58 @@
            string isend = "";  //末道工序
            string seq = "";    //工序序号
            List<object> list = new List<object>();
            ScanStartReportData rt = new ScanStartReportData();
            ScanStartReportDataOut rt = new ScanStartReportDataOut();
            var dynamicParams = new DynamicParameters();
            try
            {
                //判断当前工单是否关闭
                sql = @"select *   from TK_Wrk_Man where wo_code=@ordercode and wkshp_code=@stu_torgcode and status='CLOSED'";
                dynamicParams.Add("@ordercode", ordercode);
                dynamicParams.Add("@stu_torgcode", stu_torgcode);
                var da0 = DapperHelper.selectdata(sql, dynamicParams);
                if (da0.Rows.Count > 0)
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "当前工单已关闭,不允许开报工操作!";
                    mes.data = null;
                    return mes;
                }
                //0.判断当前工单所属车间是否为当前登录人员车间
                sql = @"select *   from TK_Wrk_Man where wo_code=@ordercode and wkshp_code=@stu_torgcode";
                dynamicParams.Add("@ordercode", ordercode);
                dynamicParams.Add("@stu_torgcode", stu_torgcode);
                var da1 = DapperHelper.selectdata(sql, dynamicParams);
                if (da1.Rows.Count <= 0)
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "不是本车间生产任务,不允许操作!";
                    mes.data = null;
                    return mes;
                }
                //1.根据工单+工序查找当前工序是否首道工序
                sql = @"select A.wo_code,P.partcode,P.partname,P.partspec, T.stepcode,T.stepname,A.seq,T.flwtype,T.descr,A.status,A.plan_qty,A.isbott,A.isend
                sql = @"select A.wo_code,P.partcode,P.partname,P.partspec, T.stepcode,T.stepname,A.seq,T.flwtype,T.descr,A.status,A.plan_qty,A.isbott,A.isend,L.org_code,L.org_name,
                        M.m_po,W.saleOrderCode
                        from TK_Wrk_Step A
                        left join  TStep T on A.step_code=T.stepcode
                        left join  TK_Wrk_Man M on A.wo_code=M.wo_code
                        left join TKimp_Ewo W on M.m_po=W.wo and M.materiel_code=W.materiel_code and M.sourceid=W.id
                        left join  TMateriel_Info P on M.materiel_code=P.partcode
                        left join  TOrganization L on M.wkshp_code=L.org_code
                        where A.wo_code=@ordercode and A.step_code=@stepcode";
                dynamicParams.Add("@ordercode", ordercode);
                dynamicParams.Add("@stepcode", stepcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
                {
                    rt.wkshopcode = data.Rows[0]["org_code"].ToString(); //车间编码
                    rt.wkshopname = data.Rows[0]["org_name"].ToString(); //车间名称
                    rt.wo_code = data.Rows[0]["WO_CODE"].ToString(); //工单号
                    rt.saleOrderCode = data.Rows[0]["saleOrderCode"].ToString();//销售订单号
                    rt.m_po = data.Rows[0]["m_po"].ToString();//订单号
                    rt.partnumber = data.Rows[0]["PARTCODE"].ToString(); //产品编码
                    rt.partname = data.Rows[0]["PARTNAME"].ToString(); //产品名称
                    rt.partspec = data.Rows[0]["PARTSPEC"].ToString(); //产品规格
@@ -520,16 +918,18 @@
                                if (isbott == "Y")  //首道工序
                                {
                                    //1.首道工序时,判断是否有发料记录
                                    sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='F'";
                                    sql = @"select *   from TK_Wrk_OutRecord R
                                            left join TCustomer C on R.wx_code=C.code
                                            where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='F'";
                                    dynamicParams.Add("@ordercode", ordercode);
                                    dynamicParams.Add("@stepcode", stepcode);
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data0.Rows.Count > 0)  //有发料记录
                                    {
                                        decimal fqty = data0.AsEnumerable().Select(d => d.Field<decimal>("FQTY")).Sum();  //发料数量
                                        decimal ng_qty =data0.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();// 不良数量
                                        decimal ng_qty = data0.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();// 不良数量
                                        decimal bad_qty = data0.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //报废数量
                                        decimal kfqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - fqty - ng_qty- bad_qty;  //剩余可发数量
                                        decimal kfqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - fqty - ng_qty - bad_qty;  //剩余可发数量
                                        if (kfqty <= 0)
                                        {
                                            mes.code = "300";
@@ -575,13 +975,15 @@
                                    if (data0.Rows.Count > 0)
                                    {
                                        //1.非首道工序时,判断本道是否有发料记录
                                        sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='F'";
                                        sql = @"select *   from TK_Wrk_OutRecord R
                                                left join TCustomer C on R.wx_code=C.code
                                                where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='F'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", stepcode);
                                        var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data1.Rows.Count > 0)//本道有发料记录
                                        {
                                            if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //自制工序
                                            if (data0.Rows[0]["FLWTYPE"].ToString() == "Z")  //判断上道工序属性:自制工序
                                            {
                                                //查找上到工序报工记录
                                                sql = @"select *   from TK_Wrk_Record where wo_code=@ordercode and step_code=@stepcode and style='B'";
@@ -595,7 +997,7 @@
                                                    decimal ng_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();// 本道不良数量
                                                    decimal bad_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道报废数量
                                                    decimal sybqty =sgood_qty - sqty - ng_qty- bad_qty;//本道剩余可发数量=上道报工数量-本道发料数量-本道不良数量-本道报废数量
                                                    decimal sybqty = sgood_qty - sqty - ng_qty - bad_qty;//本道剩余可发数量=上道报工数量-本道发料数量-本道不良数量-本道报废数量
                                                    if (sybqty <= 0)
                                                    {
                                                        mes.code = "300";
@@ -606,9 +1008,17 @@
                                                    }
                                                    else
                                                    {
                                                        if (sgood_qty == null || sgood_qty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格产出为0,本道不允许发料!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                        rt.noreportqty = sybqty;                                             //未发数量=剩余可发数量
                                                        rt.reportqty = sqty + ng_qty+bad_qty;                                //已发数量= 本道发料数量+本道不良数量+本道报废数量
                                                        rt.reportqty = sqty + ng_qty + bad_qty;                                //已发数量= 本道发料数量+本道不良数量+本道报废数量
                                                        rt.startqty = sybqty;                                                //收料数量=剩余可发数量      
                                                        mes.code = "200";
@@ -626,7 +1036,7 @@
                                                    return mes;
                                                }
                                            }
                                            if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //外协工序
                                            if (data0.Rows[0]["FLWTYPE"].ToString() == "W")  //判断上道工序属性:外协工序
                                            {
                                                //查找上到工序收料记录
                                                sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
@@ -640,7 +1050,7 @@
                                                    decimal ng_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();// 本道不良数量
                                                    decimal bad_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道报废数量
                                                    decimal sybqty = ssqty - sqty - ng_qty-bad_qty;//本道剩余可发数量=上道收料数量-本道发料数量-本道不良数量-本道报废数量
                                                    decimal sybqty = ssqty - sqty - ng_qty - bad_qty;//本道剩余可发数量=上道收料数量-本道发料数量-本道不良数量-本道报废数量
                                                    if (sybqty <= 0)
                                                    {
                                                        mes.code = "300";
@@ -651,9 +1061,17 @@
                                                    }
                                                    else
                                                    {
                                                        if (ssqty == null || ssqty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格收料为0,本道不允许发料!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                        rt.noreportqty = sybqty;                                             //未发数量=剩余可发数量
                                                        rt.reportqty = sqty + ng_qty+bad_qty;                                //已发数量= 本道发料数量+本道不良数量+本道报废数量
                                                        rt.reportqty = sqty + ng_qty + bad_qty;                                //已发数量= 本道发料数量+本道不良数量+本道报废数量
                                                        rt.startqty = sybqty;                                                //收料数量=剩余可发数量      
                                                        mes.code = "200";
@@ -666,7 +1084,7 @@
                                                {
                                                    mes.code = "300";
                                                    mes.count = 0;
                                                    mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许发料!";
                                                    mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未发料,本道不允许发料!";
                                                    mes.data = null;
                                                    return mes;
                                                }
@@ -686,7 +1104,14 @@
                                                    decimal sgood_qty = data3.AsEnumerable().Select(d => d.Field<decimal>("GOOD_QTY")).Sum();  //本道报工总数量
                                                    decimal sybqty = sgood_qty;//本道剩余可发数量=上道报工总数量
                                                    if (sgood_qty == null || sgood_qty == 0)
                                                    {
                                                        mes.code = "300";
                                                        mes.count = 0;
                                                        mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格产出为0,本道不允许发料!";
                                                        mes.data = null;
                                                        return mes;
                                                    }
                                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                    rt.noreportqty = sybqty;                                             //未发数量=剩余可发数量
                                                    rt.reportqty = 0;                                                    //已发数量                                       
@@ -729,6 +1154,14 @@
                                                    }
                                                    else
                                                    {
                                                        if (ssqty == null || ssqty == 0)
                                                        {
                                                            mes.code = "300";
                                                            mes.count = 0;
                                                            mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格收料为0,本道不允许发料!";
                                                            mes.data = null;
                                                            return mes;
                                                        }
                                                        rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                        rt.noreportqty = sybqty;                                             //未发数量=剩余可发数量
                                                        rt.reportqty = 0;                                                    //已发数量                                     
@@ -778,14 +1211,25 @@
                                if (isbott == "Y")  //首道工序
                                {
                                    //1.首道工序时,判断是否有发料记录
                                    sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='F'";
                                    sql = @"select R.wo_code,R.step_code,R.wx_code as code,C.name,R.materiel_code,
                                            isnull(sum(R.fqty),0) as fqty,isnull(sum(R.sqty),0) as sqty,isnull(sum(R.ng_qty),0) as ng_qty,isnull(sum(R.bad_qty),0) as bad_qty
                                            from TK_Wrk_OutRecord R
                                            left join TCustomer C on R.wx_code=C.code
                                            where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='F'
                                            group by R.wo_code,R.step_code,R.wx_code,C.name,R.materiel_code";
                                    dynamicParams.Add("@ordercode", ordercode);
                                    dynamicParams.Add("@stepcode", stepcode);
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    if (data0.Rows.Count > 0)  //有发料记录
                                    {
                                        //1.首道工序时,判断是否有收料记录
                                        sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                        sql = @"select R.wo_code,R.step_code,R.wx_code as code,C.name,R.materiel_code,
                                                isnull(sum(R.fqty),0) as fqty,isnull(sum(R.sqty),0) as sqty,isnull(sum(R.ng_qty),0) as ng_qty,isnull(sum(R.bad_qty),0) as bad_qty
                                                from TK_Wrk_OutRecord R
                                                left join TCustomer C on R.wx_code=C.code
                                                where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='S'
                                                group by R.wo_code,R.step_code,R.wx_code,C.name,R.materiel_code";
                                        //sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", stepcode);
                                        var data1 = DapperHelper.selectdata(sql, dynamicParams);
@@ -795,7 +1239,7 @@
                                            decimal sqty = data1.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();//本道收料数量
                                            decimal ng_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();//本道不良数量
                                            decimal bad_qty = data1.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道报废数量
                                            decimal ksqty = fqty - sqty - ng_qty-bad_qty;  //剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道报废数量
                                            decimal ksqty = fqty - sqty - ng_qty - bad_qty;  //剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道报废数量
                                            if (ksqty <= 0)
                                            {
                                                mes.code = "300";
@@ -808,8 +1252,25 @@
                                            {
                                                rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                rt.noreportqty = ksqty;                                              //未收数量=本道发料数量
                                                rt.reportqty = sqty + ng_qty+bad_qty;                                //已收数量
                                                rt.reportqty = sqty + ng_qty + bad_qty;                                //已收数量
                                                rt.startqty = ksqty;                                                  //收料数量=本道发料数量      
                                                data0.Merge(data1);//将指定的dt合并
                                                rt.list = data0.AsEnumerable().GroupBy(r => new
                                                {
                                                    wo_code = r["wo_code"],
                                                    step_code = r["step_code"],
                                                    code = r["code"],
                                                    name = r["name"]
                                                }).Select(g => new
                                                {
                                                    Name = g.Key.code,
                                                    tp = g.Key.name,
                                                    fqty = g.Sum(i => (decimal)i["fqty"]),
                                                    sqty = g.Sum(i => (decimal)i["sqty"]),
                                                    ng_qty = g.Sum(i => (decimal)i["ng_qty"]),
                                                    bad_qty = g.Sum(i => (decimal)i["bad_qty"])
                                                }).ToList();
                                                mes.code = "200";
                                                mes.count = 3;
@@ -821,11 +1282,27 @@
                                        else
                                        {
                                            decimal fqty = data0.AsEnumerable().Select(d => d.Field<decimal>("FQTY")).Sum();//本道发料数量
                                            rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                            rt.noreportqty = fqty;                                               //未收数量=本道发料数量
                                            rt.reportqty = 0;                                                    //已收数量                                   
                                            rt.startqty = fqty;                                                  //收料数量=本道发料数量
                                            rt.startqty = fqty;                                                  //收料数量=本道发料数量
                                                                                                                 //
                                            data0.Merge(data1);//将指定的dt合并
                                            rt.list = data0.AsEnumerable().GroupBy(r => new
                                            {
                                                wo_code = r["wo_code"],
                                                step_code = r["step_code"],
                                                code = r["code"],
                                                name = r["name"]
                                            }).Select(g => new
                                            {
                                                Name = g.Key.code,
                                                tp = g.Key.name,
                                                fqty = g.Sum(i => (decimal)i["fqty"]),
                                                sqty = g.Sum(i => (decimal)i["sqty"]),
                                                ng_qty = g.Sum(i => (decimal)i["ng_qty"]),
                                                bad_qty = g.Sum(i => (decimal)i["bad_qty"])
                                            }).ToList();
                                            mes.code = "200";
                                            mes.count = 3;
@@ -855,14 +1332,24 @@
                                    if (data0.Rows.Count > 0)
                                    {
                                        //1.非首道工序时,判断本道是否有发料记录
                                        sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='F'";
                                        sql = @"select R.wo_code,R.step_code,R.wx_code as code,C.name,R.materiel_code,
                                            isnull(sum(R.fqty),0) as fqty,isnull(sum(R.sqty),0) as sqty,isnull(sum(R.ng_qty),0) as ng_qty,isnull(sum(R.bad_qty),0) as bad_qty
                                            from TK_Wrk_OutRecord R
                                            left join TCustomer C on R.wx_code=C.code
                                            where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='F'
                                            group by R.wo_code,R.step_code,R.wx_code,C.name,R.materiel_code";
                                        dynamicParams.Add("@ordercode", ordercode);
                                        dynamicParams.Add("@stepcode", stepcode);
                                        var data1 = DapperHelper.selectdata(sql, dynamicParams);
                                        if (data1.Rows.Count > 0)//本道有发料记录
                                        {
                                            //2.非首道工序时,判断本道是否有收料记录
                                            sql = @"select *   from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='S'";
                                            sql = @"select R.wo_code,R.step_code,R.wx_code as code,C.name,R.materiel_code,
                                                isnull(sum(R.fqty),0) as fqty,isnull(sum(R.sqty),0) as sqty,isnull(sum(R.ng_qty),0) as ng_qty,isnull(sum(R.bad_qty),0) as bad_qty
                                                from TK_Wrk_OutRecord R
                                                left join TCustomer C on R.wx_code=C.code
                                                where R.wo_code=@ordercode and R.step_code=@stepcode and R.style='S'
                                                group by R.wo_code,R.step_code,R.wx_code,C.name,R.materiel_code";
                                            dynamicParams.Add("@ordercode", ordercode);
                                            dynamicParams.Add("@stepcode", stepcode);
                                            var data2 = DapperHelper.selectdata(sql, dynamicParams);
@@ -872,7 +1359,7 @@
                                                decimal sqty = data2.AsEnumerable().Select(d => d.Field<decimal>("SQTY")).Sum();//本道收料数量
                                                decimal ng_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("NG_QTY")).Sum();//本道不良数量
                                                decimal bad_qty = data2.AsEnumerable().Select(d => d.Field<decimal>("BAD_QTY")).Sum();  //本道报废数量
                                                decimal ksqty = fqty - sqty - ng_qty-bad_qty;//剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道报废数量
                                                decimal ksqty = fqty - sqty - ng_qty - bad_qty;//剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道报废数量
                                                if (ksqty <= 0)
                                                {
                                                    mes.code = "300";
@@ -885,8 +1372,25 @@
                                                {
                                                    rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                    rt.noreportqty = ksqty;                                              //未收数量=本道发料数量
                                                    rt.reportqty = sqty + ng_qty+bad_qty;                                 //已收数量
                                                    rt.reportqty = sqty + ng_qty + bad_qty;                                 //已收数量
                                                    rt.startqty = ksqty;                                                  //收料数量=本道发料数量      
                                                    data1.Merge(data2);//将指定的dt合并
                                                    rt.list = data1.AsEnumerable().GroupBy(r => new
                                                    {
                                                        wo_code = r["wo_code"],
                                                        step_code = r["step_code"],
                                                        code = r["code"],
                                                        name = r["name"]
                                                    }).Select(g => new
                                                    {
                                                        Name = g.Key.code,
                                                        tp = g.Key.name,
                                                        fqty = g.Sum(i => (decimal)i["fqty"]),
                                                        sqty = g.Sum(i => (decimal)i["sqty"]),
                                                        ng_qty = g.Sum(i => (decimal)i["ng_qty"]),
                                                        bad_qty = g.Sum(i => (decimal)i["bad_qty"])
                                                    }).ToList();
                                                    mes.code = "200";
                                                    mes.count = 3;
@@ -897,12 +1401,26 @@
                                            else
                                            {
                                                decimal fqty = data1.AsEnumerable().Select(d => d.Field<decimal>("FQTY")).Sum();  //本道发料数量
                                                rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString());     //任务数量
                                                rt.noreportqty = fqty;                                               //未收数量=本道发料数量
                                                rt.reportqty = 0;                                                    //已收数量                                   
                                                rt.startqty = fqty;                                                  //收料数量=本道发料数量      
                                                data1.Merge(data2);//将指定的dt合并
                                                rt.list = data1.AsEnumerable().GroupBy(r => new
                                                {
                                                    wo_code = r["wo_code"],
                                                    step_code = r["step_code"],
                                                    code = r["code"],
                                                    name = r["name"]
                                                }).Select(g => new
                                                {
                                                    Name = g.Key.code,
                                                    tp = g.Key.name,
                                                    fqty = g.Sum(i => (decimal)i["fqty"]),
                                                    sqty = g.Sum(i => (decimal)i["sqty"]),
                                                    ng_qty = g.Sum(i => (decimal)i["ng_qty"]),
                                                    bad_qty = g.Sum(i => (decimal)i["bad_qty"])
                                                }).ToList();
                                                mes.code = "200";
                                                mes.count = 3;
                                                mes.Message = "弹窗收料界面!";