StandardsApplicationService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  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. };
  169. if (input.SearchList != null && input.SearchList.Count > 0)
  170. {
  171. List<LambdaObject> objList = new List<LambdaObject>();
  172. foreach (var o in input.SearchList)
  173. {
  174. if (o.KeyWords.IsNullOrEmpty())
  175. continue;
  176. if (o.KeyField == "innerDiameter")
  177. {
  178. var innerDi = Convert.ToDecimal(o.KeyWords);
  179. query = query.Where(i => innerDi >= i.InnerDiameter1 && innerDi <= i.InnerDiameter2);
  180. continue;
  181. }
  182. if (o.KeyField == "outDiameter")
  183. {
  184. var outDi = Convert.ToDecimal(o.KeyWords);
  185. query = query.Where(i => outDi >= i.OutDiameter1 && outDi <= i.OutDiameter2);
  186. continue;
  187. }
  188. objList.Add(new LambdaObject()
  189. {
  190. FieldType = (LambdaFieldType)o.FieldType,
  191. FieldName = o.KeyField,
  192. FieldValue = o.KeyWords,
  193. ExpType = (LambdaExpType)o.ExpType
  194. });
  195. }
  196. var exp = objList.GetExp<StandardDetailDto>();
  197. if (exp != null)
  198. {
  199. query = query.Where(exp);
  200. }
  201. }
  202. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  203. query = query.OrderBy(i => i.StandardId);
  204. query = query.Skip(input.SkipCount).Take(input.MaxResultCount);
  205. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  206. var dtos = new PagedResultDto<StandardDetailDto>(
  207. totalCount, entities
  208. //ObjectMapper.Map<List<StandardDetailDto>>(entities)
  209. );
  210. return dtos;
  211. }
  212. [DisableAuditing]
  213. public async Task<StandardCatalog> GetCatalog(int id)
  214. {
  215. var entity = await StandardCatalogRepository.GetAsync(id);
  216. return entity;
  217. }
  218. #region 数据测试导入
  219. [DisableAuditing]
  220. public async Task ImportData()
  221. {
  222. //using var stream = File.OpenRead("C:\\Users\\Lenovo\\Desktop\\项目文档目录\\shwasher\\垫圈标准目录.xlsx");
  223. //var rows = (await stream.QueryAsync(true)).ToList();
  224. ////rows[0].序号
  225. //foreach (dynamic row in rows)
  226. //{
  227. // //var ss = row["序号"];
  228. // StandardCatalog catalog = new StandardCatalog()
  229. // {
  230. // Id = Convert.ToInt32(row.序号),
  231. // StandardAbbr=row.简写,
  232. // StandardAbbrName = row.标准简称,
  233. // StandardName = row.标准完整名称,
  234. // Rigidity = row.硬度,
  235. // Param = row.参数,
  236. // Drawing = row.图纸
  237. // };
  238. // await StandardCatalogRepository.InsertAsync(catalog);
  239. //}
  240. using var stream = File.OpenRead("C:\\Users\\Lenovo\\Desktop\\项目文档目录\\shwasher\\标准明细整理-导入数据.xlsx");
  241. var rows = (await stream.QueryAsync(true)).ToList();
  242. //rows[0].序号
  243. foreach (dynamic row in rows)
  244. {
  245. //var ss = row["序号"];
  246. int standardId = Convert.ToInt32(row.编号);
  247. string standardName = row.名称 + "";
  248. string specs = row.规格 + "";
  249. string innerDiameter1 = SplitEx(row.内径);
  250. string innerDiameter2 = SplitEx(row.内径, 1);
  251. string outDiameter1 = SplitEx(row.外径);
  252. string outDiameter2 = SplitEx(row.外径, 1);
  253. string thickness1 = SplitEx(row.厚度);
  254. string thickness2 = SplitEx(row.厚度, 1);
  255. string innerChamfer1 = SplitEx(row.内倒角);
  256. string innerChamfer2 = SplitEx(row.内倒角, 1);
  257. string outChamfer1 = SplitEx(row.外倒角);
  258. string outChamfer2 = SplitEx(row.外倒角, 1);
  259. string height1 = SplitEx(row.高度);
  260. string height2 = SplitEx(row.高度, 1);
  261. string thousandWeigh = row.千件重 + "";
  262. StandardDetail detail = new StandardDetail()
  263. {
  264. StandardId = standardId,
  265. StandardName = standardName,
  266. Specs = specs,
  267. InnerDiameter1 = Convert.ToDecimal(innerDiameter1),
  268. InnerDiameter2 = Convert.ToDecimal(innerDiameter2),
  269. OutDiameter1 = Convert.ToDecimal(outDiameter1),
  270. OutDiameter2 = Convert.ToDecimal(outDiameter2),
  271. OutChamfer1 = Convert.ToDecimal(outChamfer1),
  272. OutChamfer2 = Convert.ToDecimal(outChamfer2),
  273. InnerChamfer1 = Convert.ToDecimal(innerChamfer1),
  274. InnerChamfer2 = Convert.ToDecimal(innerChamfer2),
  275. Thickness1 = Convert.ToDecimal(thickness1),
  276. Thickness2 = Convert.ToDecimal(thickness2),
  277. Height1 = Convert.ToDecimal(height1),
  278. Height2 = Convert.ToDecimal(height2),
  279. ThousandWeigh = Convert.ToDecimal(thousandWeigh.IsNullOrEmpty() ? "0" : thousandWeigh)
  280. };
  281. await StandardDetailRepository.InsertAsync(detail);
  282. }
  283. }
  284. private string SplitEx(dynamic input, int index = 0)
  285. {
  286. string str = input?.ToString();
  287. if (str.IsNullOrEmpty())
  288. {
  289. return "0";
  290. }
  291. string[] split=null;
  292. if (str.IndexOf("~", StringComparison.Ordinal)>0)
  293. {
  294. split = str?.Split(new[] { '~' }, StringSplitOptions.None);
  295. }else if (str.IndexOf("/", StringComparison.Ordinal) > 0)
  296. {
  297. split = str?.Split(new[] { '/' }, StringSplitOptions.None);
  298. }
  299. else
  300. {
  301. return str.Trim();
  302. }
  303. //如果没有数值用0
  304. //if (split?.Length == 0)
  305. //{
  306. // return "0";
  307. //}
  308. //如果只有一个数值,那最大和最小值相同
  309. //if (split?.Length == 1 && index == 1)
  310. //{
  311. // return split[0].Trim();
  312. //}
  313. return split?[index].Trim();
  314. }
  315. [DisableAuditing]
  316. public async Task ImportData2()
  317. {
  318. var standardDetails = await StandardDetailRepository.GetAllListAsync();
  319. foreach (var detail in standardDetails)
  320. {
  321. var standardCatalog = await StandardCatalogRepository.GetAsync(detail.StandardId);
  322. detail.StandardName = standardCatalog.StandardAbbr + " M" + detail.Specs;
  323. await StandardDetailRepository.UpdateAsync(detail);
  324. //detail.Specs = detail.Specs.TrimStart();
  325. //await StandardDetailRepository.UpdateAsync(detail);
  326. }
  327. }
  328. #endregion
  329. }
  330. }