From a4ae3bf5f1826e8e29a95da3dc2c947d713d4ebb Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期五, 06 六月 2025 15:38:14 +0800
Subject: [PATCH] 1.仓库信息储存逻辑调整 2.生产订单接口优化。

---
 MES.Service/service/BasicData/MesPositionManager.cs |  200 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 200 insertions(+), 0 deletions(-)

diff --git a/MES.Service/service/BasicData/MesPositionManager.cs b/MES.Service/service/BasicData/MesPositionManager.cs
new file mode 100644
index 0000000..6b67858
--- /dev/null
+++ b/MES.Service/service/BasicData/MesPositionManager.cs
@@ -0,0 +1,200 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Dto.webApi;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.BasicData;
+
+public class MesPositionManager : Repository<MesPosition>
+{
+    // 褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    // Save 鏂规硶鐢ㄤ簬淇濆瓨鍗曚釜宀椾綅璁板綍锛屾牴鎹被鍨嬫墽琛屼笉鍚岀殑鎿嶄綔
+    public bool Save(ErpPosition unit)
+    {
+        var entity = GetMesPosition(unit); // 灏� ErpPosition 杞崲涓� MesPosition
+        return UseTransaction(db =>
+        {
+            switch (unit.Type)
+            {
+                case "0":
+                    if (UpdatePositionStatus(db, entity.Id, "A")) // 鍚敤宀椾綅
+                        return 1;
+                    break;
+                case "1":
+                    if (UpdatePositionStatus(db, entity.Id, "B")) // 绂佺敤宀椾綅
+                        return 1;
+                    break;
+                case "3":
+                    if (DeletePosition(db, entity.Id)) // 鍒犻櫎宀椾綅
+                        return 1;
+                    break;
+                case "2":
+                case "4":
+                    if (InsertOrUpdatePosition(db, entity)) // 鎻掑叆鎴栨洿鏂板矖浣�
+                        return 1;
+                    break;
+                default:
+                    throw new ArgumentNullException(
+                        $"type娌℃湁{unit.Type}杩欎釜绫诲瀷鐨勫弬鏁�");
+            }
+
+            throw new NotImplementedException("鎿嶄綔澶辫触");
+        }) > 0;
+    }
+
+    // 鏇存柊宀椾綅鐘舵�佺殑鏂规硶
+    private bool UpdatePositionStatus(SqlSugarScope db, decimal positionId,
+        string status)
+    {
+        var result = db.Updateable<MesPosition>()
+            .SetColumns(s => s.Fforbidstatus == status)
+            .Where(s => s.Id == positionId).ExecuteCommand();
+
+        if (result > 0)
+            return true;
+
+        throw new NotImplementedException(status == "A" ? "鍚敤澶辫触" : "绂佺敤澶辫触");
+    }
+
+    // 鎻掑叆鎴栨洿鏂板矖浣嶇殑鏂规硶
+    private bool InsertOrUpdatePosition(SqlSugarScope db, MesPosition entity)
+    {
+        db.Deleteable<MesPosition>()
+            .Where(s => s.Id == entity.Id).ExecuteCommand();
+        var insert = db.Insertable(entity).ExecuteCommand();
+        return insert > 0;
+    }
+
+    // 鍒犻櫎宀椾綅鐨勬柟娉�
+    private bool DeletePosition(SqlSugarScope db, decimal positionId)
+    {
+        var deleteById = db.Deleteable<MesPosition>()
+            .Where(s => s.Id == positionId).ExecuteCommand();
+        if (deleteById > 0)
+            return true;
+
+        throw new NotImplementedException("鍒犻櫎澶辫触");
+    }
+
+    // 灏� ErpPosition 瀵硅薄杞崲涓� MesPosition 瀵硅薄鐨勬柟娉�
+    private MesPosition GetMesPosition(ErpPosition position)
+    {
+        return new MesPosition
+        {
+            Id = Convert.ToDecimal(position.Id),
+            PositionId = position.FNumber,
+            PositionName = position.FName,
+            PositionDescription = position.FDESCRIPTIONS,
+            Department = position.FDept,
+            Fforbidstatus = position.FForbidStatus,
+            FUseOrgId = position.FUseOrgId,
+            FCreateOrgId = position.FCreateOrgId,
+            CreationDate = position.FCreateDate != null
+                ? DateTime.ParseExact(position.FCreateDate,
+                    "yyyy-MM-dd HH:mm:ss", null)
+                : null,
+            DisabledBy = position.FForbidderId,
+            DisabledDate = position.FForbidDate != null
+                ? DateTime.ParseExact(position.FForbidDate,
+                    "yyyy-MM-dd HH:mm:ss", null)
+                : null
+        };
+    }
+
+    // SaveList 鏂规硶鐢ㄤ簬淇濆瓨澶氫釜宀椾綅璁板綍锛屾牴鎹被鍨嬫壒閲忔墽琛屼笉鍚岀殑鎿嶄綔
+    public bool SaveList(List<ErpPosition> positions)
+    {
+        var list = new List<MesPosition>();
+        positions.ForEach(s =>
+        {
+            var entity = GetMesPosition(s); // 灏� ErpPosition 杞崲涓� MesPosition
+            entity.Type = s.Type;
+            list.Add(entity);
+        });
+
+        var groupBy = list.GroupBy(s => s.Type)
+            .ToDictionary(g => g.Key, g => g.ToList());
+        return UseTransaction(db =>
+        {
+            foreach (var positionGroup in groupBy)
+                switch (positionGroup.Key)
+                {
+                    case "0":
+                        if (!UpdatePositionStatusBatch(db, positionGroup.Value,
+                                "A")) // 鎵归噺鍚敤宀椾綅
+                            throw new NotImplementedException("鍚敤澶辫触");
+                        break;
+                    case "1":
+                        if (!UpdatePositionStatusBatch(db, positionGroup.Value,
+                                "B")) // 鎵归噺绂佺敤宀椾綅
+                            throw new NotImplementedException("绂佺敤澶辫触");
+                        break;
+                    case "3":
+                        if (!DeletePositionBatch(db,
+                                positionGroup.Value)) // 鎵归噺鍒犻櫎宀椾綅
+                            throw new NotImplementedException("鍒犻櫎澶辫触");
+                        break;
+                    case "2":
+                    case "4":
+                        if (!InsertOrUpdatePositionBatch(db,
+                                positionGroup.Value)) // 鎵归噺鎻掑叆鎴栨洿鏂板矖浣�
+                            throw new NotImplementedException("鍚屾澶辫触");
+                        break;
+                    default:
+                        throw new ArgumentNullException(
+                            $"type娌℃湁{positionGroup.Key}杩欎釜绫诲瀷鐨勫弬鏁�");
+                }
+
+            return 1;
+        }) > 0;
+    }
+
+    // 鎵归噺鏇存柊宀椾綅鐘舵�佺殑鏂规硶
+    private bool UpdatePositionStatusBatch(SqlSugarScope db,
+        List<MesPosition> positionList, string status)
+    {
+        var ids = positionList.Select(it => it.Id).ToArray();
+        var result = db.Updateable<MesPosition>()
+            .SetColumns(s => s.Fforbidstatus == status)
+            .Where(s => ids.Contains(s.Id)).ExecuteCommand();
+
+        if (result > 0)
+            return true;
+
+        throw new NotImplementedException(status == "A" ? "鍚敤澶辫触" : "绂佺敤澶辫触");
+    }
+
+    // 鎵归噺鎻掑叆宀椾綅鐨勬柟娉�
+    private bool InsertPositionBatch(SqlSugarScope db,
+        List<MesPosition> positionList)
+    {
+        var insertRange = db.Insertable(positionList).ExecuteCommand();
+        if (insertRange > 0)
+            return true;
+
+        throw new NotImplementedException("鎻掑叆澶辫触");
+    }
+
+    // 鎵归噺鍒犻櫎宀椾綅鐨勬柟娉�
+    private bool DeletePositionBatch(SqlSugarScope db,
+        List<MesPosition> positionList)
+    {
+        var ids = positionList.Select(it => it.Id).ToArray();
+
+        var deleteByIds = db.Deleteable<MesPosition>()
+            .Where(s => ids.Contains(s.Id)).ExecuteCommand();
+
+        if (deleteByIds > 0)
+            return true;
+
+        throw new NotImplementedException("鍒犻櫎澶辫触");
+    }
+
+    // 鎵归噺鎻掑叆鎴栨洿鏂板矖浣嶇殑鏂规硶
+    private bool InsertOrUpdatePositionBatch(SqlSugarScope db,
+        List<MesPosition> positionList)
+    {
+        return positionList.All(entity => InsertOrUpdatePosition(db, entity));
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3