版博士V2.0程序
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

392 linhas
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. .Includes(b => b.SizeDefectInfoList)
  142. .Includes(b => b.SizeDefectAverageInfoList)
  143. .First(m => m.SN == sn);
  144. }
  145. /// <summary>
  146. /// 根据检测工单号获取当前工单的检测数据
  147. /// </summary>
  148. /// <param name="defectCode"></param>
  149. /// <returns></returns>
  150. public List<Order> GetListNav(string defectCode)
  151. {
  152. return base.AsSugarClient().Queryable<Order>()
  153. .Includes(m => m.ProductInfo, x => x.AssistStepInfo, info => info.ProcessList.OrderBy(x => x.Order).ToList()) //多级
  154. .Includes(m => m.DefectInfoList)
  155. .Includes(b => b.DefectCntInfoList)
  156. .Includes(b => b.SizeDefectInfoList)
  157. .Includes(b => b.SizeDefectAverageInfoList)
  158. .Where(it => it.DetectOrder.Equals(defectCode)).ToList();
  159. }
  160. //获取产品
  161. public List<Product> GetProductList()
  162. {
  163. var db = base.Change<Product>();//切换仓储(新功能)
  164. return db.AsSugarClient().Queryable<Product>()
  165. .OrderBy(x => x.Name)
  166. .ToList();
  167. }
  168. //获取流程工序
  169. public List<Step> GetStepList()
  170. {
  171. var db = base.Change<Step>();//切换仓储(新功能)
  172. return db.AsSugarClient().Queryable<Step>()
  173. .OrderBy(x => x.Name)
  174. .ToList();
  175. }
  176. //分页
  177. //public List<Models.User> GetOrderPage(Expression<Func<Models.User, bool>> where, int pagesize, int pageindex)
  178. //{
  179. // return base.GetPageList(where, new SqlSugar.PageModel() { PageIndex = pageindex, PageSize = pagesize }); //使用自已的仓储方法
  180. //}
  181. //调用仓储扩展方法
  182. //public List<Models.User> GetOrderByJson(string Json)
  183. //{
  184. // return base.CommQuery(Json);
  185. //}
  186. /// <summary>
  187. /// 按产品和批次 统计 合格率
  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( string domain, string orderby,int pageNum, int pageSize, ref int totalCount)
  196. {
  197. var sql = base.AsSugarClient().Queryable<Order>()
  198. .LeftJoin<Product>((a, b) => a.ProductId == b.Id);
  199. if (!string.IsNullOrWhiteSpace(domain))
  200. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  201. var sql2 = sql.GroupBy((a,b) => new { a.ProductId,b.Name,b.Code, a.BatchId })
  202. .Select((a,b) => new { a.ProductId,b.Name,b.Code, a.BatchId, Qualified = SqlFunc.AggregateSum(a.Qualified ? 1 : 0), Total = SqlFunc.AggregateSum(1) });
  203. if (!string.IsNullOrWhiteSpace(orderby))
  204. sql2 = sql2.OrderBy(orderby);
  205. if (pageNum == 0 && pageSize == 0)
  206. return sql2.ToJson();
  207. else
  208. return sql2.ToJsonPage(pageNum, pageSize, ref totalCount);
  209. }
  210. /// <summary>
  211. /// 按日期统计合格率(日期段<=30,因只显示天)
  212. /// </summary>
  213. /// <param name="domain"></param>
  214. /// <param name="orderby"></param>
  215. /// <param name="pageNum"></param>
  216. /// <param name="pageSize"></param>
  217. /// <param name="totalCount"></param>
  218. /// <returns></returns>
  219. public string GetReport_Qualified_Date(string domain, string orderby, int pageNum, int pageSize, ref int totalCount)
  220. {
  221. var sql = base.AsSugarClient().Queryable<Order>();
  222. if (!string.IsNullOrWhiteSpace(domain))
  223. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  224. var sql2 = sql.GroupBy((a) => new { CreateTime = a.CreateTime.Date }) //DATE_FORMAT(NOW(), '%Y-%m-%d')
  225. .Select((a) => new { a.CreateTime.Date, Qualified = SqlFunc.AggregateSum(a.Qualified ? 1 : 0), Total = SqlFunc.AggregateSum(1) });
  226. if (!string.IsNullOrWhiteSpace(orderby))
  227. sql2 = sql2.OrderBy(orderby);
  228. if (pageNum == 0 && pageSize == 0)
  229. return sql2.ToJson();
  230. else
  231. return sql2.ToJsonPage(pageNum, pageSize, ref totalCount);
  232. }
  233. /// <summary>
  234. /// 合格率[0,100,50,50]
  235. /// </summary>
  236. /// <param name="domain"></param>
  237. /// <returns></returns>
  238. public List<List<int>> GetReport_Qualified_Total()
  239. {
  240. List<List<int>> result =new List<List<int>>();
  241. int liQualifiedCount, liTotal;
  242. DateTime now = DateTime.Now.AddDays(-1);
  243. //DateTime now = DateTime.Parse("2023-6-13");
  244. //当天
  245. var sql = base.AsSugarClient().Queryable<Order>();//只能执行一次,不能复用
  246. liQualifiedCount = liTotal = 0;
  247. var list=sql.Where(m=>m.CreateTime>=now.Date && !SqlFunc.EqualsNull(m.Qualified,null))
  248. .GroupBy(m=>m.Qualified)
  249. .Select((a) => new { a.Qualified, Count= SqlFunc.AggregateCount(a.Id) })
  250. .ToList();
  251. foreach(var item in list)
  252. {
  253. if (item.Qualified)
  254. liQualifiedCount = item.Count;
  255. liTotal += item.Count;
  256. }
  257. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  258. result.Add(new List<int>{ liTotal, liQualifiedCount });
  259. //最近一月
  260. sql = base.AsSugarClient().Queryable<Order>();
  261. now = DateTime.Now.AddDays(-30);
  262. liQualifiedCount = liTotal = 0;
  263. list = sql.Where(m => m.CreateTime >= now.Date && !SqlFunc.EqualsNull(m.Qualified, null))
  264. .GroupBy(m => m.Qualified)
  265. .Select((a) => new { a.Qualified, Count = SqlFunc.AggregateCount(a.Id) })
  266. .ToList();
  267. foreach (var item in list)
  268. {
  269. if (item.Qualified)
  270. liQualifiedCount = item.Count;
  271. liTotal += item.Count;
  272. }
  273. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  274. result.Add(new List<int> { liTotal, liQualifiedCount });
  275. //最近一季
  276. sql = base.AsSugarClient().Queryable<Order>();
  277. now = DateTime.Now.AddDays(-90);
  278. liQualifiedCount = liTotal = 0;
  279. list = sql.Where(m => m.CreateTime >= now.Date && !SqlFunc.EqualsNull(m.Qualified, null))
  280. .GroupBy(m => m.Qualified)
  281. .Select((a) => new { a.Qualified, Count = SqlFunc.AggregateCount(a.Id) })
  282. .ToList();
  283. foreach (var item in list)
  284. {
  285. if (item.Qualified)
  286. liQualifiedCount = item.Count;
  287. liTotal += item.Count;
  288. }
  289. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  290. result.Add(new List<int> { liTotal, liQualifiedCount });
  291. //最近一年
  292. sql = base.AsSugarClient().Queryable<Order>();
  293. now = DateTime.Now.AddDays(-365);
  294. liQualifiedCount = liTotal = 0;
  295. list = sql.Where(m => m.CreateTime >= now.Date && !SqlFunc.EqualsNull(m.Qualified, null))
  296. .GroupBy(m => m.Qualified)
  297. .Select((a) => new { a.Qualified, Count = SqlFunc.AggregateCount(a.Id) })
  298. .ToList();
  299. foreach (var item in list)
  300. {
  301. if (item.Qualified)
  302. liQualifiedCount = item.Count;
  303. liTotal += item.Count;
  304. }
  305. //result.Add(liTotal == 0 ? 0 : (liQualifiedCount * 100 / liTotal));
  306. result.Add(new List<int> { liTotal, liQualifiedCount });
  307. return result;
  308. }
  309. /// <summary>
  310. /// 按日期统计各缺陷数
  311. /// </summary>
  312. /// <param name="domain"></param>
  313. /// <param name="orderby"></param>
  314. /// <param name="pageNum"></param>
  315. /// <param name="pageSize"></param>
  316. /// <param name="totalCount"></param>
  317. /// <returns></returns>
  318. public string GetReport_Defects_Date(string domain, string orderby, int pageNum, int pageSize, ref int totalCount)
  319. {
  320. var sql = base.AsSugarClient().Queryable<Order>();
  321. if (!string.IsNullOrWhiteSpace(domain))
  322. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  323. var sql2 = sql.GroupBy((a) => new { CreateTime = a.CreateTime.Date })
  324. .Select((a) => new { a.CreateTime.Date,
  325. Total = SqlFunc.AggregateSum(1),
  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. //断栅 = SqlFunc.AggregateSum(a.DSCount),
  338. //钢丝断裂 = SqlFunc.AggregateSum(a.GSDLCount),
  339. //残胶堵孔 = SqlFunc.AggregateSum(a.CJDKCount),
  340. });
  341. if (!string.IsNullOrWhiteSpace(orderby))
  342. sql2 = sql2.OrderBy(orderby);
  343. if (pageNum == 0 && pageSize == 0)
  344. return sql2.ToJson();
  345. else
  346. return sql2.ToJsonPage(pageNum, pageSize, ref totalCount);
  347. }
  348. /// <summary>
  349. /// 缺陷总数
  350. /// </summary>
  351. /// <param name="domain"></param>
  352. /// <returns></returns>
  353. public string GetReport_Defects_Total(string domain)
  354. {
  355. var sql = base.AsSugarClient().Queryable<Order>();
  356. if (!string.IsNullOrWhiteSpace(domain))
  357. sql = sql.Where(base.Context.Utilities.JsonToConditionalModels(domain));
  358. return sql.Select((a) => new {
  359. 堵孔 = SqlFunc.AggregateSum(a.DKCount),
  360. 脏污 = SqlFunc.AggregateSum(a.ZWCount),
  361. 钢丝异常 = SqlFunc.AggregateSum(a.GSYCCount),
  362. 纤维丝 = SqlFunc.AggregateSum(a.XWSCount),
  363. 缺口 = SqlFunc.AggregateSum(a.QKCount),
  364. 针孔 = SqlFunc.AggregateSum(a.ZKCount),
  365. 泡泡 = SqlFunc.AggregateSum(a.PPCount),
  366. 划伤 = SqlFunc.AggregateSum(a.HSCount),
  367. 压线 = SqlFunc.AggregateSum(a.YXCount),
  368. 斜边 = SqlFunc.AggregateSum(a.XBCount),
  369. 格栅 = SqlFunc.AggregateSum(a.SXCount),
  370. //断栅 = SqlFunc.AggregateSum(a.DSCount),
  371. //钢丝断裂 = SqlFunc.AggregateSum(a.GSDLCount),
  372. //残胶堵孔 = SqlFunc.AggregateSum(a.CJDKCount),
  373. }).ToJson();
  374. }
  375. }
  376. }