版博士V2.0程序
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

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