using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
namespace VueWebApi.Tools
{
public class AutosCloseOrder
{
public static string sql;
public static DynamicParameters dynamicParams = new DynamicParameters();
///
/// 判断是否自动关单
///
/// 工单号
/// 产品编码
/// 工序序号
/// 工序编码
/// 报工合格数量
/// 报工不良数量
///
public static List AutosColseOrderReport(List list, string mesordercode,string partcode, string stepseq, string stepcode, string reportqty, string ngqty)
{
//根据当前工单号查询任务单中末道工序编码及报工数量
sql = @"select seq,step_code,plan_qty,good_qty,ng_qty from TK_Wrk_Step
where wo_code=@wo_code and isend='Y'";
dynamicParams.Add("@wo_code", mesordercode);
var data = DapperHelper.selectdata(sql, dynamicParams);
if (data.Rows.Count > 0)
{
//获取末道工序当次累计报工数量
decimal sumreport_qty = decimal.Parse(reportqty) + decimal.Parse(data.Rows[0]["good_qty"].ToString());
//判断末道工序当次累计报工数量是否>=任务数量
if (sumreport_qty >= decimal.Parse(data.Rows[0]["plan_qty"].ToString()))
{
//关闭工序任务单
sql = @"update TK_Wrk_Step set status='CLOSED' where wo_code=@mesordercode";
list.Add(new { str = sql, parm = new { mesordercode = mesordercode} });
//关闭工单
sql = @"update TK_Wrk_Man set status='CLOSED' where wo_code=@mesordercode";
list.Add(new { str = sql, parm = new { mesordercode = mesordercode} });
//根据工单号、产品编码查询所属订单编号
sql = @"select sourceid,m_po from TK_Wrk_Man
where wo_code=@wo_code and materiel_code=@partcode";
dynamicParams.Add("@wo_code", mesordercode);
dynamicParams.Add("@partcode", partcode);
var data1 = DapperHelper.selectdata(sql, dynamicParams);
if (data1.Rows.Count > 0 && data1.Rows[0]["m_po"].ToString() != null)
{
//根据订单号查询非当前工单的所有工单数量及工单状态
sql = @"select plan_qty,status from TK_Wrk_Man
where m_po=@m_po and materiel_code=@partcode and wo_code<>@wo_code";
dynamicParams.Add("@m_po", data1.Rows[0]["m_po"].ToString());
dynamicParams.Add("@partcode", partcode);
dynamicParams.Add("@wo_code", mesordercode);
var data2 = DapperHelper.selectdata(sql, dynamicParams);
if (data2.Rows.Count > 0)
{
//获取非当前工单(同物料)任务总数+当前工单的任务数量
decimal sumplanqty = data2.AsEnumerable().Select(d => d.Field("plan_qty")).Sum()+ decimal.Parse(data.Rows[0]["plan_qty"].ToString()); //任务总数
//判断非当前工单(同物料)单据状态是否全部为关闭状态
if (data2.AsEnumerable().Select(d => d.Field("status")).Distinct().Count()==1)
{
//根据订单号、物料编码查询订单数量
sql = @"select isnull(qty,0) as qty from TKimp_Ewo
where wo=@m_po and materiel_code=@partcode and id=@sourceid";
dynamicParams.Add("@m_po", data1.Rows[0]["m_po"].ToString());
dynamicParams.Add("@partcode", partcode);
dynamicParams.Add("@sourceid", data1.Rows[0]["sourceid"].ToString());
var data3 = DapperHelper.selectdata(sql, dynamicParams);
if (decimal.Parse(data3.Rows[0]["qty"].ToString()) == sumplanqty)
{
//关闭订单
sql = @"update TKimp_Ewo set status='CLOSED' where wo=@mesordercode and materiel_code=@materiel_code and id=@sourceid";
list.Add(new { str = sql, parm = new { mesordercode = mesordercode, materiel_code = partcode, sourceid= data1.Rows[0]["sourceid"].ToString() } });
}
}
}
}
}
}
return list;
}
}
}