OrderHeadersApplicationService.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Dynamic.Core;
  5. using System.Threading.Tasks;
  6. using Abp.Application.Services.Dto;
  7. using Abp.Auditing;
  8. using Abp.Authorization;
  9. using Abp.Domain.Repositories;
  10. using Abp.Extensions;
  11. using Abp.Json;
  12. using Abp.Runtime.Caching;
  13. using Abp.Timing;
  14. using IwbZero.AppServiceBase;
  15. using IwbZero.IdentityFramework;
  16. using IwbZero.Setting;
  17. using NPOI.OpenXmlFormats.Dml;
  18. using ShwasherSys.Authorization.Permissions;
  19. using ShwasherSys.BaseSysInfo;
  20. using ShwasherSys.BaseSysInfo.States;
  21. using ShwasherSys.Common;
  22. using ShwasherSys.CompanyInfo;
  23. using ShwasherSys.CustomerInfo;
  24. using ShwasherSys.EntityFramework;
  25. using ShwasherSys.Lambda;
  26. using ShwasherSys.NotificationInfo;
  27. using ShwasherSys.NotificationInfo.Dto;
  28. using ShwasherSys.Order.Dto;
  29. namespace ShwasherSys.Order
  30. {
  31. [AbpAuthorize]
  32. public class OrderHeadersAppService : ShwasherAsyncCrudAppService<OrderHeader, OrderHeaderDto, string, PagedRequestDto, OrderHeaderCreateDto, OrderHeaderUpdateDto >, IOrderHeadersAppService
  33. {
  34. protected IShortMessagesAppService ShortMessagesAppService;
  35. protected IStatesAppService StatesAppService;
  36. // protected IIwbSettingManager SettingManager;
  37. protected IRepository<CustomerSend> CustomerSendRepository;
  38. protected IRepository<BusinessLog> BusinessLogRepository;
  39. protected IRepository<OrderItem> OrderItemRepository;
  40. protected ICommonAppService CommonAppService { get; }
  41. protected IRepository<Employee> EmployeeRepository { get; }
  42. protected ISqlExecuter SqlExecuter { get; }
  43. public OrderHeadersAppService(ICacheManager cacheManager, IRepository<OrderHeader, string> repository, IShortMessagesAppService shortMessagesAppService, IIwbSettingManager settingManager, IStatesAppService statesAppService, IRepository<CustomerSend> customerSendRepository, IRepository<BusinessLog> businessLogRepository, ICommonAppService commonAppService, IRepository<OrderItem> orderItemRepository, IRepository<Employee> employeeRepository, ISqlExecuter sqlExecuter) : base(repository)
  44. {
  45. ShortMessagesAppService = shortMessagesAppService;
  46. StatesAppService = statesAppService;
  47. CustomerSendRepository = customerSendRepository;
  48. SettingManager = settingManager;
  49. BusinessLogRepository = businessLogRepository;
  50. CommonAppService = commonAppService;
  51. OrderItemRepository = orderItemRepository;
  52. EmployeeRepository = employeeRepository;
  53. SqlExecuter = sqlExecuter;
  54. CacheManager = cacheManager;
  55. }
  56. protected override string GetPermissionName { get; set; } = PermissionNames.PagesOrderInfoOrderMg;
  57. protected override string GetAllPermissionName { get; set; } = PermissionNames.PagesOrderInfoOrderMg;
  58. protected override string CreatePermissionName { get; set; } = PermissionNames.PagesOrderInfoOrderMgCreate;
  59. protected override string UpdatePermissionName { get; set; } = PermissionNames.PagesOrderInfoOrderMgUpdate;
  60. protected override string DeletePermissionName { get; set; } = PermissionNames.PagesOrderInfoOrderMgDelete;
  61. public override async Task<OrderHeaderDto> Get(EntityDto<string> input)
  62. {
  63. CheckGetPermission();
  64. if (!KeyFiledName.IsNullOrEmpty() && input.Id == null)
  65. {
  66. return await GetDtoByNoAsync(input.GetFiledValue<string>(KeyFiledName));
  67. }
  68. var entity = await GetEntityByIdAsync(input.Id);
  69. var customerSend = CustomerSendRepository.Get(entity.CustomerSendId);
  70. var dto = MapToEntityDto(entity);
  71. dto.CustomerSendName = customerSend.CustomerSendName;
  72. dto.OrderStatusName =
  73. StatesAppService.GetDisplayValue("OrderHeader", "OrderStatusId", dto.OrderStatusId + "");
  74. dto.SendAdress = customerSend.SendAdress;
  75. return dto;
  76. }
  77. public override async Task<PagedResultDto<OrderHeaderDto>> GetAll(PagedRequestDto input)
  78. {
  79. CheckGetAllPermission();
  80. var query = CreateFilteredQuery(input);
  81. // CacheManager.GetCache(ShwasherConsts.EmployeeCache).GetAsync("",()=>ViewEmployeeRepository.GetAllList())
  82. if (input.SearchList != null && input.SearchList.Count > 0)
  83. {
  84. List<LambdaObject> objList = new List<LambdaObject>();
  85. foreach (var o in input.SearchList)
  86. {
  87. if (o.KeyWords.IsNullOrEmpty())
  88. continue;
  89. object keyWords = o.KeyWords;
  90. objList.Add(new LambdaObject
  91. {
  92. FieldType = (LambdaFieldType)o.FieldType,
  93. FieldName = o.KeyField,
  94. FieldValue = keyWords,
  95. ExpType = (LambdaExpType)o.ExpType
  96. });
  97. }
  98. var exp = objList.GetExp<OrderHeader>();
  99. query = query.Where(exp);
  100. }
  101. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  102. query = query.OrderByDescending(i=>i.TimeCreated);
  103. query = query.Skip(input.SkipCount).Take(input.MaxResultCount);
  104. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  105. var employeeList = EmployeeRepository.GetAllList();
  106. var dtos = new PagedResultDto<OrderHeaderDto>(
  107. totalCount,
  108. entities.Select(i=>new OrderHeaderDto()
  109. {
  110. CustomerId = i.CustomerId,
  111. CustomerSendId = i.CustomerSendId,
  112. Fax = i.Fax,
  113. LinkName = i.LinkName,
  114. Id = i.Id,
  115. OrderDate = i.OrderDate,
  116. OrderStatusId = i.OrderStatusId,
  117. OrderStatusName = StatesAppService.GetDisplayValue("OrderHeader", "OrderStatusId", i.OrderStatusId+""),
  118. StockNo = i.StockNo,
  119. Telephone = i.Telephone,TimeLastMod = i.TimeLastMod,UserIDLastMod = i.UserIDLastMod,TimeCreated = i.TimeCreated,
  120. SaleType = i.SaleType,
  121. SaleTypeName = StatesAppService.GetDisplayValue("OrderHeader", "SaleType", i.SaleType + ""),
  122. SaleMan= i.SaleMan,
  123. SaleManName = employeeList.FirstOrDefault(a=>a.No == i.SaleMan)?.Name,
  124. IsLock = i.IsLock
  125. }).ToList()
  126. );
  127. return dtos;
  128. }
  129. /// <summary>
  130. /// 获取新建订单的编号
  131. /// </summary>
  132. /// <returns></returns>
  133. [AbpAuthorize(PermissionNames.PagesOrderInfoOrderMgCreate),DisableAuditing]
  134. public string GetNewOrderNo()
  135. {
  136. string lcRetVal = "";
  137. DateTime loTiem = DateTime.Parse(DateTime.Now.Year + "-" + DateTime.Now.Month + "-01");
  138. loTiem = loTiem.AddSeconds(-1);
  139. var orders = Repository.GetAll().Where(i => i.TimeCreated > loTiem).OrderByDescending(i => i.Id);
  140. if (orders.Any())
  141. {
  142. var loFirstOrder = orders.FirstOrDefault();
  143. int liTempNo = 0;
  144. liTempNo = Convert.ToInt32(loFirstOrder?.Id);
  145. liTempNo++;
  146. lcRetVal = liTempNo.ToString();
  147. if (lcRetVal.Length < 10)
  148. {
  149. lcRetVal = "0" + lcRetVal;
  150. }
  151. }
  152. else
  153. {
  154. DateTime loDate = DateTime.Today;
  155. int liMonth = loDate.Date.Month;
  156. string lcMonth = liMonth < 10 ? "0" + liMonth : liMonth.ToString();
  157. lcRetVal = loDate.Date.Year + lcMonth + "0001";
  158. }
  159. return lcRetVal;
  160. }
  161. public override async Task<OrderHeaderDto> Create(OrderHeaderCreateDto input)
  162. {
  163. CheckCreatePermission();
  164. var result = await CreateEntity(input);
  165. BusinessLogTypeEnum.OrderLog.WriteLog(BusinessLogRepository, "订单创建", $"订单创建,{result.ToJsonString()}");
  166. //await CommonAppService.WriteShortMessage(AbpSession.UserName,
  167. // SettingManager.GetSettingValue("DINGDANLRMSG"), "有新订单录入",
  168. // $"新的订单录入成功,订单流水号为:{result.Id},请注意查看,并及时跟踪!订单录入人为{AbpSession.UserName}");
  169. //await CommonAppService.WriteShortMessage(AbpSession.UserName, SettingManager.GetSettingValue("DINGDANLRMSG"), "有新订单录入", $"新的订单录入成功,订单流水号为:{result.Id},请注意查看,并及时跟踪!订单录入人为{AbpSession.UserName}");
  170. return result;
  171. }
  172. public override async Task Delete(EntityDto<string> input)
  173. {
  174. CheckDeletePermission();
  175. var orderHeader = Repository.Get(input.Id);
  176. if (orderHeader.IsLock == "Y")
  177. {
  178. CheckErrors(IwbIdentityResult.Failed("订单已删除,不可删除!详情请联系系统管理员!"));
  179. }
  180. var isHasSend = await CommonAppService.CheckOrderHasSend(orderHeader.Id);
  181. if (isHasSend)
  182. {
  183. CheckErrors(IwbIdentityResult.Failed("订单已存在发货记录,不可删除!详情请联系系统管理员!"));
  184. }
  185. if (orderHeader.OrderStatusId != OrderStatusEnum.NewCreate.ToInt())//非新建状态的订单使用软删除
  186. {
  187. await SqlExecuter.ExecuteAsync($"update OrderItems set IsLock='Y' where OrderNo='{orderHeader.Id}';");
  188. await SqlExecuter.ExecuteAsync($"update OrderHeader set IsLock='Y' where OrderNo='{orderHeader.Id}';");
  189. }
  190. else
  191. {
  192. await OrderItemRepository.DeleteAsync(i => i.OrderNo == input.Id);
  193. await Repository.DeleteAsync(input.Id);
  194. }
  195. //await CommonAppService.WriteShortMessage(AbpSession.UserName, SettingManager.GetSettingValue("DINGDANXGMSG"), "订单" + input.Id + "已经删除", $"请注意订单:{input.Id},已经审核!订单的基本信息为:{orderHeader.ToString()} ,订单删除人为{AbpSession.UserName}");
  196. BusinessLogTypeEnum.OrderLog.WriteLog(BusinessLogRepository, "订单删除", $"修改订单,删除的订单为{orderHeader.ToJsonString()}");
  197. }
  198. [AbpAuthorize(PermissionNames.PagesOrderInfoOrderStatusMgAudit)]
  199. public async Task<OrderHeader> Audit(EntityDto<string> input)
  200. {
  201. var orderHeader = Repository.Get(input.Id);
  202. orderHeader.OrderStatusId = OrderStatusEnum.Audited.ToInt();
  203. orderHeader.TimeLastMod = Clock.Now;
  204. orderHeader.UserIDLastMod = AbpSession.UserName;
  205. //await CommonAppService.WriteShortMessage(AbpSession.UserName, SettingManager.GetSettingValue("DINGDANXGMSG"), "订单" + input.Id + "已经审核", $"请注意订单:{input.Id},已经审核!订单的基本信息为:{orderHeader.ToString()},订单审核人为{AbpSession.UserName}");
  206. BusinessLogTypeEnum.OrderLog.WriteLog(BusinessLogRepository, "订单审核", $"审核订单,订单信息为{orderHeader.ToJsonString()}");
  207. return await Repository.UpdateAsync(orderHeader);
  208. }
  209. }
  210. }