版博士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.
 
 
 
 

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