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

---
 MES.Service/service/Warehouse/MesInvItemOutsManager.cs |  325 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 295 insertions(+), 30 deletions(-)

diff --git a/MES.Service/service/Warehouse/MesInvItemOutsManager.cs b/MES.Service/service/Warehouse/MesInvItemOutsManager.cs
index c576127..6b1d2ec 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)
     {
@@ -142,12 +251,12 @@
                 SELECT SUM(C.QUANTITY) AS SQ_QTY, SUM(D.QUANTITY_OK) AS OK_QTY
                 FROM MES_INV_ITEM_OUT_ITEMS C
                 LEFT JOIN (
-                    SELECT ITEM_OUT_ID, ITEM_NO,ITEM_ID, PBILL_NO, RK_NO, SUM(QUANTITY) AS QUANTITY_OK
+                    SELECT ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO, SUM(QUANTITY) AS QUANTITY_OK
                     FROM MES_INV_ITEM_OUT_C_DETAILS
-                    GROUP BY ITEM_OUT_ID, ITEM_NO,ITEM_ID, PBILL_NO, RK_NO
+                    GROUP BY ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO
                 ) D
                 ON D.ITEM_OUT_ID = C.ITEM_OUT_ID
-                AND D.ITEM_ID = C.ITEM_ID
+                AND D.ITEM_NO = C.ITEM_NO
                 AND D.RK_NO = C.RK_NO
                 AND NVL(C.PBILL_NO, '0') = NVL(D.PBILL_NO, '0')
                 WHERE C.ITEM_OUT_ID = {0}", mesInvItemOuts.Id);
@@ -227,24 +336,22 @@
             FROM MES_INV_ITEM_OUT_ITEMS C
             LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY,
                               ITEM_NO,
-                              ITEM_ID,
                               PBILL_NO,
                               RK_NO,
                               WORK_LINE
                          FROM MES_INV_ITEM_OUT_ITEMS
-                        GROUP BY ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE,RK_NO) U
-              ON U.ITEM_ID = C.ITEM_ID
+                        GROUP BY ITEM_NO, PBILL_NO, WORK_LINE,RK_NO) U
+              ON U.ITEM_NO = C.ITEM_NO
              AND U.WORK_LINE = C.WORK_LINE
              AND U.PBILL_NO = C.PBILL_NO
              AND U.RK_NO = C.RK_NO
             LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY,
                               ITEM_NO,
-                              ITEM_ID,
                               EBELN,
                               WORK_LINE,BILL_NO
                          FROM MES_INV_ITEM_IN_C_ITEMS
                         GROUP BY ITEM_NO, EBELN, WORK_LINE,BILL_NO) s1
-              ON S1.ITEM_ID = C.ITEM_ID
+              ON S1.ITEM_NO = C.ITEM_NO
              AND S1.WORK_LINE = C.WORK_LINE
              AND S1.EBELN = C.PBILL_NO
                 AND S1.BILL_NO = C.RK_NO
@@ -260,7 +367,7 @@
 
             // 鍒ゆ柇琛屾槸鍚﹂噸澶�
             var cf_Num = Db.Queryable<MesInvItemOutItems>()
-                .Where(s1 => s1.ItemId == item.ItemId &&
+                .Where(s1 => s1.ItemNo == item.ItemNo &&
                              s1.WorkLine == item.WorkLine &&
                              s1.PbillNo == item.PbillNo &&
                              s1.ItemOutId == mesInvItemOuts.Id &&
@@ -431,7 +538,7 @@
                 (b, bar, c, d) => new
                     JoinQueryInfos(
                         JoinType.Left, b.ItemBarcode == bar.ItemBarcode,
-                        JoinType.Left, b.ItemId == c.Id &&
+                        JoinType.Left, b.ItemNo == c.ItemNo &&
                                        b.Company == c.Company &&
                                        b.Factory == c.Factory,
                         JoinType.Left, b.DepotCode == d.DepotCode &&
@@ -465,16 +572,16 @@
                NVL(s1.RK_QTY, 0) - NVL(KT_QTY, 0) KT_QTY,
                R.DEPOT_SECTION_CODE, S.ITEM_MODEL, S.ITEM_NAME,
                K.CGB014, Q.STAFF_NAME, R.DEPOT_CODE
-        FROM MES_INV_ITEM_OUT_ITEMS C JOIN MES_ITEMS S ON C.ITEM_ID = S.ID
-                 LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO
+        FROM MES_INV_ITEM_OUT_ITEMS C JOIN MES_ITEMS S ON C.ITEM_NO = S.ITEM_NO
+                 LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO, PBILL_NO, WORK_LINE, RK_NO
                             FROM MES_INV_ITEM_OUT_ITEMS
-                            GROUP BY ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO) U
-                           ON U.ITEM_ID = C.ITEM_ID AND U.WORK_LINE = C.WORK_LINE
+                            GROUP BY ITEM_NO, PBILL_NO, WORK_LINE, RK_NO) U
+                           ON U.ITEM_NO = C.ITEM_NO AND U.WORK_LINE = C.WORK_LINE
                                AND U.PBILL_NO = C.PBILL_NO AND U.RK_NO = C.RK_NO
-                 LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY, ITEM_NO,ITEM_ID, EBELN, WORK_LINE, BILL_NO
+                 LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY, ITEM_NO, EBELN, WORK_LINE, BILL_NO
                             FROM mes_inv_item_in_c_details
-                            GROUP BY ITEM_NO,ITEM_ID, EBELN, WORK_LINE, BILL_NO) s1
-                           ON S1.ITEM_ID = C.ITEM_ID AND S1.WORK_LINE = C.WORK_LINE
+                            GROUP BY ITEM_NO, EBELN, WORK_LINE, BILL_NO) s1
+                           ON S1.ITEM_NO = C.ITEM_NO AND S1.WORK_LINE = C.WORK_LINE
                                AND S1.EBELN = C.PBILL_NO AND S1.BILL_NO = C.RK_NO
                  LEFT JOIN MES_ROH_IN_DATA K
                            ON K.BILL_NO = C.PBILL_NO AND C.WORK_LINE = K.PURCHASE_ORDER_LINE_NUMBER
@@ -482,10 +589,10 @@
                  left join MES_STAFF Q on H.PURCHASER = Q.STAFF_NAME
                  LEFT JOIN MES_SUPPLIER T ON H.SUPPLIER = T.ID
                  LEFT JOIN (select *
-                            from (SELECT row_number() over (partition by DEPOT_CODE,ITEM_ID, EBELN order by CREATE_DATE) rn, DEPOT_CODE, DEPOT_SECTION_CODE,ITEM_ID
+                            from (SELECT row_number() over (partition by DEPOT_CODE, ITEM_NO, EBELN order by CREATE_DATE) rn, DEPOT_CODE, DEPOT_SECTION_CODE, ITEM_NO,
                                          EBELN FROM mes_inv_item_in_c_details
                                   where EBELN is not null)
-                            where rn = 1 and ROWNUM = 1) R ON R.ITEM_ID = C.ITEM_ID) where 1=1 {0}",
+                            where rn = 1 and ROWNUM = 1) R ON R.ITEM_NO = C.ITEM_NO) where 1=1 {0}",
             where);
         var results = Db.Ado.SqlQuery<MESInvItemOutItems>(sql);
         return results;
@@ -501,13 +608,13 @@
               FROM (SELECT f_get_section_code2('1000', '1000', b.ITEM_NO,'{0}') DEPOT,
                            B.ITEM_NO, A.ITEM_MODEL,A.ITEM_NAME,to_char(nvl(b.QUANTITY, 0) - nvl(D.QUANTITY_OK, 0),'FM9999999990.00') QTY
                       FROM MES_INV_ITEM_OUT_ITEMS B LEFT JOIN mes_ITEMS A
-                        ON B.ITEM_ID = A.ID LEFT JOIN (SELECT ITEM_OUT_ID,
-                                       ITEM_NO,ITEM_ID,PBILL_NO,SUM(QUANTITY) QUANTITY_OK,RK_NO
+                        ON B.ITEM_NO = A.ITEM_NO LEFT JOIN (SELECT ITEM_OUT_ID,
+                                       ITEM_NO,PBILL_NO,SUM(QUANTITY) QUANTITY_OK,RK_NO
                                   FROM MES_INV_ITEM_OUT_C_DETAILS
                                  WHERE ITEM_OUT_ID = {1}
-                                 GROUP BY ITEM_OUT_ID,ITEM_NO,ITEM_ID,PBILL_NO,RK_NO) D
+                                 GROUP BY ITEM_OUT_ID,ITEM_NO,PBILL_NO,RK_NO) D
                         ON D.ITEM_OUT_ID = B.ITEM_OUT_ID
-                       AND D.ITEM_ID = B.ITEM_ID
+                       AND D.ITEM_NO = B.ITEM_NO
                        AND D.PBILL_NO = B.PBILL_NO
                        AND D.RK_NO = B.RK_NO
                      WHERE B.ITEM_OUT_ID = {1}
@@ -547,21 +654,21 @@
                                to_char(b.CREATE_DATE, 'yyyy-mm-dd') as CREATE_DATE
                         from mes_inv_item_in_c_details b
                                  left join mes_inv_item_ins a on b.item_in_id = a.id
-                                 LEFT JOIN (select s.item_no,s.item_id, s.work_line, s.Work_no,
+                                 LEFT JOIN (select s.item_no, s.work_line, s.Work_no,
                                                    sum(s.quantity) quantity, S.RK_NO
                                             from mes_inv_item_out_c_details s
-                                            group by s.item_no,s.item_id, s.work_line, s.work_no, S.RK_NO) s1
+                                            group by s.item_no, s.work_line, s.work_no, S.RK_NO) s1
                                            ON NVL(B.work_LINE, '0') = NVL(s1.work_LINE, '0')
                                                and B.work_no = s1.work_no
-                                               and B.item_id = s1.item_id
+                                               and B.item_no = s1.item_no
                                                AND B.BILL_NO = S1.RK_NO
-                                 LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO
+                                 LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO, PBILL_NO, WORK_LINE, RK_NO
                                             FROM MES_INV_ITEM_OUT_ITEMS
-                                            GROUP BY ITEM_NO,ITEM_ID, PBILL_NO, WORK_LINE, RK_NO) U
-                                           ON U.ITEM_ID = B.ITEM_ID
+                                            GROUP BY ITEM_NO, PBILL_NO, WORK_LINE, RK_NO) U
+                                           ON U.ITEM_NO = B.ITEM_NO
                                                AND U.WORK_LINE = B.WORK_LINE
                                                AND U.PBILL_NO = B.WORK_NO AND U.RK_NO = B.BILL_NO
-                                 left join mes_items s2 on b.item_id = s2.id
+                                 left join mes_items s2 on b.item_no = s2.item_no
                                  left join purdha da on da.dha001 = b.cbill_no
                         WHERE A.BILL_NO LIKE 'Q%'
                           AND A.CBILL_NO like 'L%'
@@ -705,4 +812,162 @@
 
         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);
+
+            var xsddh = item.Caa015 ?? "";
+            var wzh = item.PositionNo ?? "";
+            var qty = ((int)item.Quantity).ToString();
+            var erpid = ((int)item.erpId).ToString();
+            var id = ((int)item.Id).ToString();
+            scllentryList.Add(new
+            {
+                FMaterialId = item.ItemNo,
+                FUnitID = C_ITEM_UNIT,
+                FAppQty =  qty,
+                FActualQty =  qty,
+                FStockId = item.DepotCode,
+                FPPBomEntryId = erpid,
+                F_UNW_Text_xsddh = xsddh,
+                F_UNW_TEXT_WZH = wzh,
+                F_MES_ENTRYID = id
+            });
+        }
+
+        var dataJson = new
+        {
+            F_MES_ID = mesInvItemOuts.Id.ToString(),
+            FDate = DateTime.Now.ToString("yyyy-MM-dd"),
+            FPickerId = userName,
+            F_UNW_LargeText_BZ = " ",
+            F_UNW_KH = " ",
+            F_UNW_DDSL = womcaa.Caa012.ToString(),
+            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