StandardsApplicationService.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. using System;
  2. using Abp.Auditing;
  3. using Abp.Authorization;
  4. using Abp.Domain.Repositories;
  5. using IwbZero.AppServiceBase;
  6. using ShwasherSys.Authorization.Permissions;
  7. using ShwasherSys.ProductInfo.Dto;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Linq.Dynamic.Core;
  12. using System.Reflection;
  13. using System.Threading.Tasks;
  14. using System.Web.Mvc;
  15. using Abp.Application.Services.Dto;
  16. using Castle.Core.Internal;
  17. using IwbZero.Helper;
  18. using MiniExcelLibs;
  19. using NPOI.SS.Formula.Functions;
  20. namespace ShwasherSys.ProductInfo
  21. {
  22. [AbpAuthorize]
  23. public class StandardsAppService : ShwasherAsyncCrudAppService<Standard, StandardDto, int, PagedRequestDto, StandardCreateDto, StandardUpdateDto >, IStandardsAppService
  24. {
  25. public StandardsAppService(IRepository<Standard, int> repository, IRepository<StandardCatalog> standardCatalogRepository, IRepository<StandardDetail> standardDetailRepository) : base(repository, "StandardName")
  26. {
  27. StandardCatalogRepository = standardCatalogRepository;
  28. StandardDetailRepository = standardDetailRepository;
  29. KeyIsAuto = false;
  30. }
  31. protected override string GetPermissionName { get; set; } = PermissionNames.PagesProductInfoStandards;
  32. protected override string GetAllPermissionName { get; set; } = PermissionNames.PagesProductInfoStandards;
  33. protected override string CreatePermissionName { get; set; } = PermissionNames.PagesProductInfoStandardsCreate;
  34. protected override string UpdatePermissionName { get; set; } = PermissionNames.PagesProductInfoStandardsUpdate;
  35. protected override string DeletePermissionName { get; set; } = PermissionNames.PagesProductInfoStandardsDelete;
  36. protected IRepository<StandardCatalog> StandardCatalogRepository { get; }
  37. protected IRepository<StandardDetail> StandardDetailRepository { get; }
  38. [DisableAuditing]
  39. public List<SelectListItem> GetStandardsList()
  40. {
  41. var objList = new List<SelectListItem>();
  42. var entitys = Repository.GetAll();
  43. foreach (var standard in entitys)
  44. {
  45. objList.Add(new SelectListItem()
  46. {
  47. Text = standard.StandardName,
  48. Value = standard.Id+""
  49. });
  50. }
  51. return objList;
  52. }
  53. [DisableAuditing]
  54. public async Task<PagedResultDto<StandardCatalogDto>> GetAllCatalog(PagedRequestDto input)
  55. {
  56. CheckGetAllPermission();
  57. var query = StandardCatalogRepository.GetAll();
  58. if (input.SearchList != null && input.SearchList.Count > 0)
  59. {
  60. List<LambdaObject> objList = new List<LambdaObject>();
  61. foreach (var o in input.SearchList)
  62. {
  63. if (o.KeyWords.IsNullOrEmpty())
  64. continue;
  65. objList.Add(new LambdaObject()
  66. {
  67. FieldType = (LambdaFieldType)o.FieldType,
  68. FieldName = o.KeyField,
  69. FieldValue = o.KeyWords,
  70. ExpType = (LambdaExpType)o.ExpType
  71. });
  72. }
  73. var exp = objList.GetExp<StandardCatalog>();
  74. if (exp != null)
  75. {
  76. query = query.Where(exp);
  77. }
  78. }
  79. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  80. query = query.OrderBy(i=>i.Id);
  81. query = query.Skip(input.SkipCount).Take(input.MaxResultCount);
  82. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  83. var dtos = new PagedResultDto<StandardCatalogDto>(
  84. totalCount,
  85. ObjectMapper.Map<List<StandardCatalogDto>>(entities)
  86. );
  87. return dtos;
  88. }
  89. [DisableAuditing]
  90. public async Task<PagedResultDto<StandardDetailDto>> GetDetail(PagedRequestDto input)
  91. {
  92. CheckGetAllPermission();
  93. var query = StandardDetailRepository.GetAll();
  94. if (input.SearchList != null && input.SearchList.Count > 0)
  95. {
  96. List<LambdaObject> objList = new List<LambdaObject>();
  97. foreach (var o in input.SearchList)
  98. {
  99. if (o.KeyWords.IsNullOrEmpty())
  100. continue;
  101. if (o.KeyField == "innerDiameter")
  102. {
  103. var innerDi = Convert.ToDecimal(o.KeyWords);
  104. query = query.Where(i=> innerDi>=i.InnerDiameter1&& innerDi <= i.InnerDiameter2);
  105. continue;
  106. }
  107. if (o.KeyField == "outDiameter")
  108. {
  109. var outDi = Convert.ToDecimal(o.KeyWords);
  110. query = query.Where(i => outDi >= i.OutDiameter1 && outDi <= i.OutDiameter2);
  111. continue;
  112. }
  113. objList.Add(new LambdaObject()
  114. {
  115. FieldType = (LambdaFieldType)o.FieldType,
  116. FieldName = o.KeyField,
  117. FieldValue = o.KeyWords,
  118. ExpType = (LambdaExpType)o.ExpType
  119. });
  120. }
  121. var exp = objList.GetExp<StandardDetail>();
  122. if (exp != null)
  123. {
  124. query = query.Where(exp);
  125. }
  126. }
  127. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  128. query = query.OrderBy(i => i.Specs);
  129. query = query.Skip(input.SkipCount).Take(input.MaxResultCount);
  130. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  131. var dtos = new PagedResultDto<StandardDetailDto>(
  132. totalCount,
  133. ObjectMapper.Map<List<StandardDetailDto>>(entities)
  134. );
  135. return dtos;
  136. }
  137. [DisableAuditing]
  138. public async Task<PagedResultDto<StandardDetailDto>> GetDetailView(PagedRequestDto input)
  139. {
  140. CheckGetAllPermission();
  141. var de = StandardDetailRepository.GetAll();
  142. var cq = StandardCatalogRepository.GetAll();
  143. var query = from detail in de
  144. join catalog in cq on detail.StandardId equals catalog.Id into l
  145. from lua in l.DefaultIfEmpty()
  146. select new StandardDetailDto
  147. {
  148. Id = detail.Id,
  149. StandardId = detail.StandardId,
  150. Height1 = detail.Height1,
  151. Height2 = detail.Height2,
  152. InnerChamfer1 = detail.InnerChamfer1,
  153. InnerChamfer2 = detail.InnerChamfer2,
  154. InnerDiameter1 = detail.InnerDiameter1,
  155. InnerDiameter2 = detail.InnerDiameter2,
  156. OutChamfer1 = detail.OutChamfer1,
  157. OutChamfer2 = detail.OutChamfer2,
  158. OutDiameter1 = detail.OutDiameter1,
  159. OutDiameter2 = detail.OutDiameter2,
  160. Thickness1 = detail.Thickness1,
  161. Thickness2 = detail.Thickness2,
  162. ThousandWeigh = detail.ThousandWeigh,
  163. StandardName = detail.StandardName,
  164. StandardAbbrName = lua.StandardAbbrName,
  165. StandardAbbr = lua.StandardAbbr,
  166. StandardFullName = lua.StandardName,
  167. Specs = detail.Specs,
  168. Model = detail.Model
  169. };
  170. if (input.SearchList != null && input.SearchList.Count > 0)
  171. {
  172. List<LambdaObject> objList = new List<LambdaObject>();
  173. foreach (var o in input.SearchList)
  174. {
  175. if (o.KeyWords.IsNullOrEmpty())
  176. continue;
  177. if (o.KeyField == "innerDiameter")
  178. {
  179. var innerDi = Convert.ToDecimal(o.KeyWords);
  180. query = query.Where(i => innerDi >= i.InnerDiameter1 && innerDi <= i.InnerDiameter2);
  181. continue;
  182. }
  183. if (o.KeyField == "outDiameter")
  184. {
  185. var outDi = Convert.ToDecimal(o.KeyWords);
  186. query = query.Where(i => outDi >= i.OutDiameter1 && outDi <= i.OutDiameter2);
  187. continue;
  188. }
  189. objList.Add(new LambdaObject()
  190. {
  191. FieldType = (LambdaFieldType)o.FieldType,
  192. FieldName = o.KeyField,
  193. FieldValue = o.KeyWords,
  194. ExpType = (LambdaExpType)o.ExpType
  195. });
  196. }
  197. var exp = objList.GetExp<StandardDetailDto>();
  198. if (exp != null)
  199. {
  200. query = query.Where(exp);
  201. }
  202. }
  203. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  204. query = query.OrderBy(i => i.StandardId);
  205. query = query.Skip(input.SkipCount).Take(input.MaxResultCount);
  206. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  207. var dtos = new PagedResultDto<StandardDetailDto>(
  208. totalCount, entities
  209. //ObjectMapper.Map<List<StandardDetailDto>>(entities)
  210. );
  211. return dtos;
  212. }
  213. [DisableAuditing]
  214. public async Task<StandardCatalog> GetCatalog(int id)
  215. {
  216. var entity = await StandardCatalogRepository.GetAsync(id);
  217. return entity;
  218. }
  219. #region 数据测试导入
  220. [DisableAuditing]
  221. public async Task ImportData()
  222. {
  223. //using var stream = File.OpenRead("C:\\Users\\Lenovo\\Desktop\\项目文档目录\\shwasher\\垫圈标准目录.xlsx");
  224. //var rows = (await stream.QueryAsync(true)).ToList();
  225. ////rows[0].序号
  226. //foreach (dynamic row in rows)
  227. //{
  228. // //var ss = row["序号"];
  229. // StandardCatalog catalog = new StandardCatalog()
  230. // {
  231. // Id = Convert.ToInt32(row.序号),
  232. // StandardAbbr=row.简写,
  233. // StandardAbbrName = row.标准简称,
  234. // StandardName = row.标准完整名称,
  235. // Rigidity = row.硬度,
  236. // Param = row.参数,
  237. // Drawing = row.图纸
  238. // };
  239. // await StandardCatalogRepository.InsertAsync(catalog);
  240. //}
  241. using var stream = File.OpenRead("D:\\workstation\\Iwb-workstation-2022\\Shwasher\\docs\\2025-垫圈标准\\标准明细整理-导入数据.xlsx");
  242. var rows = (await stream.QueryAsync(true)).ToList();
  243. //rows[0].序号
  244. try
  245. {
  246. foreach (dynamic row in rows)
  247. {
  248. //var ss = row["序号"];
  249. int standardId = Convert.ToInt32(row.编号);
  250. if (standardId == 0)
  251. {
  252. break;
  253. }
  254. string standardName = row.名称 + "";
  255. string specs = row.规格 + "";
  256. string innerDiameter1 = SplitEx(row.内径);
  257. string innerDiameter2 = SplitEx(row.内径, 1);
  258. string outDiameter1 = SplitEx(row.外径);
  259. string outDiameter2 = SplitEx(row.外径, 1);
  260. string thickness1 = SplitEx(row.厚度);
  261. string thickness2 = SplitEx(row.厚度, 1);
  262. string innerChamfer1 = SplitEx(row.内倒角);
  263. string innerChamfer2 = SplitEx(row.内倒角, 1);
  264. string outChamfer1 = SplitEx(row.外倒角);
  265. string outChamfer2 = SplitEx(row.外倒角, 1);
  266. string height1 = SplitEx(row.高度);
  267. string height2 = SplitEx(row.高度, 1);
  268. string thousandWeigh = row.千件重 + "";
  269. string modelName = row.型号 + "";
  270. StandardDetail detail = new StandardDetail()
  271. {
  272. StandardId = standardId,
  273. StandardName = standardName,
  274. Specs = specs,
  275. InnerDiameter1 = Convert.ToDecimal(innerDiameter1),
  276. InnerDiameter2 = Convert.ToDecimal(innerDiameter2),
  277. OutDiameter1 = Convert.ToDecimal(outDiameter1),
  278. OutDiameter2 = Convert.ToDecimal(outDiameter2),
  279. OutChamfer1 = Convert.ToDecimal(outChamfer1),
  280. OutChamfer2 = Convert.ToDecimal(outChamfer2),
  281. InnerChamfer1 = Convert.ToDecimal(innerChamfer1),
  282. InnerChamfer2 = Convert.ToDecimal(innerChamfer2),
  283. Thickness1 = Convert.ToDecimal(thickness1),
  284. Thickness2 = Convert.ToDecimal(thickness2),
  285. Height1 = Convert.ToDecimal(height1),
  286. Height2 = Convert.ToDecimal(height2),
  287. ThousandWeigh = Convert.ToDecimal(thousandWeigh.IsNullOrEmpty() ? "0" : thousandWeigh),
  288. Model = modelName
  289. };
  290. await StandardDetailRepository.InsertAsync(detail);
  291. }
  292. }
  293. catch (Exception e)
  294. {
  295. Console.WriteLine(e);
  296. throw;
  297. }
  298. }
  299. private string SplitEx(dynamic input, int index = 0)
  300. {
  301. string str = input?.ToString();
  302. if (str.IsNullOrEmpty())
  303. {
  304. return "0";
  305. }
  306. string[] split=null;
  307. if (str.IndexOf("~", StringComparison.Ordinal)>0)
  308. {
  309. split = str?.Split(new[] { '~' }, StringSplitOptions.None);
  310. }else if (str.IndexOf("/", StringComparison.Ordinal) > 0)
  311. {
  312. split = str?.Split(new[] { '/' }, StringSplitOptions.None);
  313. }else if (str.IndexOf("-", StringComparison.Ordinal) > 0)
  314. {
  315. split = str?.Split(new[] { '-' }, StringSplitOptions.None);
  316. }
  317. else
  318. {
  319. return str.Trim();
  320. }
  321. //如果没有数值用0
  322. //if (split?.Length == 0)
  323. //{
  324. // return "0";
  325. //}
  326. //如果只有一个数值,那最大和最小值相同
  327. //if (split?.Length == 1 && index == 1)
  328. //{
  329. // return split[0].Trim();
  330. //}
  331. return split?[index].Trim();
  332. }
  333. [DisableAuditing]
  334. public async Task ImportData2()
  335. {
  336. var standardDetails = await StandardDetailRepository.GetAllListAsync();
  337. foreach (var detail in standardDetails)
  338. {
  339. var standardCatalog = await StandardCatalogRepository.GetAsync(detail.StandardId);
  340. detail.StandardName = standardCatalog.StandardAbbr + " M" + detail.Specs;
  341. await StandardDetailRepository.UpdateAsync(detail);
  342. //detail.Specs = detail.Specs.TrimStart();
  343. //await StandardDetailRepository.UpdateAsync(detail);
  344. }
  345. }
  346. #endregion
  347. }
  348. }