From 481e4bef4be32a5a9754d01faf80bf0bc4e14951 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期三, 28 八月 2024 14:23:16 +0800
Subject: [PATCH] 生产领料单

---
 MES.Service/service/Warehouse/MesInvItemOutsManager.cs |  262 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 262 insertions(+), 0 deletions(-)

diff --git a/MES.Service/service/Warehouse/MesInvItemOutsManager.cs b/MES.Service/service/Warehouse/MesInvItemOutsManager.cs
index 08b04e2..34788f7 100644
--- a/MES.Service/service/Warehouse/MesInvItemOutsManager.cs
+++ b/MES.Service/service/Warehouse/MesInvItemOutsManager.cs
@@ -3,6 +3,7 @@
 using MES.Service.Dto.service;
 using MES.Service.Modes;
 using MES.Service.util;
+using Newtonsoft.Json;
 using SqlSugar;
 using DbType = System.Data.DbType;
 
@@ -12,6 +13,114 @@
 {
     //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
     //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemOutsManager.cs
+
+    public List<MesInvItemOuts> GetProductionPickPage(WarehouseQuery query)
+    {
+        return Db.Queryable<MesInvItemOuts, MesDepots>((a, o) =>
+                new JoinQueryInfos(
+                    JoinType.Left,
+                    o.DepotCode == a.DepotCode && a.Company == o.Company &&
+                    a.Factory == o.Factory
+                ))
+            .Where((a, o) => a.BillTypeId == 200 &&
+                             a.TransactionNo == 201 &&
+                             a.Factory == "1000" &&
+                             a.Company == "1000" &&
+                             a.IsVisual == 1)
+            .WhereIF(query.status != null, (a, o) => a.Status == query.status)
+            .WhereIF(query.id != null, (a, o) => a.Id == query.id)
+            .Select((a, o) => new MesInvItemOuts
+            {
+                Id = a.Id,
+                Sapstatus = a.Sapstatus,
+                OutDate = a.OutDate,
+                CheckDate = a.CheckDate,
+                BoardItem = a.BoardItem,
+                WorkNo = a.WorkNo,
+                OutPart = a.OutPart,
+                PbillNo = a.PbillNo,
+                OutType = a.OutType,
+                CreateBy = a.CreateBy,
+                Status = a.Status,
+                CheckUser = a.CheckUser,
+                ItemOutNo = a.ItemOutNo,
+                DepotName = o.DepotName // 闇�瑕佸姩鎬佹坊鍔犵殑瀛楁
+            })
+            .ToPageList(query.PageIndex, query.Limit);
+    }
+
+    public MaterialReceipt GetProductionPick(WarehouseQuery query)
+    {
+        var form = new MaterialReceipt();
+        if (query.id != null)
+        {
+            var mesInvItemOutsList = GetProductionPickPage(query);
+            if (mesInvItemOutsList.Count <= 0) return form;
+
+            form.ItemOuts = mesInvItemOutsList[0];
+            form.ItemsList = getProductionItemsList(query);
+            form.InvItemoutCDetails = GetProductionDetails(query);
+        }
+
+        return form;
+    }
+
+    private List<MesInvItemOutItems> getProductionItemsList(
+        WarehouseQuery query)
+    {
+        return Db.Queryable<MesInvItemOutItems, MesItems, MesDepTaskInfo>(
+                (c, s, f) => new JoinQueryInfos(
+                    JoinType.Inner, c.ItemNo == s.ItemNo,
+                    JoinType.Left, f.TaskNo == c.TaskNo && f.ItemNo == c.ItemNo
+                ))
+            .Where((c, s, f) => c.ItemOutId == query.id)
+            .OrderBy(c => c.Id)
+            .Select((c, s, f) => new MesInvItemOutItems
+            {
+                Id = c.Id,
+                ItemNo = c.ItemNo,
+                Quantity = c.Quantity,
+                TaskNo = c.TaskNo,
+                Remark = c.Remark,
+                ItemName = s.ItemName, // 鍔ㄦ�佸瓧娈�
+                ItemModel = s.ItemModel, // 鍔ㄦ�佸瓧娈�
+                ItemUnit = SqlFunc.Subqueryable<MesItems>()
+                    .Where(si => si.ItemUnit == s.ItemUnit)
+                    .Select(si =>
+                        SqlFunc.MappingColumn<string>(
+                            "F_GETUNITNAME(si.Item_Unit)")) // 鍔ㄦ�佸瓧娈�
+            })
+            .ToList();
+    }
+
+    private List<MesInvItemOutCDetails> GetProductionDetails(
+        WarehouseQuery query)
+    {
+        return Db
+            .Queryable<MesInvItemOutCDetails, MesItems, MesDepots>(
+                (b, c, d) => new JoinQueryInfos(
+                    JoinType.Left,
+                    b.ItemNo == c.ItemNo && b.Company == c.Company &&
+                    b.Factory == c.Factory,
+                    JoinType.Left,
+                    d.DepotCode == b.DepotCode && b.Company == d.Company &&
+                    b.Factory == d.Factory
+                ))
+            .Where((b, c, d) => b.ItemOutId == query.id)
+            .Select((b, c, d) => new MesInvItemOutCDetails
+            {
+                ForceOutFlag = b.ForceOutFlag,
+                DepotSectionCode = b.DepotSectionCode,
+                ItemNo = b.ItemNo,
+                Quantity = b.Quantity,
+                ItemBarcode = b.ItemBarcode,
+                ItemName = c.ItemName,
+                ItemModel = c.ItemModel,
+                DepotName = d.DepotName,
+                DepotCode = b.DepotCode
+            })
+            .ToList();
+    }
 
     public bool ScanCode(WarehouseQuery query)
     {
@@ -703,4 +812,157 @@
 
         return ItemOutNos;
     }
+    //鐢熶骇棰嗘枡鍗曞鏍稿墠鏍¢獙
+
+
+    public MessageCenter SaveProductionMessageCenter(WarehouseQuery entity)
+    {
+        var message = ProductionMesToErpParam(entity);
+
+        var executeReturnIdentity =
+            Db.Insertable(message).ExecuteReturnIdentity();
+        if (executeReturnIdentity > 0)
+        {
+            message.Id = executeReturnIdentity;
+            message.Pid = executeReturnIdentity;
+            return message;
+        }
+
+        throw new Exception("鑾峰彇鏁版嵁澶辫触");
+    }
+
+    private MessageCenter ProductionMesToErpParam(WarehouseQuery query)
+    {
+        var erpParameters = "";
+        var title = "";
+        var tableName = "INV_ITEM_OUTS_" + query.Type;
+        if ("A".Equals(query.Type))
+        {
+            erpParameters =
+                GetProductionErpParameters(query.billNo, query.userName);
+            title = "鐢熶骇棰嗘枡鍗�" + query.billNo + "瀹℃牳";
+        }
+
+        var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl;
+        var message = new MessageCenter
+        {
+            TableName = tableName,
+            Url = ErpUrl,
+            Status = 1,
+            CreateBy = query.userName,
+            Route = query.billNo,
+            Title = title,
+            PageName = "Warehouse/ProductionPick/Add?id=" + query.id +
+                       "&itemOutNo=" + query.billNo,
+            CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+            Method = "POST",
+            Seq = 1,
+            Data = erpParameters,
+            IsMessage = 0,
+            ContentType = "application/x-www-form-urlencoded"
+        };
+        return message;
+    }
+
+    private string GetProductionErpParameters(string? queryBillNo,
+        string? userName)
+    {
+        userName ??= "system";
+        var mesInvItemOuts = Db.Queryable<MesInvItemOuts>()
+            .Where(it => it.ItemOutNo == queryBillNo)
+            .First();
+
+        if (mesInvItemOuts == null) throw new Exception("棰嗘枡鍗曞彿涓嶅瓨鍦�");
+
+        var womcaa = Db.Queryable<Womcaa>()
+            .Where(it => it.Caa020 == mesInvItemOuts.WorkNo)
+            .First();
+
+        if (womcaa == null) throw new Exception("浠诲姟鍗曞彿涓嶅瓨鍦�");
+
+        var Departmentcode = Db.Queryable<SysDepartment, MesInvItemOuts>(
+                (a, b) =>
+                    new JoinQueryInfos(JoinType.Left,
+                        a.Departmentname == b.OutPart
+                    )).Where((a, b) =>
+                b.OutPart == mesInvItemOuts.OutPart &&
+                b.ItemOutNo == queryBillNo).Select(a => a.Departmentcode)
+            .First();
+
+        if (string.IsNullOrEmpty(Departmentcode))
+            throw new Exception("閮ㄩ棬淇℃伅涓嶅瓨鍦�");
+
+        // 妫�鏌ラ鏂欏崟鐘舵��
+        if (mesInvItemOuts.Status == 1) throw new Exception("棰嗘枡鍗曞凡瀹℃牳锛屼笉鑳介噸澶嶆帹閫�");
+
+        var C_OUT_ITEMS = Db
+            .Queryable<MesInvItemOutItems, Womdab, Womdaa, Womcaa, Womcab>(
+                (c, b, d, e, f) =>
+                    new JoinQueryInfos(
+                        JoinType.Left, b.Id == c.ItemDabid,
+                        JoinType.Left, d.Id == b.Pid,
+                        JoinType.Left, e.Caa001 == d.Daa021,
+                        JoinType.Left, f.Eid == e.Erpid
+                    ))
+            .Where((c, b, d, e, f) => c.ItemOutId == mesInvItemOuts.Id)
+            .Select((c, b, d, e, f) => new
+            {
+                c.Id,
+                c.ItemNo,
+                c.Quantity,
+                c.DepotCode,
+                c.DepotSectionCode,
+                c.ItemId,
+                erpId = b.ErpId,
+                e.Caa015,
+                f.PositionNo
+            }).ToList();
+
+        var scllentryList = new List<dynamic>();
+
+        foreach (var item in C_OUT_ITEMS)
+        {
+            var sql =
+                "SELECT FNAME FROM MES_UNIT WHERE ID = (SELECT ITEM_UNIT FROM MES_ITEMS WHERE ID = '" +
+                item.ItemId + "')";
+            var C_ITEM_UNIT = Db.Ado.SqlQuerySingle<string>(sql);
+
+            scllentryList.Add(new
+            {
+                FMaterialId = item.ItemNo,
+                FUnitID = C_ITEM_UNIT,
+                FAppQty = item.Quantity,
+                FActualQty = item.Quantity,
+                FStockId = item.DepotCode,
+                FPPBomEntryId = item.erpId,
+                F_UNW_Text_xsddh = item.Caa015,
+                F_UNW_TEXT_WZH = item.PositionNo,
+                F_MES_ENTRYID = item.Id
+            });
+        }
+
+        var dataJson = new
+        {
+            F_MES_ID = mesInvItemOuts.Id,
+            FDate = mesInvItemOuts.CreateBy,
+            FPickerId = userName,
+            F_UNW_LargeText_BZ = " ",
+            F_UNW_KH = " ",
+            F_UNW_DDSL = womcaa.Caa012,
+            F_UNW_Text_CZG = userName,
+            scllentry = scllentryList
+        };
+
+        return "taskname=SCLL&mesid=" + mesInvItemOuts.Id +
+               "&optype=create&datajson=" +
+               JsonConvert.SerializeObject(
+                   dataJson);
+    }
+
+    public bool AuditProduction(WarehouseQuery query)
+    {
+        query.status = 1;
+        //瀹℃牳
+        return Update(query);
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3