| | |
| | | /// 扫码信息为工单+工序条码 |
| | | /// </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 stu_torgcode, string ordercode, string stepcode) |
| | | public static ToMessage ZZEncodingSeach(string stu_torgcode, string SelectType, string ordercode, string stepcode) |
| | | { |
| | | var sql = ""; |
| | | string flwtype = ""; //工序属性 |
| | |
| | | dynamicParams.Add("@ordercode", ordercode); |
| | | dynamicParams.Add("@stu_torgcode", stu_torgcode); |
| | | var da0 = DapperHelper.selectdata(sql, dynamicParams); |
| | | if (da0.Rows.Count > 0) |
| | | if (da0.Rows.Count > 0) |
| | | { |
| | | mes.code = "300"; |
| | | mes.count = 0; |
| | |
| | | dynamicParams.Add("@ordercode", ordercode); |
| | | dynamicParams.Add("@stu_torgcode", stu_torgcode); |
| | | var da1 = DapperHelper.selectdata(sql, dynamicParams); |
| | | if (da1.Rows.Count<=0) |
| | | if (da1.Rows.Count <= 0) |
| | | { |
| | | mes.code = "300"; |
| | | mes.count = 0; |
| | |
| | | } |
| | | |
| | | //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,L.org_code,L.org_name |
| | | 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"; |
| | |
| | | var data = DapperHelper.selectdata(sql, dynamicParams); |
| | | if (data.Rows.Count > 0) |
| | | { |
| | | rt.wkshopcode= data.Rows[0]["org_code"].ToString(); //车间编码 |
| | | 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(); //产品名称 |
| | |
| | | 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 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) |
| | | 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.eqpcode = data0.Rows[0]["code"].ToString(); //开工设备编码 |
| | | rt.eqpname = data0.Rows[0]["name"].ToString(); //开工设备名称 |
| | | 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.eqpcode = data0.Rows[0]["code"].ToString(); //开工设备编码 |
| | | rt.eqpname = data0.Rows[0]["name"].ToString(); //开工设备名称 |
| | | 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 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) //有报工记录 |
| | | 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"; |
| | | mes.count = 0; |
| | | mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可报数量!"; |
| | | mes.data = null; |
| | | return mes; |
| | | } |
| | | else |
| | | { |
| | | if (sgood_qty == null || sgood_qty == 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) //上道有报工 |
| | | { |
| | | 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() + " 合格产出为0,本道不允许开报工!"; |
| | | mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未报工,本道不允许开工!"; |
| | | mes.data = null; |
| | | return mes; |
| | | } |
| | | rt.eqpcode = data1.Rows[0]["code"].ToString(); //开工设备编码 |
| | | rt.eqpname = data1.Rows[0]["name"].ToString(); //开工设备名称 |
| | | 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; |
| | | } |
| | | 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 |
| | | 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() == "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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (data0.Rows[0]["FLWTYPE"].ToString() == "W") //判断上道工序属性:委外工序 |
| | | else //无开工记录 |
| | | { |
| | | //查找上到工序收料记录 |
| | | 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) //上道有收料 |
| | | if (data0.Rows[0]["FLWTYPE"].ToString() == "Z") //当前工序上道自制工序 |
| | | { |
| | | 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) |
| | | //查找上到工序报工记录 |
| | | 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) //上到工序有报工 |
| | | { |
| | | mes.code = "300"; |
| | | 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 |
| | | { |
| | | 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();// 报废数量 |
| | | if (sqty == null || sqty == 0) |
| | | { |
| | | mes.code = "300"; |
| | |
| | | mes.data = null; |
| | | return mes; |
| | | } |
| | | rt.eqpcode = data1.Rows[0]["code"].ToString(); //开工设备编码 |
| | | rt.eqpname = data1.Rows[0]["name"].ToString(); //开工设备名称 |
| | | rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务数量 |
| | | rt.startqty = sybqty; //开工数量=本道剩余可报数量 |
| | | rt.noreportqty = sybqty; //未报数量=本道剩余可报数量 |
| | | rt.reportqty = good_qty + ng_qty+bad_qty; //已报数量=本道报工总数量+本道报工总不良+本道总报废数 |
| | | 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 //本道无报工记录 |
| | | { |
| | | 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; //本道剩余可报数量=上道报工数量 |
| | | if (sgood_qty == null || sgood_qty == 0) |
| | | else |
| | | { |
| | | mes.code = "300"; |
| | | mes.count = 0; |
| | | mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 合格产出为0,本道不允许开报工!"; |
| | | mes.Message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + " 的上道工序:" + data0.Rows[0]["STEPNAME"].ToString() + " 未收料,本道不允许开报工,请前往外协操作页执行!"; |
| | | mes.data = null; |
| | | return mes; |
| | | } |
| | | rt.eqpcode = data1.Rows[0]["code"].ToString(); //开工设备编码 |
| | | rt.eqpname = data1.Rows[0]["name"].ToString(); //开工设备名称 |
| | | 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; //本道剩余可收数量=上道收料数量 |
| | | 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.eqpcode = data1.Rows[0]["code"].ToString(); //开工设备编码 |
| | | rt.eqpname = data1.Rows[0]["name"].ToString(); //开工设备名称 |
| | | 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") //自制工序 |
| | | else |
| | | { |
| | | //查找上到工序报工记录 |
| | | 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();//报工数量 |
| | | 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 (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 = "弹窗开工界面!"; |
| | | 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; |
| | | } |
| | | 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();// 报废数量 |
| | | 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 = 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) |
| | | { |
| | |
| | | try |
| | | { |
| | | //判断当前工单是否关闭 |
| | | sql = @"select * from TK_Wrk_Man where wo_code=@ordercode and wkshop_code=@stu_torgcode and status='CLOSED'"; |
| | | 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); |
| | |
| | | } |
| | | |
| | | //0.判断当前工单所属车间是否为当前登录人员车间 |
| | | sql = @"select * from TK_Wrk_Man where wo_code=@ordercode and wkshop_code=@stu_torgcode"; |
| | | 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); |
| | |
| | | } |
| | | |
| | | //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,L.org_code,L.org_name |
| | | 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"; |
| | |
| | | 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(); //产品规格 |
| | |
| | | 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"; |
| | |
| | | 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"; |
| | |
| | | } |
| | | 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"; |
| | |
| | | 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"; |
| | |
| | | } |
| | | 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"; |
| | |
| | | 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"; |
| | |
| | | { |
| | | 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 { |
| | | 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 { |
| | | }).Select(g => new |
| | | { |
| | | Name = g.Key.code, |
| | | tp = g.Key.name, |
| | | fqty = g.Sum(i => (decimal)i["fqty"]), |
| | |
| | | rt.startqty = fqty; //收料数量=本道发料数量 |
| | | // |
| | | data0.Merge(data1);//将指定的dt合并 |
| | | rt.list = data0.AsEnumerable().GroupBy(r => new { |
| | | 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 { |
| | | }).Select(g => new |
| | | { |
| | | Name = g.Key.code, |
| | | tp = g.Key.name, |
| | | fqty = g.Sum(i => (decimal)i["fqty"]), |
| | |
| | | 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"; |
| | |
| | | { |
| | | 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"], |
| | | rt.list = data1.AsEnumerable().GroupBy(r => new |
| | | { |
| | | wo_code = r["wo_code"], |
| | | step_code = r["step_code"], |
| | | code= r["code"], |
| | | code = r["code"], |
| | | name = r["name"] |
| | | }).Select(g => new { |
| | | Name = g.Key.code, |
| | | tp = g.Key.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 = "弹窗收料界面!"; |
| | |
| | | rt.reportqty = 0; //已收数量 |
| | | rt.startqty = fqty; //收料数量=本道发料数量 |
| | | data1.Merge(data2);//将指定的dt合并 |
| | | rt.list = data1.AsEnumerable().GroupBy(r => new { |
| | | 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 { |
| | | }).Select(g => new |
| | | { |
| | | Name = g.Key.code, |
| | | tp = g.Key.name, |
| | | fqty = g.Sum(i => (decimal)i["fqty"]), |