OrderHeadersApplicationService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  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. input.Id = GetNewOrderNo();
  165. var result = await CreateEntity(input);
  166. BusinessLogTypeEnum.OrderLog.WriteLog(BusinessLogRepository, "订单创建", $"订单创建,{result.ToJsonString()}");
  167. //await CommonAppService.WriteShortMessage(AbpSession.UserName,
  168. // SettingManager.GetSettingValue("DINGDANLRMSG"), "有新订单录入",
  169. // $"新的订单录入成功,订单流水号为:{result.Id},请注意查看,并及时跟踪!订单录入人为{AbpSession.UserName}");
  170. //await CommonAppService.WriteShortMessage(AbpSession.UserName, SettingManager.GetSettingValue("DINGDANLRMSG"), "有新订单录入", $"新的订单录入成功,订单流水号为:{result.Id},请注意查看,并及时跟踪!订单录入人为{AbpSession.UserName}");
  171. return result;
  172. }
  173. public override async Task Delete(EntityDto<string> input)
  174. {
  175. CheckDeletePermission();
  176. var orderHeader = Repository.Get(input.Id);
  177. if (orderHeader.IsLock == "Y")
  178. {
  179. CheckErrors(IwbIdentityResult.Failed("订单已删除,不可删除!详情请联系系统管理员!"));
  180. }
  181. var isHasSend = await CommonAppService.CheckOrderHasSend(orderHeader.Id);
  182. if (isHasSend)
  183. {
  184. CheckErrors(IwbIdentityResult.Failed("订单已存在发货记录,不可删除!详情请联系系统管理员!"));
  185. }
  186. if (orderHeader.OrderStatusId != OrderStatusEnum.NewCreate.ToInt())//非新建状态的订单使用软删除
  187. {
  188. await SqlExecuter.ExecuteAsync($"update OrderItems set IsLock='Y' where OrderNo='{orderHeader.Id}';");
  189. await SqlExecuter.ExecuteAsync($"update OrderHeader set IsLock='Y' where OrderNo='{orderHeader.Id}';");
  190. await UnLockOrderStore(orderHeader.Id);//如果存在订单提前锁定冻结库存的情况,需要解除冻结库存
  191. }
  192. else
  193. {
  194. await OrderItemRepository.DeleteAsync(i => i.OrderNo == input.Id);
  195. await Repository.DeleteAsync(input.Id);
  196. }
  197. //await CommonAppService.WriteShortMessage(AbpSession.UserName, SettingManager.GetSettingValue("DINGDANXGMSG"), "订单" + input.Id + "已经删除", $"请注意订单:{input.Id},已经审核!订单的基本信息为:{orderHeader.ToString()} ,订单删除人为{AbpSession.UserName}");
  198. BusinessLogTypeEnum.OrderLog.WriteLog(BusinessLogRepository, "订单删除", $"修改订单,删除的订单为{orderHeader.ToJsonString()}");
  199. }
  200. /**
  201. * 解除订单中所有订单明细冻结的库存数量
  202. */
  203. private async Task UnLockOrderStore(String orderNo)
  204. {
  205. var orderItems =await OrderItemRepository.GetAllListAsync(i => i.OrderNo == orderNo);
  206. foreach (var orderItem in orderItems)
  207. {
  208. await CommonAppService.UnLockOrderStore(orderItem);
  209. }
  210. }
  211. [AbpAuthorize(PermissionNames.PagesOrderInfoOrderStatusMgAudit)]
  212. public async Task<OrderHeader> Audit(EntityDto<string> input)
  213. {
  214. var orderHeader = Repository.Get(input.Id);
  215. orderHeader.OrderStatusId = OrderStatusEnum.Audited.ToInt();
  216. orderHeader.TimeLastMod = Clock.Now;
  217. orderHeader.UserIDLastMod = AbpSession.UserName;
  218. //await CommonAppService.WriteShortMessage(AbpSession.UserName, SettingManager.GetSettingValue("DINGDANXGMSG"), "订单" + input.Id + "已经审核", $"请注意订单:{input.Id},已经审核!订单的基本信息为:{orderHeader.ToString()},订单审核人为{AbpSession.UserName}");
  219. BusinessLogTypeEnum.OrderLog.WriteLog(BusinessLogRepository, "订单审核", $"审核订单,订单信息为{orderHeader.ToJsonString()}");
  220. return await Repository.UpdateAsync(orderHeader);
  221. }
  222. }
  223. }