using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using VueWebCoreApi.Models;
namespace VueWebCoreApi.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
{
//判断当前工单是否关闭
sql = @"select * from TK_Wrk_Man where wo_code=@ordercode and status='CLOSED'";
dynamicParams.Add("@ordercode", ordercode);
var da0 = DapperHelper.selectdata(sql, dynamicParams);
if (da0.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.stepprice,A.seq,T.flwtype,T.descr,A.status,A.plan_quantity,A.plan_qty,A.isbott,A.isend,L.torg_code,L.torg_name
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
left join TOrganization L on M.wkshp_code=L.torg_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]["torg_code"].ToString(); //车间编码
rt.wkshopname = data.Rows[0]["torg_name"].ToString(); //车间名称
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.stepprice = data.Rows[0]["STEPPRICE"].ToString(); //工序工价
rt.planquantity = decimal.Parse(data.Rows[0]["PLAN_QUANTITY"].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,A.stepprice 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();//下道工序名称
rt.nextstepprice = dt.Rows[0]["STEPPRICE"].ToString(); //下道工序工价
}
if (isend == "Y") //当前工序是末道工序
{
rt.nextstepcode = "";//data.Rows[0]["STEPCODE"].ToString();//当前工序编码
rt.nextstepname = "";// data.Rows[0]["STEPNAME"].ToString();//当前工序名称
rt.nextstepprice = "";// data.Rows[0]["STEPPRICE"].ToString();//当前工序工价
}
}
else
{
mes.code = "300";
mes.count = 0;
mes.message = "当前工序任务不存在!";
mes.data = null;
return mes;
}
switch (flwtype)
{
case "Z": //自制工序
if (isbott == "Y") //首道工序
{
//首道工序时,判断是否有报工记录
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 laborbad_qty = data1.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //工废数量
decimal materielbad_qty = data1.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //料废数量
//剩余可报工数量=任务超产总数量-(报工数量+不良数量+工废废数量+料废数量)
decimal kbqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - (good_qty + ng_qty + laborbad_qty + materielbad_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.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - good_qty - ng_qty - laborbad_qty - materielbad_qty; //未报数量=任务超产总数量-已报数量-不良数量-工废数量-料废数量
rt.reportqty = good_qty + ng_qty + laborbad_qty + materielbad_qty; //已报数量=报工数量+不良数量+工废数量+料废数量
mes.code = "200";
mes.count = 1;
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 = 0; //已报数量
mes.code = "200";
mes.count = 1;
mes.message = "查找成功!";
mes.data = rt;
}
}
else //非首道工序
{
//查找当前工序上到工序(自制或者外协)
sql = @"select A.step_code,S.stepname,S.flwtype from TK_Wrk_Step A
left join TStep S on A.step_code=S.stepcode
where A.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)
{
//非首道工序时,判断本道是否有报工记录
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 laborbad_qty = data2.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道总工废数量
decimal materielbad_qty = data2.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道总料废数量
//本道剩余可报数量=上道报工总数量-本道报工总数量-本道不良总数量-本道工废总数-本道料废总数
decimal sybqty = sgood_qty - good_qty - ng_qty - laborbad_qty - materielbad_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.noreportqty = sybqty; //未报数量=本道剩余可报数量
rt.reportqty = good_qty + ng_qty + laborbad_qty + materielbad_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 laborbad_qty = data2.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道总工废数量
decimal materielbad_qty = data2.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道总料废数量
//本道剩余可报数量=上道收料总数量-本道报工总数量-本道不良总数量-本道总工废数量-本道总料废数量
decimal sybqty = sqty - good_qty - ng_qty - laborbad_qty - materielbad_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.noreportqty = sybqty; //未报数量=本道剩余可报数量
rt.reportqty = good_qty + ng_qty + laborbad_qty + materielbad_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; //本道剩余可报数量=上道报工数量
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; //已报数量
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; //本道剩余可收数量=上道收料数量
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.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;
}
}
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();
ScanStartReportDataOut rt = new ScanStartReportDataOut();
var dynamicParams = new DynamicParameters();
try
{
//判断当前工单是否关闭
sql = @"select * from TK_Wrk_Man where wo_code=@ordercode and status='CLOSED'";
dynamicParams.Add("@ordercode", ordercode);
var da0 = DapperHelper.selectdata(sql, dynamicParams);
if (da0.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.stepprice,A.status,A.plan_quantity,A.plan_qty,A.isbott,A.isend,L.torg_code,L.torg_name
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
left join TOrganization L on M.wkshp_code=L.torg_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]["torg_code"].ToString(); //车间编码
rt.wkshopname = data.Rows[0]["torg_name"].ToString(); //车间名称
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.planquantity = decimal.Parse(data.Rows[0]["PLAN_QUANTITY"].ToString()); //任务数量
rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务超产总数量
rt.stepprice = data.Rows[0]["STEPPRICE"].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,A.stepprice 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();//下道工序名称
rt.nextstepprice = dt.Rows[0]["STEPPRICE"].ToString(); //下道工序工价
}
if (isend == "Y") //当前工序是末道工序
{
rt.nextstepcode = "";// data.Rows[0]["STEPCODE"].ToString();//当前工序编码
rt.nextstepname = "";// data.Rows[0]["STEPNAME"].ToString();//当前工序名称
rt.nextstepprice = ""; //data.Rows[0]["NEXTSTEPPRICE"].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 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("FQTY")).Sum(); //发料数量
decimal ng_qty = data0.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();// 不良数量
decimal laborbad_qty = data0.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //工废数量
decimal materielbad_qty = data0.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //料废数量
decimal kfqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - fqty - ng_qty - laborbad_qty - materielbad_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 TK_Wrk_Step A
left join TStep S on A.step_code=S.stepcode
where A.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 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") //判断上道工序属性:自制工序
{
//查找上到工序报工记录
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 laborbad_qty = data1.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道工废数量
decimal materielbad_qty = data1.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道料废数量
//本道剩余可发数量=上道报工数量-本道发料数量-本道不良数量-本道工废数量-本道料废数量
decimal sybqty = sgood_qty - sqty - ng_qty - laborbad_qty - materielbad_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.noreportqty = sybqty; //未发数量=剩余可发数量
rt.reportqty = sqty + ng_qty + laborbad_qty + materielbad_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 laborbad_qty = data1.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道工废数量
decimal materielbad_qty = data1.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道料废数量
//本道剩余可发数量=上道收料数量-本道发料数量-本道不良数量-本道工废数量-本道料废数量
decimal sybqty = ssqty - sqty - ng_qty - laborbad_qty - materielbad_qty;
if (sybqty <= 0)
{
mes.code = "300";
mes.count = 0;
mes.message = "当前工序:" + data.Rows[0]["STEPNAME"].ToString() + "无可发数量!";
mes.data = null;
return mes;
}
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 + laborbad_qty + materielbad_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;//本道剩余可发数量=上道报工总数量
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; //已发数量
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
{
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; //已发数量
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 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.laborbad_qty),0) as laborbad_qty,isnull(sum(R.materielbad_qty),0) as materielbad_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 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.laborbad_qty),0) as laborbad_qty,isnull(sum(R.materielbad_qty),0) as materielbad_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);
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 laborbad_qty = data1.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道工废数量
decimal materielbad_qty = data1.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道料废数量
//剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道工废数量-本道料废数量
decimal ksqty = fqty - sqty - ng_qty - laborbad_qty - materielbad_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 + laborbad_qty + materielbad_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"]),
laborbad_qty = g.Sum(i => (decimal)i["laborbad_qty"]),
materielbad_qty = g.Sum(i => (decimal)i["materielbad_qty"])
}).ToList();
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; //收料数量=本道发料数量
//
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"]),
laborbad_qty = g.Sum(i => (decimal)i["laborbad_qty"]),
materielbad_qty = g.Sum(i => (decimal)i["materielbad_qty"])
}).ToList();
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 TK_Wrk_Step A
left join TStep S on A.step_code=S.stepcode
where A.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 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.laborbad_qty),0) as laborbad_qty,isnull(sum(R.materielbad_qty),0) as materielbad_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 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.laborbad_qty),0) as laborbad_qty,isnull(sum(R.materielbad_qty),0) as materielbad_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);
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 laborbad_qty = data2.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道工废数量
decimal materielbad_qty = data2.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道料废数量
//剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道工废数量-本道料废数量
decimal ksqty = fqty - sqty - ng_qty - laborbad_qty - materielbad_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 + laborbad_qty + materielbad_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"]),
laborbad_qty = g.Sum(i => (decimal)i["laborbad_qty"]),
materielbad_qty = g.Sum(i => (decimal)i["materielbad_qty"])
}).ToList();
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; //收料数量=本道发料数量
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"]),
laborbad_qty = g.Sum(i => (decimal)i["laborbad_qty"]),
materielbad_qty = g.Sum(i => (decimal)i["materielbad_qty"])
}).ToList();
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
#region[生产开报工:自制工序任务开报工判断:工单+工序条码,不按序生产]
///
/// 扫码信息为工单+工序条码
///
/// 工单编号
/// 工序编码
///
public static ToMessage NoZZEncodingSeach(string ordercode, string stepcode)
{
var sql = "";
string flwtype = ""; //工序属性
string isbott = ""; //首道工序
string isend = ""; //末道工序
List list = new List();
ScanStartReportData rt = new ScanStartReportData();
var dynamicParams = new DynamicParameters();
try
{
//判断当前工单是否关闭
sql = @"select * from TK_Wrk_Man where wo_code=@ordercode and status='CLOSED'";
dynamicParams.Add("@ordercode", ordercode);
var da0 = DapperHelper.selectdata(sql, dynamicParams);
if (da0.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.stepprice,A.seq,T.flwtype,T.descr,A.status,A.plan_quantity,A.plan_qty,A.isbott,A.isend,L.torg_code,L.torg_name
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
left join TOrganization L on M.wkshp_code=L.torg_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]["torg_code"].ToString(); //车间编码
rt.wkshopname = data.Rows[0]["torg_name"].ToString(); //车间名称
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.stepprice = data.Rows[0]["STEPPRICE"].ToString(); //工序工价
rt.planquantity = decimal.Parse(data.Rows[0]["PLAN_QUANTITY"].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,A.stepprice 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();//下道工序名称
rt.nextstepprice = dt.Rows[0]["STEPPRICE"].ToString(); //下道工序工价
}
if (isend == "Y") //当前工序是末道工序
{
rt.nextstepcode = "";//data.Rows[0]["STEPCODE"].ToString();//当前工序编码
rt.nextstepname = "";// data.Rows[0]["STEPNAME"].ToString();//当前工序名称
rt.nextstepprice = "";// data.Rows[0]["STEPPRICE"].ToString();//当前工序工价
}
}
else
{
mes.code = "300";
mes.count = 0;
mes.message = "当前工序任务不存在!";
mes.data = null;
return mes;
}
switch (flwtype)
{
case "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", 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 laborbad_qty = data1.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //工废数量
decimal materielbad_qty = data1.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //料废数量
//剩余可报工数量=任务数量-(报工数量+不良数量+工废废数量+料废数量)
decimal kbqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - (good_qty + ng_qty + laborbad_qty + materielbad_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.noreportqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - good_qty - ng_qty - laborbad_qty - materielbad_qty; //未报数量=任务数量-已报数量-不良数量-工废数量-料废数量
rt.reportqty = good_qty + ng_qty + laborbad_qty + materielbad_qty; //已报数量=报工数量+不良数量+工废数量+料废数量
mes.code = "200";
mes.count = 1;
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 = 0; //已报数量
mes.code = "200";
mes.count = 1;
mes.message = "查找成功!";
mes.data = rt;
}
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 NoWXEncodingSeach(string SelectType, string ordercode, string stepcode)
{
var sql = "";
string flwtype = ""; //工序属性
string isbott = ""; //首道工序
string isend = ""; //末道工序
List list = new List();
ScanStartReportDataOut rt = new ScanStartReportDataOut();
var dynamicParams = new DynamicParameters();
try
{
//判断当前工单是否关闭
sql = @"select * from TK_Wrk_Man where wo_code=@ordercode and status='CLOSED'";
dynamicParams.Add("@ordercode", ordercode);
var da0 = DapperHelper.selectdata(sql, dynamicParams);
if (da0.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.stepprice,A.status,A.plan_quantity,A.plan_qty,A.isbott,A.isend,L.torg_code,L.torg_name
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
left join TOrganization L on M.wkshp_code=L.torg_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]["torg_code"].ToString(); //车间编码
rt.wkshopname = data.Rows[0]["torg_name"].ToString(); //车间名称
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.planquantity = decimal.Parse(data.Rows[0]["PLAN_QUANTITY"].ToString()); //任务数量
rt.planqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()); //任务超产总数量
rt.stepprice = data.Rows[0]["STEPPRICE"].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,A.stepprice 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();//下道工序名称
rt.nextstepprice = dt.Rows[0]["STEPPRICE"].ToString(); //下道工序工价
}
if (isend == "Y") //当前工序是末道工序
{
rt.nextstepcode = "";// data.Rows[0]["STEPCODE"].ToString();//当前工序编码
rt.nextstepname = "";// data.Rows[0]["STEPNAME"].ToString();//当前工序名称
rt.nextstepprice = ""; //data.Rows[0]["NEXTSTEPPRICE"].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":
//1.判断是否有发料记录
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("FQTY")).Sum(); //发料数量
decimal ng_qty = data0.AsEnumerable().Select(d => d.Field("NG_QTY")).Sum();// 不良数量
decimal laborbad_qty = data0.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //工废数量
decimal materielbad_qty = data0.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //料废数量
decimal kfqty = decimal.Parse(data.Rows[0]["PLAN_QTY"].ToString()) - fqty - ng_qty - laborbad_qty - materielbad_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;
}
break;
default:
break;
}
break;
case "IN": //收料
switch (flwtype)
{
case "Z"://自制
mes.code = "300";
mes.count = 0;
mes.message = "当前标签为自制标签,请前往自制操作标签页扫码!";
mes.data = null;
break;
case "W":
//1.判断是否有发料记录
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.laborbad_qty),0) as laborbad_qty,isnull(sum(R.materielbad_qty),0) as materielbad_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 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.laborbad_qty),0) as laborbad_qty,isnull(sum(R.materielbad_qty),0) as materielbad_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 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 laborbad_qty = data1.AsEnumerable().Select(d => d.Field("LABORBAD_QTY")).Sum(); //本道工废数量
decimal materielbad_qty = data1.AsEnumerable().Select(d => d.Field("MATERIELBAD_QTY")).Sum(); //本道料废数量
//剩余可发数量=本道发料数量-本道收料数量-本道不良数量-本道工废数量-本道料废数量
decimal ksqty = fqty - sqty - ng_qty - laborbad_qty - materielbad_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 + laborbad_qty + materielbad_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"]),
laborbad_qty = g.Sum(i => (decimal)i["laborbad_qty"]),
materielbad_qty = g.Sum(i => (decimal)i["materielbad_qty"])
}).ToList();
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; //收料数量=本道发料数量
//
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"]),
laborbad_qty = g.Sum(i => (decimal)i["laborbad_qty"]),
materielbad_qty = g.Sum(i => (decimal)i["materielbad_qty"])
}).ToList();
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;
}
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
}
}