WorkOrderRoutingSyncService.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. namespace Admin.NET.Plugin.AiDOP.WorkOrder;
  2. /// <summary>从标准工艺路线同步工单工序明细(WorkOrdRouting)。</summary>
  3. public class WorkOrderRoutingSyncService : ITransient
  4. {
  5. private readonly ISqlSugarClient _db;
  6. public WorkOrderRoutingSyncService(ISqlSugarClient db)
  7. {
  8. _db = db;
  9. }
  10. /// <summary>
  11. /// 确保工单有工艺路线数据;若已有活跃行则跳过。
  12. /// 返回插入行数。
  13. /// </summary>
  14. public async Task<int> EnsureFromRoutingAsync(long tenantId, string workOrd, string account)
  15. {
  16. var existing = await _db.Ado.GetIntAsync(
  17. """
  18. SELECT COUNT(*) FROM WorkOrdRouting
  19. WHERE tenant_id = @TenantId AND WorkOrd = @WorkOrd AND IFNULL(IsActive, 0) = 1
  20. """,
  21. new SugarParameter("@TenantId", tenantId),
  22. new SugarParameter("@WorkOrd", workOrd));
  23. if (existing > 0)
  24. return 0;
  25. var createUser = account.Length > 24 ? account[..24] : account;
  26. var affected = await _db.Ado.ExecuteCommandAsync(
  27. """
  28. INSERT INTO WorkOrdRouting (
  29. `Descr`, `Domain`, `ChargeCode`, `Machine`, `RunCrew`, `MilestoneOp`, `OP`, `StdOp`, `ItemNum`, `WorkCtr`,
  30. `Ufld1`, `Ufld3`, `Setup`, `MachinesperOp`, `Labor`, `RunTime`, `MachBdnRate`, `WorkCode`, `StdSetupTime`, `Engineer`,
  31. `WorkOrd`, `WorkOrdMasterRecID`, `ERPfld1`, `QtyOrded`, `ProcessOut`, `ProcessOutDay`, `ProcessOutSupp`,
  32. `IsActive`, `Status`, `ProdLine`, `CreateTime`, `CreateUser`, `tenant_id`, `CommentIndex`, `WaitTime`, `QtyComplete`, `ParentOp`
  33. )
  34. SELECT
  35. a.`Descr`,
  36. LEFT(TRIM(COALESCE(NULLIF(TRIM(IFNULL(w.`Domain`, '')), ''), NULLIF(TRIM(IFNULL(a.`Domain`, '')), ''), ' ')), 8),
  37. '',
  38. b.`InternalEquipmentCode`,
  39. IFNULL(b.`StandardStaffCount`, 0),
  40. CAST(IFNULL(a.`MilestoneOp`, 0) AS UNSIGNED),
  41. IFNULL(a.`Op`, 0),
  42. a.`StdOp`,
  43. a.`RoutingCode`,
  44. LEFT(IFNULL(b.`Site`, ''), 8),
  45. '',
  46. '',
  47. IFNULL(a.`UDeci1`, 0),
  48. IFNULL(a.`UDeci2`, 0),
  49. IFNULL(a.`UDeci3`, 0),
  50. IFNULL(a.`UDeci3`, 0) / 3600.0,
  51. IFNULL(b.`Rate`, 0),
  52. b.`OpType`,
  53. IFNULL(b.`SetupTime`, 0),
  54. b.`SkillNo`,
  55. w.`WorkOrd`,
  56. w.`RecID`,
  57. w.`ERPfld1`,
  58. IFNULL(w.`QtyOrded`, 0),
  59. CAST(IFNULL(a.`UDeci5`, 0) AS SIGNED),
  60. IFNULL(a.`ProcessOutDay`, 0),
  61. a.`ProcessOutSupp`,
  62. b'1',
  63. 'r',
  64. LEFT(IFNULL(b.`Line`, ''), 8),
  65. NOW(3),
  66. @CreateUser,
  67. w.`tenant_id`,
  68. CAST(IFNULL(a.`MilestoneOp`, 0) AS UNSIGNED),
  69. 0, 0, 0
  70. FROM WorkOrdMaster w
  71. LEFT JOIN RoutingOpDetail a ON w.`ItemNum` = a.`RoutingCode`
  72. LEFT JOIN ProdLineDetail b ON a.`RoutingCode` = b.`Part` AND a.`Op` = b.`Op`
  73. WHERE w.`WorkOrd` = @WorkOrd
  74. AND w.`tenant_id` = @TenantId
  75. AND IFNULL(a.`IsActive`, 0) = 1
  76. AND a.`MilestoneOp` IS NOT NULL
  77. """,
  78. new SugarParameter("@WorkOrd", workOrd),
  79. new SugarParameter("@TenantId", tenantId),
  80. new SugarParameter("@CreateUser", createUser));
  81. return affected;
  82. }
  83. }