版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

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