版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

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