using Dapper; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using VueWebApi.Models; namespace VueWebApi.Tools { public class ScanStartReport { public static ToMessage mes = new ToMessage(); //定义全局返回信息对象 #region[生产开报工:自制工序任务开报工判断:工单+工序条码] /// /// 扫码信息为工单+工序条码 /// /// 工单编号 /// 工序编码 /// public static ToMessage ZZEncodingSeach(string ordercode, string stepcode) { var sql = ""; string flwtype = ""; //工序属性 string isbott = ""; //首道工序 string isend = ""; //末道工序 string seq = ""; //工序序号 List list = new List(); ScanStartReportData rt = new ScanStartReportData(); var dynamicParams = new DynamicParameters(); try { //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 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 TMateriel_Info P on M.materiel_code=P.partcode 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.wo_code = data.Rows[0]["WO_CODE"].ToString(); //工单号 rt.partnumber = data.Rows[0]["PARTCODE"].ToString(); //产品编码 rt.partname = data.Rows[0]["PARTNAME"].ToString(); //产品名称 rt.partspec = data.Rows[0]["PARTSPEC"].ToString(); //产品规格 rt.stepcode = data.Rows[0]["STEPCODE"].ToString(); //工序编码 rt.stepname = data.Rows[0]["STEPNAME"].ToString(); //工序名称 rt.stepdesc = data.Rows[0]["DESCR"].ToString(); //工序描述 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 flwtype = data.Rows[0]["FLWTYPE"].ToString();//获取工序属性 isbott = data.Rows[0]["ISBOTT"].ToString();//首道工序 isend = data.Rows[0]["ISEND"].ToString();//末道工序 rt.seq = data.Rows[0]["SEQ"].ToString();//工序序号 //获取当前工序下道工序 sql = @"select A.isbott,A.isend,T.stepcode,T.stepname from TK_Wrk_Step A left join TStep T on A.step_code=T.stepcode where A.wo_code=@ordercode and A.seq=@seq+1 "; dynamicParams.Add("@ordercode", ordercode); dynamicParams.Add("@seq", decimal.Parse(data.Rows[0]["SEQ"].ToString())); var dt = DapperHelper.selectdata(sql, dynamicParams); if (dt.Rows.Count > 0) //有下道工序 { rt.nextstepcode = dt.Rows[0]["STEPCODE"].ToString();//下道工序编码 rt.nextstepname = dt.Rows[0]["STEPNAME"].ToString();//下道工序名称 } if (isend == "Y") //当前工序是末道工序 { rt.nextstepcode = "";//data.Rows[0]["STEPCODE"].ToString();//当前工序编码 rt.nextstepname = "";// data.Rows[0]["STEPNAME"].ToString();//当前工序名称 } } else { mes.code = "300"; mes.count = 0; mes.Message = "当前扫码工序任务不存在!"; mes.data = null; return mes; } switch (flwtype) { case "Z": //自制工序 if (isbott == "Y") //首道工序 { //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) { decimal good_qty = data1.AsEnumerable().Select(d => d.Field("GOOD_QTY")).Sum(); //报工总数量 decimal ng_qty = data1.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum(); //不良数量 decimal kbqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - (good_qty + ng_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 = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //开工数量=任务数量 rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - good_qty- ng_qty; //未报数量=任务数量-已报数量-不良数量 rt.reportqty = good_qty + ng_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]["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 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) //有报工记录 { 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("GOOD_QTY")).Sum(); //上道报工总数量 decimal good_qty = data2.AsEnumerable().Select(d => d.Field("GOOD_QTY")).Sum(); //本道报工总数量 decimal ng_qty = data2.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum(); //本道不良总数量 decimal sybqty = sgood_qty - good_qty - ng_qty;//本道剩余可报数量=上道报工总数量-本道报工总数量-本道不良总数量 if (sybqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.startqty = sybqty; //开工数量=本道剩余可报数量 rt.noreportqty = sybqty; //未报数量=本道剩余可报数量 rt.reportqty = good_qty + ng_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("SQTY")).Sum(); //上道收料数量 decimal good_qty = data2.AsEnumerable().Select(d => d.Field("GOOD_QTY")).Sum(); //本道报工总数量 decimal ng_qty = data2.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum(); //本道不良总数量 decimal sybqty = sqty - good_qty - ng_qty;//本道剩余可报数量=上道收料总数量-本道报工总数量-本道不良总数量 if (sybqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.startqty = sybqty; //开工数量=本道剩余可报数量 rt.noreportqty = sybqty; //未报数量=本道剩余可报数量 rt.reportqty = good_qty + ng_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("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("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; } } } } 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();// 不良数量 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("SQTY")).Sum();//收料数量 decimal ng_qty = data2.AsEnumerable().Select(d => d.Field("NG_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 { 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; } } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; return mes; } return mes; } #endregion #region[生产开报工:外协工序任务开报工判断:工单号+工序] /// /// 生产开报工:外协工序任务开报工判断:工单号+工序 /// /// 操作类型 /// 工单编号 /// 工序编码 /// public static ToMessage WXEncodingSeach(string SelectType, string ordercode, string stepcode) { var sql = ""; string flwtype = ""; //工序属性 string isbott = ""; //首道工序 string isend = ""; //末道工序 string seq = ""; //工序序号 List list = new List(); ScanStartReportData rt = new ScanStartReportData(); var dynamicParams = new DynamicParameters(); try { //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 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 TMateriel_Info P on M.materiel_code=P.partcode 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.wo_code = data.Rows[0]["WO_CODE"].ToString(); //工单号 rt.partnumber = data.Rows[0]["PARTCODE"].ToString(); //产品编码 rt.partname = data.Rows[0]["PARTNAME"].ToString(); //产品名称 rt.partspec = data.Rows[0]["PARTSPEC"].ToString(); //产品规格 rt.stepcode = data.Rows[0]["STEPCODE"].ToString(); //工序编码 rt.stepname = data.Rows[0]["STEPNAME"].ToString(); //工序名称 rt.stepdesc = data.Rows[0]["DESCR"].ToString(); //工序描述 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 flwtype = data.Rows[0]["FLWTYPE"].ToString();//获取工序属性 isbott = data.Rows[0]["ISBOTT"].ToString();//首道工序 isend = data.Rows[0]["ISEND"].ToString();//末道工序 rt.seq = data.Rows[0]["SEQ"].ToString();//工序序号 //获取当前工序下道工序 sql = @"select A.isbott,A.isend,T.stepcode,T.stepname from TK_Wrk_Step A left join TStep T on A.step_code=T.stepcode where A.wo_code=@ordercode and A.seq=@seq+1 "; dynamicParams.Add("@ordercode", ordercode); dynamicParams.Add("@seq", decimal.Parse(data.Rows[0]["SEQ"].ToString())); var dt = DapperHelper.selectdata(sql, dynamicParams); if (dt.Rows.Count > 0) //有下道工序 { rt.nextstepcode = dt.Rows[0]["STEPCODE"].ToString();//下道工序编码 rt.nextstepname = dt.Rows[0]["STEPNAME"].ToString();//下道工序名称 } if (isend == "Y") //当前工序是末道工序 { rt.nextstepcode = "";// data.Rows[0]["STEPCODE"].ToString();//当前工序编码 rt.nextstepname = "";// data.Rows[0]["STEPNAME"].ToString();//当前工序名称 } } else { mes.code = "300"; mes.count = 0; mes.Message = "当前扫码工序任务不存在!"; mes.data = null; return mes; } switch (SelectType) { case "OUT": //发料 switch (flwtype) { case "Z": mes.code = "300"; mes.count = 0; mes.Message = "当前标签为自制标签,请前往自制操作标签页扫码!"; mes.data = null; break; case "W": if (isbott == "Y") //首道工序 { //1.首道工序时,判断是否有发料记录 sql = @"select * from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and 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("FQTY")).Sum(); //发料数量 decimal ng_qty =data0.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();// 不良数量 decimal kfqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - fqty - ng_qty; //剩余可发数量 if (kfqty <= 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.noreportqty = kfqty; //未发数量=剩余可发数量 rt.reportqty = fqty; //已发数量= 发料数量 rt.startqty = kfqty; //发料数量=剩余可发数量 mes.code = "200"; mes.count = 2; mes.Message = "弹窗发料界面!"; mes.data = rt; } } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //未发数量=任务数量 rt.reportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //已发数量=任务数量 rt.startqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //发料数量=任务数量 mes.code = "200"; mes.count = 2; mes.Message = "弹窗发料界面!"; mes.data = rt; } } 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_OutRecord where wo_code=@ordercode and step_code=@stepcode and 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") //自制工序 { //查找上到工序报工记录 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("GOOD_QTY")).Sum(); //本道报工总数量 decimal sqty = data1.AsEnumerable().Select(d => d.Field("FQTY")).Sum();//本道发料数量 decimal ng_qty = data1.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();// 本道不良数量 decimal sybqty =sgood_qty - sqty - ng_qty;//本道剩余可发数量=上道报工数量-本道发料数量-本道不良数量 if (sybqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可发数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = sybqty; //未发数量=剩余可发数量 rt.reportqty = sqty + ng_qty; //已发数量= 本道发料数量+本道不良数量 rt.startqty = sybqty; //收料数量=剩余可发数量 mes.code = "200"; mes.count = 2; 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 ssqty = data3.AsEnumerable().Select(d => d.Field("SQTY")).Sum();//上道收料数量 decimal sqty = data1.AsEnumerable().Select(d => d.Field("FQTY")).Sum();//本道发料数量 decimal ng_qty = data1.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();// 本道不良数量 decimal sybqty = ssqty - sqty - ng_qty;//本道剩余可发数量=上道收料数量-本道发料数量-本道不良数量 if (sybqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可发数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = sybqty; //未发数量=剩余可发数量 rt.reportqty = sqty + ng_qty; //已发数量= 本道发料数量+本道不良数量 rt.startqty = sybqty; //收料数量=剩余可发数量 mes.code = "200"; mes.count = 2; 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("GOOD_QTY")).Sum(); //本道报工总数量 decimal sybqty = sgood_qty;//本道剩余可发数量=上道报工总数量 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = sybqty; //未发数量=剩余可发数量 rt.reportqty = 0; //已发数量 rt.startqty = sybqty; //收料数量=剩余可发数量 mes.code = "200"; mes.count = 2; 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 ssqty = data3.AsEnumerable().Select(d => d.Field("SQTY")).Sum();//上道收料数量 decimal sybqty = ssqty;//本道剩余可发数量=上道收料数量 if (sybqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可发数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = sybqty; //未发数量=剩余可发数量 rt.reportqty = 0; //已发数量 rt.startqty = sybqty; //收料数量=剩余可发数量 mes.code = "200"; mes.count = 2; 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; } } break; default: break; } break; case "IN": //收料 switch (flwtype) { case "Z"://自制 mes.code = "300"; mes.count = 0; mes.Message = "当前标签为自制标签,请前往自制操作标签页扫码!"; mes.data = null; break; case "W": if (isbott == "Y") //首道工序 { //1.首道工序时,判断是否有发料记录 sql = @"select * from TK_Wrk_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='F'"; 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'"; dynamicParams.Add("@ordercode", ordercode); dynamicParams.Add("@stepcode", stepcode); var data1 = DapperHelper.selectdata(sql, dynamicParams); if (data1.Rows.Count > 0) //有收料记录 { decimal fqty = data0.AsEnumerable().Select(d => d.Field("FQTY")).Sum();//本道发料数量 decimal sqty = data1.AsEnumerable().Select(d => d.Field("SQTY")).Sum();//本道收料数量 decimal ng_qty = data1.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();//本道不良数量 decimal ksqty = fqty - sqty - ng_qty; //剩余可发数量=本道发料数量-本道收料数量-本道不良数量 if (ksqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 无可收料数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = ksqty; //未收数量=本道发料数量 rt.reportqty = sqty + ng_qty; //已收数量 rt.startqty = ksqty; //收料数量=本道发料数量 mes.code = "200"; mes.count = 3; mes.Message = "弹窗收料界面!"; mes.data = rt; } } else { decimal fqty = data0.AsEnumerable().Select(d => d.Field("FQTY")).Sum();//本道发料数量 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = fqty; //未收数量=本道发料数量 rt.reportqty = 0; //已收数量 rt.startqty = fqty; //收料数量=本道发料数量 mes.code = "200"; mes.count = 3; mes.Message = "弹窗收料界面!"; mes.data = rt; } } else { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 未发料,请先发料!"; 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_OutRecord where wo_code=@ordercode and step_code=@stepcode and style='F'"; 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'"; dynamicParams.Add("@ordercode", ordercode); dynamicParams.Add("@stepcode", stepcode); var data2 = DapperHelper.selectdata(sql, dynamicParams); if (data2.Rows.Count > 0) //有收料记录 { decimal fqty = data1.AsEnumerable().Select(d => d.Field("FQTY")).Sum();//本道发料数量 decimal sqty = data2.AsEnumerable().Select(d => d.Field("SQTY")).Sum();//本道收料数量 decimal ng_qty = data2.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();//本道不良数量 decimal ksqty = fqty - sqty - ng_qty; //剩余可发数量=本道发料数量-本道收料数量-本道不良数量 if (ksqty <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 无可收料数量!"; mes.data = null; return mes; } else { rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = ksqty; //未收数量=本道发料数量 rt.reportqty = sqty + ng_qty; //已收数量 rt.startqty = ksqty; //收料数量=本道发料数量 mes.code = "200"; mes.count = 3; mes.Message = "弹窗收料界面!"; mes.data = rt; } } else { decimal fqty = data1.AsEnumerable().Select(d => d.Field("FQTY")).Sum(); //本道发料数量 rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 rt.noreportqty = fqty; //未收数量=本道发料数量 rt.reportqty = 0; //已收数量 rt.startqty = fqty; //收料数量=本道发料数量 mes.code = "200"; mes.count = 3; mes.Message = "弹窗收料界面!"; mes.data = rt; } } else { mes.code = "300"; mes.count = 0; mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 未发料,请先发料!"; mes.data = null; return mes; } } else { mes.code = "300"; mes.count = 0; mes.Message = "未找到当前工序的上道工序信息,请联系管理员核实!"; mes.data = null; return mes; } } break; default: break; } break; default: break; } } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; return mes; } return mes; } #endregion } }