MobileTaskSqlWriter.cs 1.9 KB

12345678910111213141516171819202122232425262728293031
  1. using SqlSugar;
  2. using Yitter.IdGenerator;
  3. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Receipt;
  4. /// <summary>
  5. /// C7 移动任务 upsert 的原始 SQL 工具(**不管理事务**;由调用方在既有事务内使用)。
  6. /// 幂等:DB UNIQUE (tenant_id, domain_code, task_id) + `INSERT … ON DUPLICATE KEY UPDATE`
  7. /// (复刻 LIVE `exists(TaskID)→UPDATE 否则 INSERT`,避免先查后插竞态)。**Phase 5B 未实库验证。**
  8. /// </summary>
  9. public static class MobileTaskSqlWriter
  10. {
  11. public static Task UpsertAsync(ISqlSugarClient db, MobileTaskCommand t)
  12. {
  13. if (t == null) throw new ArgumentNullException(nameof(t));
  14. var now = DateTime.Now;
  15. return db.Ado.ExecuteCommandAsync(
  16. """
  17. INSERT INTO ado_inventory_mobile_task
  18. (id,tenant_id,domain_code,posting_id,fbillno,task_id,type_id,name,description,executer,executer_type_id,plan_date,status,receiver,rct_qc_nbr,create_time,create_user)
  19. VALUES (@id,@t,@d,@pid,@fb,@tid,@ty,@nm,@ds,@ex,@et,@now,@st,@rcv,@qc,@now,@u)
  20. ON DUPLICATE KEY UPDATE executer=@ex, plan_date=@now, executer_type_id=@et, description=@ds, status=@st, update_time=@now, update_user=@u
  21. """,
  22. new SugarParameter("@id", YitIdHelper.NextId()), new SugarParameter("@t", t.TenantId), new SugarParameter("@d", t.DomainCode ?? ""),
  23. new SugarParameter("@pid", t.PostingId), new SugarParameter("@fb", t.Fbillno), new SugarParameter("@tid", t.TaskId ?? ""),
  24. new SugarParameter("@ty", t.TypeId), new SugarParameter("@nm", t.Name), new SugarParameter("@ds", t.Description),
  25. new SugarParameter("@ex", t.Executer), new SugarParameter("@et", t.ExecuterTypeId), new SugarParameter("@now", now),
  26. new SugarParameter("@st", t.Status), new SugarParameter("@rcv", t.Receiver), new SugarParameter("@qc", t.RctQcNbr),
  27. new SugarParameter("@u", t.User ?? ""));
  28. }
  29. }