版博士V2.0程序
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

362 satır
16 KiB

  1. using Models;
  2. using Newtonsoft.Json;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Dynamic;
  7. using System.Linq;
  8. using System.Linq.Expressions;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace Service
  12. {
  13. public class OrderService : Repository<Models.Order>
  14. {
  15. public bool InsertNav(Models.Order model)
  16. {
  17. return base.AsSugarClient().InsertNav(model)
  18. .Include(m => m.OrderHistoryList)
  19. .Include(a => a.DefectInfoList)
  20. .Include (b => b.SizeDefectInfoList)
  21. .ExecuteCommand();
  22. }
  23. public bool DelNav(Models.Order model)
  24. {
  25. return base.AsSugarClient().DeleteNav(model)
  26. .Include(a => a.OrderHistoryList)
  27. .Include(a => a.DefectInfoList)//.ThenInclude(z1 => z1.RoomList) //插入2层 Root->ShoolA->RoomList
  28. .Include(b => b.SizeDefectInfoList)
  29. .ExecuteCommand();
  30. }
  31. public int UpdateNav(Models.Order model)
  32. {
  33. return base.AsSugarClient().Updateable(model).IgnoreColumns(ignoreAllNullColumns: true)
  34. .ExecuteCommand();
  35. }
  36. //-----------------------
  37. public List<ExpandoObject> GetList(string tablename, string fields, string domain, string orderby)
  38. {
  39. int totalCount=0;
  40. return GetList(tablename,fields, domain, orderby, 0, 0, ref totalCount);
  41. }
  42. public List<ExpandoObject> GetList(string tablename,string fields, string domain, string orderby, int pageNum, int pageSize, ref int totalCount)
  43. {
  44. var sql = base.AsSugarClient().Queryable(tablename,"");
  45. if (!string.IsNullOrWhiteSpace(domain))
  46. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  47. if (!string.IsNullOrWhiteSpace(fields) && fields!="*")
  48. sql = sql.Select(fields);
  49. if (!string.IsNullOrWhiteSpace(orderby))
  50. sql = sql.OrderBy(orderby);
  51. else
  52. sql = sql.OrderBy("id desc");
  53. if(pageNum==0 && pageSize == 0)
  54. return sql.ToList();
  55. else
  56. return sql.ToPageList(pageNum, pageSize, ref totalCount);
  57. }
  58. public List<Order> GetListEx(string fields, string domain, string orderby, int pageNum, int pageSize, ref int totalCount)
  59. {
  60. var sql = base.AsSugarClient().Queryable<Order>()
  61. .Includes(m => m.StepInfo)
  62. .Includes(m => m.ProductInfo).Includes(m => m.ProductInfo.AttachmentList)
  63. .Includes(m => m.DefectInfoList)
  64. .Includes(m => m.OrderHistoryList)
  65. .Includes(m => m.SizeDefectInfoList);
  66. //var sql = base.AsSugarClient().Queryable(tablename, "");
  67. if (!string.IsNullOrWhiteSpace(domain))
  68. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  69. if (!string.IsNullOrWhiteSpace(fields) && fields != "*")
  70. sql = sql.Select(fields);
  71. if (!string.IsNullOrWhiteSpace(orderby))
  72. sql = sql.OrderBy(orderby);
  73. else
  74. sql = sql.OrderBy("id desc");
  75. if (pageNum == 0 && pageSize == 0)
  76. return sql.ToList();
  77. else
  78. return sql.ToPageList(pageNum, pageSize, ref totalCount);
  79. }
  80. public int DeleteList(string tablename, string domain)
  81. {
  82. var where = base.Context.Utilities.JsonToConditionalModels(domain);
  83. return base.AsSugarClient().Deleteable<object>().AS(tablename).Where(where).ExecuteCommand();//批量
  84. }
  85. //public int DeleteIdList(string tablename, int[] ids)
  86. //{
  87. // return base.AsSugarClient().Deleteable<object>().AS(tablename).Where("Id in (@id) ", new { id = ids }).ExecuteCommand();//批量
  88. //}
  89. /// <summary>
  90. /// 批量更新+新增
  91. /// </summary>
  92. /// <param name="tablename"></param>
  93. /// <param name="lstDatas"></param>
  94. /// <returns></returns>
  95. public int UpdateableList(string tablename, string lstDatas,string[] updateColumns=null)
  96. {
  97. int result = 0;
  98. var list = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(lstDatas);
  99. base.AsSugarClient().Ado.BeginTran();
  100. foreach (Dictionary<string, object> item in list)
  101. {
  102. if (!item.ContainsKey("Id") || Convert.ToInt32(item["Id"]) < 1)
  103. result += base.AsSugarClient().Insertable(item).AS(tablename).ExecuteCommand();
  104. else
  105. {
  106. if(updateColumns==null || updateColumns.Length==0)
  107. result += base.AsSugarClient().Updateable(item).WhereColumns("Id").AS(tablename).ExecuteCommand();
  108. else
  109. result += base.AsSugarClient().Updateable(item).UpdateColumns(updateColumns).WhereColumns("Id").AS(tablename).ExecuteCommand();
  110. }
  111. }
  112. base.AsSugarClient().Ado.CommitTran();
  113. return result;
  114. }
  115. public bool UpdateableListEx(Order order)
  116. {
  117. return base.AsSugarClient().UpdateNav(order)
  118. .Include(m => m.OrderHistoryList)
  119. .ExecuteCommand();
  120. }
  121. public List<Order> GetListNav(int pageNum, int pageSize, ref int totalCount, Expression<Func<Order, bool>> exp)
  122. {
  123. return base.AsSugarClient().Queryable<Order>()
  124. .Includes(m => m.ProductInfo.ToList(x => new Product() { Name = x.Name, Spec = x.Spec }))
  125. .Includes(m => m.StepInfo.ToList(x => new Step() { Name = x.Name }))
  126. .Where(exp)
  127. .ToPageList(pageNum, pageSize, ref totalCount);
  128. }
  129. public Order GetModelNav(string sn)
  130. {
  131. return base.AsSugarClient().Queryable<Order>()
  132. .Includes(m => m.ProductInfo,x=>x.AssistStepInfo, info => info.ProcessList.OrderBy(x => x.Order).ToList()) //多级
  133. .Includes(m => m.DefectInfoList)
  134. .First(m => m.SN == sn);
  135. }
  136. //获取产品
  137. public List<Product> GetProductList()
  138. {
  139. var db = base.Change<Product>();//切换仓储(新功能)
  140. return db.AsSugarClient().Queryable<Product>()
  141. .OrderBy(x => x.Name)
  142. .ToList();
  143. }
  144. //获取流程工序
  145. public List<Step> GetStepList()
  146. {
  147. var db = base.Change<Step>();//切换仓储(新功能)
  148. return db.AsSugarClient().Queryable<Step>()
  149. .OrderBy(x => x.Name)
  150. .ToList();
  151. }
  152. //分页
  153. //public List<Models.User> GetOrderPage(Expression<Func<Models.User, bool>> where, int pagesize, int pageindex)
  154. //{
  155. // return base.GetPageList(where, new SqlSugar.PageModel() { PageIndex = pageindex, PageSize = pagesize }); //使用自已的仓储方法
  156. //}
  157. //调用仓储扩展方法
  158. //public List<Models.User> GetOrderByJson(string Json)
  159. //{
  160. // return base.CommQuery(Json);
  161. //}
  162. /// <summary>
  163. /// 按产品和批次 统计 合格率
  164. /// </summary>
  165. /// <param name="domain"></param>
  166. /// <param name="orderby"></param>
  167. /// <param name="pageNum"></param>
  168. /// <param name="pageSize"></param>
  169. /// <param name="totalCount"></param>
  170. /// <returns></returns>
  171. public string GetReport_Qualified( string domain, string orderby,int pageNum, int pageSize, ref int totalCount)
  172. {
  173. var sql = base.AsSugarClient().Queryable<Order>()
  174. .LeftJoin<Product>((a, b) => a.ProductId == b.Id);
  175. if (!string.IsNullOrWhiteSpace(domain))
  176. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  177. var sql2 = sql.GroupBy((a,b) => new { a.ProductId,b.Name,b.Code, a.BatchId })
  178. .Select((a,b) => new { a.ProductId,b.Name,b.Code, a.BatchId, Qualified = SqlFunc.AggregateSum(a.Qualified ? 1 : 0), Total = SqlFunc.AggregateSum(1) });
  179. if (!string.IsNullOrWhiteSpace(orderby))
  180. sql2 = sql2.OrderBy(orderby);
  181. if (pageNum == 0 && pageSize == 0)
  182. return sql2.ToJson();
  183. else
  184. return sql2.ToJsonPage(pageNum, pageSize, ref totalCount);
  185. }
  186. /// <summary>
  187. /// 按日期统计合格率(日期段<=30,因只显示天)
  188. /// </summary>
  189. /// <param name="domain"></param>
  190. /// <param name="orderby"></param>
  191. /// <param name="pageNum"></param>
  192. /// <param name="pageSize"></param>
  193. /// <param name="totalCount"></param>
  194. /// <returns></returns>
  195. public string GetReport_Qualified_Date(string domain, string orderby, int pageNum, int pageSize, ref int totalCount)
  196. {
  197. var sql = base.AsSugarClient().Queryable<Order>();
  198. if (!string.IsNullOrWhiteSpace(domain))
  199. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  200. var sql2 = sql.GroupBy((a) => new { CreateTime = a.CreateTime.Date }) //DATE_FORMAT(NOW(), '%Y-%m-%d')
  201. .Select((a) => new { a.CreateTime.Date, Qualified = SqlFunc.AggregateSum(a.Qualified ? 1 : 0), Total = SqlFunc.AggregateSum(1) });
  202. if (!string.IsNullOrWhiteSpace(orderby))
  203. sql2 = sql2.OrderBy(orderby);
  204. if (pageNum == 0 && pageSize == 0)
  205. return sql2.ToJson();
  206. else
  207. return sql2.ToJsonPage(pageNum, pageSize, ref totalCount);
  208. }
  209. /// <summary>
  210. /// 合格率[0,100,50,50]
  211. /// </summary>
  212. /// <param name="domain"></param>
  213. /// <returns></returns>
  214. public List<List<int>> GetReport_Qualified_Total()
  215. {
  216. List<List<int>> result =new List<List<int>>();
  217. int liQualifiedCount, liTotal;
  218. DateTime now = DateTime.Now.AddDays(-1);
  219. //DateTime now = DateTime.Parse("2023-6-13");
  220. //当天
  221. var sql = base.AsSugarClient().Queryable<Order>();//只能执行一次,不能复用
  222. liQualifiedCount = liTotal = 0;
  223. var list=sql.Where(m=>m.CreateTime>=now.Date && !SqlFunc.EqualsNull(m.Qualified,null))
  224. .GroupBy(m=>m.Qualified)
  225. .Select((a) => new { a.Qualified, Count= SqlFunc.AggregateCount(a.Id) })
  226. .ToList();
  227. foreach(var item in list)
  228. {
  229. if (item.Qualified)
  230. liQualifiedCount = item.Count;
  231. liTotal += item.Count;
  232. }
  233. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  234. result.Add(new List<int>{ liTotal, liQualifiedCount });
  235. //最近一月
  236. sql = base.AsSugarClient().Queryable<Order>();
  237. now = DateTime.Now.AddDays(-30);
  238. liQualifiedCount = liTotal = 0;
  239. list = sql.Where(m => m.CreateTime >= now.Date && !SqlFunc.EqualsNull(m.Qualified, null))
  240. .GroupBy(m => m.Qualified)
  241. .Select((a) => new { a.Qualified, Count = SqlFunc.AggregateCount(a.Id) })
  242. .ToList();
  243. foreach (var item in list)
  244. {
  245. if (item.Qualified)
  246. liQualifiedCount = item.Count;
  247. liTotal += item.Count;
  248. }
  249. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  250. result.Add(new List<int> { liTotal, liQualifiedCount });
  251. //最近一季
  252. sql = base.AsSugarClient().Queryable<Order>();
  253. now = DateTime.Now.AddDays(-90);
  254. liQualifiedCount = liTotal = 0;
  255. list = sql.Where(m => m.CreateTime >= now.Date && !SqlFunc.EqualsNull(m.Qualified, null))
  256. .GroupBy(m => m.Qualified)
  257. .Select((a) => new { a.Qualified, Count = SqlFunc.AggregateCount(a.Id) })
  258. .ToList();
  259. foreach (var item in list)
  260. {
  261. if (item.Qualified)
  262. liQualifiedCount = item.Count;
  263. liTotal += item.Count;
  264. }
  265. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  266. result.Add(new List<int> { liTotal, liQualifiedCount });
  267. //最近一年
  268. sql = base.AsSugarClient().Queryable<Order>();
  269. now = DateTime.Now.AddDays(-365);
  270. liQualifiedCount = liTotal = 0;
  271. list = sql.Where(m => m.CreateTime >= now.Date && !SqlFunc.EqualsNull(m.Qualified, null))
  272. .GroupBy(m => m.Qualified)
  273. .Select((a) => new { a.Qualified, Count = SqlFunc.AggregateCount(a.Id) })
  274. .ToList();
  275. foreach (var item in list)
  276. {
  277. if (item.Qualified)
  278. liQualifiedCount = item.Count;
  279. liTotal += item.Count;
  280. }
  281. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  282. result.Add(new List<int> { liTotal, liQualifiedCount });
  283. return result;
  284. }
  285. /// <summary>
  286. /// 按日期统计各缺陷数
  287. /// </summary>
  288. /// <param name="domain"></param>
  289. /// <param name="orderby"></param>
  290. /// <param name="pageNum"></param>
  291. /// <param name="pageSize"></param>
  292. /// <param name="totalCount"></param>
  293. /// <returns></returns>
  294. public string GetReport_Defects_Date(string domain, string orderby, int pageNum, int pageSize, ref int totalCount)
  295. {
  296. var sql = base.AsSugarClient().Queryable<Order>();
  297. if (!string.IsNullOrWhiteSpace(domain))
  298. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  299. var sql2 = sql.GroupBy((a) => new { CreateTime = a.CreateTime.Date })
  300. .Select((a) => new { a.CreateTime.Date,
  301. Total = SqlFunc.AggregateSum(1),
  302. 堵孔 = SqlFunc.AggregateSum(a.DKCount),
  303. 脏污 = SqlFunc.AggregateSum(a.ZWCount),
  304. 钢丝异常 = SqlFunc.AggregateSum(a.GSYCCount),
  305. 纤维丝 = SqlFunc.AggregateSum(a.XWSCount),
  306. 缺口 = SqlFunc.AggregateSum(a.QKCount),
  307. 针孔 = SqlFunc.AggregateSum(a.ZKCount),
  308. 泡泡 = SqlFunc.AggregateSum(a.PPCount),
  309. 划伤 = SqlFunc.AggregateSum(a.HSCount),
  310. 压线 = SqlFunc.AggregateSum(a.YXCount),
  311. 斜边 = SqlFunc.AggregateSum(a.XBCount),
  312. 栅线 = SqlFunc.AggregateSum(a.SXCount),
  313. });
  314. if (!string.IsNullOrWhiteSpace(orderby))
  315. sql2 = sql2.OrderBy(orderby);
  316. if (pageNum == 0 && pageSize == 0)
  317. return sql2.ToJson();
  318. else
  319. return sql2.ToJsonPage(pageNum, pageSize, ref totalCount);
  320. }
  321. /// <summary>
  322. /// 缺陷总数
  323. /// </summary>
  324. /// <param name="domain"></param>
  325. /// <returns></returns>
  326. public string GetReport_Defects_Total(string domain)
  327. {
  328. var sql = base.AsSugarClient().Queryable<Order>();
  329. if (!string.IsNullOrWhiteSpace(domain))
  330. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  331. return sql.Select((a) => new {
  332. 堵孔 = SqlFunc.AggregateSum(a.DKCount),
  333. 脏污 = SqlFunc.AggregateSum(a.ZWCount),
  334. 钢丝异常 = SqlFunc.AggregateSum(a.GSYCCount),
  335. 纤维丝 = SqlFunc.AggregateSum(a.XWSCount),
  336. 缺口 = SqlFunc.AggregateSum(a.QKCount),
  337. 针孔 = SqlFunc.AggregateSum(a.ZKCount),
  338. 泡泡 = SqlFunc.AggregateSum(a.PPCount),
  339. 划伤 = SqlFunc.AggregateSum(a.HSCount),
  340. 压线 = SqlFunc.AggregateSum(a.YXCount),
  341. 斜边 = SqlFunc.AggregateSum(a.XBCount),
  342. 栅线 = SqlFunc.AggregateSum(a.SXCount),
  343. }).ToJson();
  344. }
  345. }
  346. }