WorkOrderRepository.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IdentityModel.Tokens.Jwt;
  4. using System.Linq;
  5. using System.Security.Claims;
  6. using System.Text;
  7. using FMSAdmin.Data;
  8. using FMSAdmin.Helpers;
  9. using FMSAdmin.Entities;
  10. using Microsoft.EntityFrameworkCore;
  11. using Microsoft.Extensions.Logging;
  12. using Microsoft.Extensions.Options;
  13. using Microsoft.IdentityModel.Tokens;
  14. using FMSAdmin.Models;
  15. using System.Transactions;
  16. namespace FMSApp.Repositories {
  17. public class WorkOrderRepository {
  18. private readonly ILogger<WorkOrderRepository> _logger;
  19. private readonly FMSContext _context;
  20. private readonly AppSettings _appSettings;
  21. private readonly StorageHelper _storage;
  22. public WorkOrderRepository(
  23. ILogger<WorkOrderRepository> logger,
  24. FMSContext context,
  25. IOptions<AppSettings> appSettings,
  26. StorageHelper storage
  27. ) {
  28. _logger = logger;
  29. _context = context;
  30. _appSettings = appSettings.Value;
  31. _storage = storage;
  32. }
  33. // 자동지시 처리
  34. public void CreateFromWorkRequests() {
  35. var today = DateTime.Now.Date;
  36. using (var trans = new TransactionScope()) {
  37. // 자동지시인것 중 당일 포함 이전작업일인 요청 자동생성
  38. var query = from schedule in _context.FmsWorkSchedule
  39. join request in _context.FmsWorkRequest
  40. on schedule.WorkScheduleId equals request.WorkScheduleId
  41. where schedule.IsUse == true
  42. && schedule.IsAutoOrder == true
  43. && request.StartWorkDate <= today
  44. && _context.FmsWorkOrder.Where(
  45. order => order.SiteId == request.SiteId
  46. && order.WorkRequestId == request.WorkRequestId
  47. && order.Title == request.Title
  48. ).Any() == false
  49. select request;
  50. foreach (var request in query) {
  51. CreateFromWorkRequest(request);
  52. }
  53. trans.Complete();
  54. }
  55. }
  56. public void CreateFromWorkRequest(FmsWorkRequest request, bool bTran = false) {
  57. TransactionScope trans = null;
  58. if (bTran) trans = new TransactionScope();
  59. try {
  60. // Request Update
  61. request.WorkProgressId = 2; // 작업대기
  62. _context.FmsWorkRequest.Update(request);
  63. _context.SaveChanges();
  64. // Order 및 OrderToFacility 생성
  65. var order = new FmsWorkOrder();
  66. foreach (var facility in request.FmsWorkSchedule.FmsWorkScheduleToFacility) {
  67. order.FmsWorkOrderToFacility.Add(new FmsWorkOrderToFacility() {
  68. SiteId = facility.SiteId,
  69. FacilityCode = facility.FacilityCode
  70. });
  71. }
  72. _context.FmsWorkOrder.Add(order);
  73. _context.SaveChanges();
  74. if (trans != null) trans.Complete();
  75. } finally {
  76. if (trans != null) trans.Dispose();
  77. }
  78. }
  79. }
  80. }