25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

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