using Dapper; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using VueWebApi.DDKanBanModel; using VueWebApi.Models; using VueWebApi.Tools; namespace VueWebApi.DLL.DAL { public class KanBanManagerentDAL { public static DataTable dt; //定义全局变量dt public static bool res; //定义全局变量dt public static ToMessage mes = new ToMessage(); //定义全局返回信息对象 public static string strProcName = ""; //定义全局sql变量 public static List listStr = new List(); //定义全局参数集合 public static SqlParameter[] parameters; //定义全局SqlParameter参数数组 #region[正清和车间看板,获取生产车间] public static ToMessage ShopSearch() { string sql = ""; string search = ""; var dynamicParams = new DynamicParameters(); try { //获取车间信息 sql = @"select org_code ,org_name from TOrganization where is_delete='0' and description='W'"; var data = DapperHelper.selectdata(sql, dynamicParams); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间看板,左上产线加工任务接口] public static ToMessage LineSearchTopLeftData(string shopcode) { string sql = ""; List list = new List(); var dynamicParams = new DynamicParameters(); try { if (shopcode != null || shopcode != "") //产线编码不为空 { string[] selects = Array.ConvertAll(shopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] //查询产线下已开工的加工单信息 sql = @"select * from ( select distinct E.saleOrderCode,A.wo_code,P.plan_qty,M.partcode,M.partname,M.partspec,T.name as uomname,S.good_qty,S.ng_qty,S.bad_qty from TK_Wrk_Record A inner join TK_Wrk_Man P on A.wo_code=P.wo_code left join TMateriel_Info M on P.materiel_code=M.partcode left join TUom T on M.uom_code=T.code left join TKimp_Ewo E on P.m_po=E.wo and P.sourceid=E.id left join ( select wo_code,sum(good_qty) as good_qty,sum(ng_qty) as ng_qty,sum(bad_qty) as bad_qty from TK_Wrk_Step where isend='Y' group by wo_code ) S on P.wo_code=S.wo_code where P.status<>'CLOSED' and P.status<>'NEW' and P.wkshp_code in @shopcode and A.style='S' and A.step_seq='1' ) as AA where AA.plan_qty>=(AA.good_qty+aa.bad_qty+AA.ng_qty)"; var data0 = DapperHelper.selectlist(sql, new { shopcode = selects.ToArray() }); if (data0.Rows.Count > 0) { for (int j = 0; j < data0.Rows.Count; j++) { string saleOrderCode = data0.Rows[j]["SALEORDERCODE"].ToString();//销售订单号 string wo_code = data0.Rows[j]["WO_CODE"].ToString();//工单号 string plan_qty = data0.Rows[j]["PLAN_QTY"].ToString();//任务数量 string partcode = data0.Rows[j]["PARTCODE"].ToString();//产品编码 string partname = data0.Rows[j]["PARTNAME"].ToString();//产品名称 string partspec = data0.Rows[j]["PARTSPEC"].ToString();//产品规格 string uomname = data0.Rows[j]["UOMNAME"].ToString();//单位名称 ShopTopLeft lineone = new ShopTopLeft(); lineone.saleordercode = saleOrderCode; lineone.workcode = wo_code; lineone.qty = plan_qty; lineone.partnumber = partcode; lineone.partname = partname; lineone.partspec = partspec; lineone.uom = uomname; lineone.children = new List(); //查新工单下工序信息 sql = @"select A.seq,T.stepcode,T.stepname,A.plan_qty,A.start_qty,A.good_qty,A.ng_qty,A.status from TK_Wrk_Step A left join TStep T on A.step_code=T.stepcode where A.wo_code=@wo_code"; dynamicParams.Add("@wo_code", wo_code); var data1 = DapperHelper.selectdata(sql, dynamicParams); for (int k = 0; k < data1.Rows.Count; k++) { string stepseq = data1.Rows[k]["SEQ"].ToString();//工序序号 string stepcode = data1.Rows[k]["STEPCODE"].ToString();//工序编码 string stepname = data1.Rows[k]["STEPNAME"].ToString();//工序名称 string planqty = data1.Rows[k]["PLAN_QTY"].ToString();//任务数量 string startqty = data1.Rows[k]["START_QTY"].ToString();//开工数量 string good_qty = data1.Rows[k]["GOOD_QTY"].ToString();//报工数量 string ng_qty = data1.Rows[k]["NG_QTY"].ToString();//不良数量 string status = data1.Rows[k]["STATUS"].ToString();//状态 TreeTwo linetwo = new TreeTwo(); linetwo.stepseq = stepseq; linetwo.stepcode = stepcode; linetwo.stepname = stepname; linetwo.planqty = planqty; linetwo.startqty = startqty; linetwo.goodqty = good_qty; linetwo.ngqty = ng_qty; linetwo.status = status; lineone.children.Add(linetwo); } list.Add(lineone); } } else { mes.code = "300"; mes.Message = "当前车间下无在生产任务!"; mes.data = null; } } else { mes.code = "300"; mes.Message = "车间参数不能为空!"; mes.data = null; } } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } mes.code = "200"; mes.Message = "查询成功!"; mes.data = list; return mes; } #endregion\ #region[正清和车间看板,左下列表接口] public static ToMessage LineSearchBottomLeftData(string shopcode) { string sql = ""; var dynamicParams = new DynamicParameters(); string[] selects = Array.ConvertAll(shopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] try { //获取任务列表信息 sql = @"select A.*,ROW_NUMBER() OVER(ORDER BY (case when A.warning<=2 then A.planenddate end) asc ,A.planstartdate asc) AS RowNum from( select A.status,A.lm_date,E.saleOrderCode,A.wo_code,M.partcode,M.partname,M.partspec,U.name, A.plan_qty,B.good_qty,B.ng_qty,E.planstartdate,E.planenddate, datediff(day,getdate(),E.planenddate) warning from TK_Wrk_Man A inner join TK_Wrk_Step B on A.wo_code=B.wo_code inner join TKimp_Ewo E on A.m_po=E.wo and A.sourceid=E.id left join TMateriel_Info M on A.materiel_code=M.partcode left join TUom U on M.uom_code=U.code where A.status<>'CLOSED' and A.wkshp_code in @shopcode and A.is_delete<>'1' and B.isend='Y' and A.plan_qty>=(B.good_qty+B.ng_qty+B.bad_qty) )as A "; var data = DapperHelper.selectlist(sql, new { shopcode = selects.ToArray() }); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间看板,右上top排行接口,当日] public static ToMessage LineSearchTopRightData(string shopcode) { string sql = ""; var dynamicParams = new DynamicParameters(); string[] selects = Array.ConvertAll(shopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] try { //获取产品报工top5信息 sql = @"select top 5 A.org_name as wkshname,A.name as linename,A.partname,isnull(sum(A.good_qty),0) as good_qty from( select W.org_name,E.name,M.partname,A.good_qty from TK_Wrk_Record A inner join TK_Wrk_Step S on A.wo_code=S.wo_code and A.step_code=S.step_code inner join TMateriel_Info M on A.materiel_code=M.partcode inner join TEqpInfo E on A.eqp_code=E.code inner join TOrganization W on E.wksp_code=W.org_code and W.description='W' where A.style='B' and S.isend='Y' and W.org_code in @shopcode and datediff(day,GETDATE(),A.lm_date)=0 union all select C.name as linename,'' as wkshname,M.partname,A.sqty as good_qty from TK_Wrk_OutRecord A inner join TK_Wrk_Step S on A.wo_code=S.wo_code and A.step_code=S.step_code inner join TMateriel_Info M on A.materiel_code=M.partcode inner join TCustomer C on A.wx_code=C.code where A.style='S' and S.isend='Y' and datediff(day,GETDATE(),A.lm_date)=0 ) as A group by A.org_name,A.name,A.partname order by good_qty desc"; var data = DapperHelper.selectlist(sql, new { shopcode = selects.ToArray() }); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间看板,右下top排行接口,当前时间往前一周] public static ToMessage LineSearchBottomRightData(string shopcode) { string sql = ""; var dynamicParams = new DynamicParameters(); string[] selects = Array.ConvertAll(shopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] try { //获取报工不良次数top5信息 sql = @"select B.name, COUNT(*) as cont from CSR_WorkRecord_Defect A inner join TDefect B on CHARINDEX(',' + B.code + ',', ',' + A.defect_code + ',') > 0 inner join TK_Wrk_Man M on A.wo_code=M.wo_code where M.wkshp_code in @shopcode group by B.name order by cont desc"; var data = DapperHelper.selectlist(sql, new { shopcode = selects.ToArray() }); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间质量数字化看板,top5不良] public static ToMessage QCBadTop(string wkshopcode) { var sql = ""; var dynamicParams = new DynamicParameters(); Dictionary dir = new Dictionary(); try { string[] wkshoplist = Array.ConvertAll(wkshopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] sql = @"select * from h_v_DDKanBan_QCBadTop"; var data = DapperHelper.selecttable(sql); var top = data.AsEnumerable().GroupBy(row => row.Field("name")) .Select(group => new { name = group.Key, cont = group.Sum(row => row.Field("cont")) }).ToList(); dir.Add("ALL", top); for (int i = 0; i < wkshoplist.Length; i++) { var top0 = data.AsEnumerable() .Where(row => row.Field("wkshp_code")== wkshoplist[i].ToString()) // 添加查询条件 .GroupBy(row =>row.Field("name")) .Select(group => new { name = group.Key, cont = group.Sum(row => row.Field("cont")) }).ToList(); dir.Add(wkshoplist[i].ToString(), top0); } mes.code = "200"; mes.Message = "查询成功!"; mes.data = dir; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间质量数字化看板,左中周不良趋势] public static ToMessage QCBadCenterLeftWeek(string wkshopcode) { string sql = ""; Dictionary dir = new Dictionary(); try { //富尔达车间质量数字化看板,周不良趋势(当前时间往前一周) //存储过程名 string[] wkshoplist = Array.ConvertAll(wkshopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] sql = @"h_p_KanBan_QCBadCenterLeft"; for (int i = 0; i < wkshoplist.Length; i++) { var dynamicParams = new DynamicParameters(); dynamicParams.Add("@wkshop_code", wkshoplist[i].ToString()); var dt = DapperHelper.selectProcedure(sql, dynamicParams); dir.Add(wkshoplist[i].ToString(), dt); } mes.code = "200"; mes.Message = "查询成功!"; mes.data = dir; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间质量数字化看板,右中周完成数/率] public static ToMessage QCBadCenterRightWeek(string wkshopcode) { var sql = ""; var dynamicParams = new DynamicParameters(); Dictionary dir = new Dictionary(); try { string[] wkshoplist = Array.ConvertAll(wkshopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] sql = @"select * from h_v_DDKanBan_QCBadCenterRight"; var data = DapperHelper.selecttable(sql); for (int i = 0; i < wkshoplist.Length; i++) { var top0 = data.AsEnumerable() .Where(row => row.Field("wkshp_code") == wkshoplist[i].ToString()) // 添加查询条件 .Select(group => new { wkshp_code = group.Field("wkshp_code"), plan_qty= group.Field("plan_qty"), good_qty = group.Field("good_qty"), radio = group.Field("radio") }).ToList(); dir.Add(wkshoplist[i].ToString(), top0); } mes.code = "200"; mes.Message = "查询成功!"; mes.data = dir; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间质量数字化看板,下任务进度] public static ToMessage QCBadBottomWeek(string wkshopcode) { string sql = ""; var dynamicParams = new DynamicParameters(); try { string[] wkshoplist = Array.ConvertAll(wkshopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] sql = @"select * from h_v_DDKanBan_QCBadBottom where wkshp_code in @wkshoplist"; dynamicParams.Add("@wkshoplist", wkshoplist); var data = DapperHelper.selectdata(sql, dynamicParams); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和仓库看板,左上产品待入库列表] public static ToMessage WareHouseTopLeftData() { string sql = ""; try { //获取仓库生产加工单待入库列表 sql = @"select * from h_v_DDKanBan_WareHouseTopLeft order by voucherdate"; var data = DapperHelper.selecttable(sql); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和仓库看板,左下产品待发货列表] public static ToMessage WareHouseTopBottomData() { string sql = ""; try { //获取仓库生产加工单待入库列表 sql = @"select * from h_v_DDKanBan_WareHouseTopBottom order by voucherdate"; var data = DapperHelper.selecttable(sql); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和仓库看板,右上成品库、半成品库top5库存排行] public static ToMessage WareHouseRightTopData() { string sql = ""; try { sql = @"select * from h_v_DDKanBan_WareHouseRightTop"; var data = DapperHelper.selecttable(sql); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和仓库看板,右下原料库库top5库存排行] public static ToMessage WareHouseRightBottomData() { string sql = ""; try { sql = @"select * from h_v_DDKanBan_WareHouseRightBottom"; var data = DapperHelper.selecttable(sql); mes.code = "200"; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间综合看板,左上生产订单] public static ToMessage WorkShopCompreLeftTop(string wkshopcode) { var sql = ""; var dynamicParams = new DynamicParameters(); Dictionary dir = new Dictionary(); Dictionary dir0 = new Dictionary(); Dictionary dir1 = new Dictionary(); try { string[] wkshoplist = Array.ConvertAll(wkshopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] sql = @"select * from h_v_DDKanBan_WorkShopCompreLeftTop"; var data = DapperHelper.selecttable(sql); sql = @"select * from h_v_DDKanBan_WorkShopCompreLeftCenter"; var data1 = DapperHelper.selecttable(sql); for (int i = 0; i < wkshoplist.Length; i++) { var top0 = data.AsEnumerable() .Where(row => row.Field("wkshp_code") == wkshoplist[i].ToString()) // 添加查询条件 .Select(group => new { wkshp_code = group.Field("wkshp_code"), plan_qty = group.Field("plan_qty"), good_qty = group.Field("good_qty") }).DefaultIfEmpty(new { wkshp_code = wkshoplist[i].ToString(), plan_qty = 0m, good_qty = 0m })//为空时指定默认值 .ToList(); dir0.Add(wkshoplist[i].ToString(), top0); var top1 = data1.AsEnumerable() .Where(row => row.Field("wkshp_code") == wkshoplist[i].ToString()) // 添加查询条件 .Select(group => new { wkshp_code = group.Field("wkshp_code"), plan_qty = group.Field("plan_qty"), quantity = group.Field("quantity") }).DefaultIfEmpty(new { wkshp_code = wkshoplist[i].ToString(), plan_qty = 0m,quantity = 0m })//为空时指定默认值 .ToList(); dir1.Add(wkshoplist[i].ToString(), top1); } dir.Add("LeftTop", dir0); dir.Add("LeftBottom", dir1); mes.code = "200"; mes.Message = "查询成功!"; mes.data = dir; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间综合看板,右上销售订单] public static ToMessage WorkShopCompreRightTop() { var sql = ""; Dictionary dir = new Dictionary(); try { sql = @"select * from h_v_DDKanBan_WorkShopCompreRightTop"; var data = DapperHelper.selecttable(sql); sql = @"select * from h_v_DDKanBan_WorkShopCompreRightCenter"; var data1 = DapperHelper.selecttable(sql); dir.Add("RightTop", data); dir.Add("RightBottom", data1); mes.code = "200"; mes.Message = "查询成功!"; mes.data = dir; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[正清和车间综合看板,右下库存] public static ToMessage WorkShopCompreRightBottom() { var sql = ""; Dictionary dir = new Dictionary(); try { sql = @"select * from h_v_DDKanBan_WorkShopCompreRightBottom"; var data = DapperHelper.selecttable(sql); dir.Add("Y", data.Rows[0]["BaseQuantity"].ToString()); dir.Add("B", data.Rows[1]["BaseQuantity"].ToString()); dir.Add("C", data.Rows[2]["BaseQuantity"].ToString()); mes.code = "200"; mes.Message = "查询成功!"; mes.data = dir; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion } }