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; } } }