From 0283d10f1f65729a5f3a79832ea587f977a28e96 Mon Sep 17 00:00:00 2001
From: 王 垚 <1402714037@qq.com>
Date: 星期四, 27 十月 2022 15:30:16 +0800
Subject: [PATCH] 自动排程 , 派工

---
 MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 176 insertions(+), 0 deletions(-)

diff --git a/MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs b/MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
index 31c4859..c2beba4 100644
--- a/MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
+++ b/MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -193,6 +193,11 @@
                 {
                     btnReFarshJDT();
                 }
+                //鑷姩鎺掔▼锛堟暟鎹紩鍏ワ級
+                if (e.BarItemKey.ToUpper() == "TB_ZDPC")
+                {
+                    btnZdpc();
+                }
                 if (e.BarItemKey.ToUpper() == "TB_OPERCOMPLETEREPORT")
                 {
                     // 鎵撳紑绠�鍗曠郴缁熻处琛�
@@ -4875,5 +4880,176 @@
 
             }
         }
+
+        public void btnZdpc()
+        {
+            string errMessege = string.Empty;//閿欒淇℃伅鎻愮ず
+            var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString();//缁勭粐
+            string fProWorkShopId = "";
+            DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection;//鐢熶骇杞﹂棿
+            if (entryOp.Count == 1)
+            {
+                List<string> pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList();
+                fProWorkShopId = string.Join(",", pkValueList);
+            }
+            if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId))
+            {
+                errMessege = "璇烽�夋嫨缁勭粐鍜屽崟涓敓浜ц溅闂�";
+                this.View.ShowErrMessage(errMessege);
+                return;
+            }
+            int fLockDays = Convert.ToInt32(this.Model.GetValue("FLockDays"));//寮曞叆澶╂暟
+            string sql = $"/*dialect*/ exec proc_jit_zdpc {fPrdOrgId},{fProWorkShopId},{fLockDays}";
+            LogService.Write("鑷姩鎺掍骇sql锛�"+sql);
+            DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
+            if (ds.Tables[0].Rows[0][0].ToString().Contains("澶辫触_鐢熶骇璁㈠崟娌℃湁缁存姢鐢熶骇璧勬簮"))
+            {
+                foreach (DataRow dr in ds.Tables[1].Rows)
+                {
+                    errMessege += $"{dr["FBILLNO"]}\r\n";
+                    this.View.ShowErrMessage("鎿嶄綔澶辫触锛岀敓浜ц鍗曟病鏈夌淮鎶ょ敓浜ц祫婧愶紝鐢熶骇璁㈠崟缂栧彿\r\n" + errMessege);
+                    return;
+                }
+            }
+            if (ds.Tables[0].Rows[0][0].ToString().Contains("澶辫触_鐢熶骇璧勬簮娌℃湁缁存姢宸ヤ綔鏃ュ巻"))
+            {
+                foreach (DataRow dr in ds.Tables[1].Rows)
+                {
+                    errMessege += $"{dr["FNUMBER"]}\r\n";
+                    this.View.ShowErrMessage("鎿嶄綔澶辫触锛岀敓浜ц祫婧愭病鏈夌淮鎶ゅ伐浣滄棩鍘嗭紝鐢熶骇璧勬簮(閲嶅鐢熶骇绾�)缂栫爜锛歕r\n" + errMessege);
+                    return;
+                }
+            }
+            if (ds.Tables[0].Rows[0][0].ToString().Contains("澶辫触_娌℃湁缁存姢浜ц兘"))
+            {
+                foreach (DataRow dr in ds.Tables[1].Rows)
+                {
+                    errMessege += $"鐢熶骇璧勬簮锛歿dr["FWORKCENTERNUMBER"]}锛岀墿鏂欑紪鐮侊細{dr["FMATERIALNUMBER"]}\r\n";
+                    this.View.ShowErrMessage("鎿嶄綔澶辫触锛屾病鏈夌淮鎶や骇鑳絓r\n" + errMessege);
+                    return;
+                }
+            }
+            DataTable dt = ds.Tables[0];//鐢熶骇璁㈠崟淇℃伅缁撴灉闆�
+            List<string> fsczyidList = dt.AsEnumerable().Select(r => r["FSCZYID"].ToString()).Distinct().ToList();//鐢熶骇璧勬簮闆嗗悎
+            foreach (var item in fsczyidList)//寰幆鐢熶骇璧勬簮
+            {
+                DataRow[] drs = dt.Select("FSCZYID =" + item);//绛涢�夊嚭褰撳墠鐢熶骇璧勬簮鐢熶骇璁㈠崟鏁版嵁
+                string _sql = string.Format(@"
+/*dialect*/ 
+select FCalUserId,FCalUserType,FShiftId,FIsWorkTime,FDay,FDateStyle,c.FALLHOURS ,c.FALLHOURS FALLHOURSCONST,b.FENTRYID from T_ENG_WORKCAL a
+left join T_ENG_WORKCALFULLDATA b on a.FID=b.FID 
+left join T_ENG_SHIFT c on b.FShiftId =c.FID --鐝埗琛�
+where FCalUserType ='ENG_RepetitiveProductLine'
+and FDateStyle = 1 --鏄惁宸ヤ綔鏃�
+and FIsWorkTime = 1 --鏄惁鐢熶骇
+and DATEDIFF(D,getdate(),FDAY)>=0
+and c.FALLHOURS >0
+and FCalUserId = {0}", item);
+                LogService.Write("浜ц兘sql锛�" + _sql);
+                var engWorkcalfulldataList = DBServiceHelper.ExecuteDataSet(Context, _sql).ToModelList<ENG_WORKCALFULLDATA>();//鎵�鏈夊彲浠ョ敤浜庢帓浜х殑鏃ユ湡
+                foreach (var dr in drs) //寰幆鐢熶骇璁㈠崟
+                {
+                    List<ENG_WORKCALFULLDATA> finalyResult = new List<ENG_WORKCALFULLDATA>();//鐢ㄤ簬璁板綍姣忎釜璁㈠崟鎺掍骇鐘跺喌
+                    decimal fqty = Convert.ToDecimal(dr["FQTY"]);//鐢熶骇璁㈠崟鏁伴噺
+                    decimal fcapacity = Convert.ToDecimal(dr["FCAPACITY"]);//灏忔椂浜ц兘
+                    var _engWorkcalfulldataList = engWorkcalfulldataList.Where(x => x.FALLHOURS > 0).ToList();
+                    foreach (var model in _engWorkcalfulldataList) //寰幆宸ヤ綔鏃ュ巻
+                    {
+                        if (fqty == 0)
+                            break;
+                        var dayFCapacity = fcapacity * model.FALLHOURS;//浠婂ぉ鍙互鐢熶骇鎬绘暟閲�
+                        var dayFqty = dayFCapacity > fqty ? fqty : dayFCapacity;//浠婂ぉ瀹為檯鎺掍骇鏁伴噺
+                        finalyResult.Add(new Demo.Model.Model.ENG_WORKCALFULLDATA
+                        {
+                            FDay = model.FDay,
+                            FQTY = dayFqty,
+                            FCAPACITY = fcapacity,
+                            FHOURS = dayFqty / fcapacity,
+                            FGZRLENTRYID = model.FENTRYID
+                        });
+                        //褰撴棩鍓╀綑浜ч噺澶т簬鍓╀綑鐢熶骇璁㈠崟鏁伴噺鏃� 鎸夊皬鏃朵骇閲忓幓璁$畻闇�瑕佹椂闂� list<>鍘绘墸闄ょ浉搴旂殑宸ユ椂
+                        if (dayFCapacity > fqty)
+                        {
+                            //鏀瑰彉list涓煇涓厓绱犲��
+                            var engWorkcalfulldataModel = engWorkcalfulldataList.Where(c => c.FENTRYID == model.FENTRYID).FirstOrDefault();
+                            //model.FALLHOURS -= Math.Ceiling(fqty / FCapacity);
+                            engWorkcalfulldataModel.FALLHOURS -= dayFqty / fcapacity; // 鐢熶骇鏁� / 灏忔椂浜ц兘 = 娑堣�楃殑灏忔椂 锛堟暟鍊肩被鍨嬩负decimal锛�
+                        }
+                        else
+                        {
+                            var engWorkcalfulldataModel = engWorkcalfulldataList.Where(c => c.FENTRYID == model.FENTRYID).FirstOrDefault();
+                            engWorkcalfulldataModel.FALLHOURS = 0;
+                        }
+                        fqty -= dayFqty;//鐢熶骇璁㈠崟鏁伴噺鎵i櫎鎺変粖澶╃敓浜ф暟閲�
+                    }
+                    JObject jsonRoot = new JObject();
+                    jsonRoot.Add("Creator", "");
+                    jsonRoot.Add("NeedUpDateFields", new JArray());
+                    jsonRoot.Add("NeedReturnFields", new JArray());
+                    jsonRoot.Add("IsDeleteEntry", "false");
+                    jsonRoot.Add("SubSystemId", "");
+                    jsonRoot.Add("IsVerifyBaseDataField", "");
+                    JObject jsonModel = new JObject();
+                    jsonModel.Add("FMoFBillType", dr["FMoFBillType"].ToString());
+                    jsonModel.Add("FOrderType", "鐢熶骇璁㈠崟");//
+                    jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(dr["FSEQ"]));//鐢熶骇璁㈠崟鏄庣粏琛屽彿
+                    jsonModel.Add("FSCOrderNo", Convert.ToString(dr["FBILLNO"])); //鐢熶骇璁㈠崟鍙稦SCOrderNo
+                    jsonModel.Add("FHSeOrderBillNo", Convert.ToString(dr["FSaleOrderNo"]));//閿�鍞鍗曞彿
+                    jsonModel.Add("FHOrderQty", Convert.ToString(dr["FSalOrderCount"]));//閿�鍞鍗曟暟閲�
+                    jsonModel.Add("FHOrderLev", "3");//璁㈠崟绛夌骇
+                    jsonModel.Add("FHOrderCommitDate", Convert.ToString(dr["FPLANDELIVERYDATE"]));//閿�鍞鍗曚氦璐ф棩鏈�
+
+                    jsonModel.Add("FHPlanBeginDate", Convert.ToString(dr["FPLANSTARTDATE"])); //璁″垝寮�濮嬫棩鏈�
+                    jsonModel.Add("FHPlanEndDate", Convert.ToString(dr["FPLANFINISHDATE"])); //璁″垝瀹屽伐鏃ユ湡
+                    jsonModel.Add("FPriority", Convert.ToInt32(dr["FROWId"]) * 10);//浼樺厛绾�
+                    jsonModel.Add("FHOrderNeedQty", Convert.ToString(dr["FQTY"]));// 璁㈠崟闇�姹傛暟閲�
+                    jsonModel.Add("FPrdBillNo", Convert.ToString(dr["FBILLNO"])); ;//婧愬崟缂栧彿
+                    jsonModel.Add("FPRDMOMAINID", Convert.ToString(dr["FID"])); ;//婧愬崟涓诲唴鐮�
+                    jsonModel.Add("FPRDMOENTYID", Convert.ToString(dr["FENTRYID"])); ;//婧愬崟瀛愬唴鐮�
+                    jsonModel.Add("FMoFID", Convert.ToString(dr["FID"])); ;//婧愬崟涓诲唴鐮�
+                    jsonModel.Add("FMoFentryId", Convert.ToString(dr["FENTRYID"])); ;//婧愬崟瀛愬唴鐮�
+                    jsonModel.Add("FOrderQuantity", Convert.ToString(dr["FQTY"])); ;//鐢熶骇璁㈠崟鏁伴噺
+                    jsonModel.Add("FDayPlanQuantity", Convert.ToString(dr["FQTY"])); ;//鏃ヨ鍒掓暟閲�
+                    jsonModel.Add("FHMaker ", new JObject() { ["FUserID"] = Context.UserId }); //鍒涘缓浜�
+                    jsonModel.Add("FHUpDater ", new JObject() { ["FUserID"] = Context.UserId }); //淇敼浜�
+                    jsonModel.Add("FHPRDORGID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FORGNUMBER"]) });//鐢熶骇缁勭粐
+                    jsonModel.Add("FHUnitID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FUNITNUMBER"]) });//鍗曚綅
+                    jsonModel.Add("FBOMID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FBOMNUMBER"]) });//BOM鐗堟湰
+                    jsonModel.Add("FHMaterID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FMATERIALNUMBER"]) });//鐗╂枡
+                    jsonModel.Add("FHWorkShopID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FDEPTNUMBER"]) });//鐢熶骇杞﹂棿
+                    jsonModel.Add("FHSourceID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FSCZYNUMBER"]) });//鐢熶骇璧勬簮
+                    JArray Entry = new JArray();
+                    foreach (var entry in finalyResult)
+                    {
+                        JObject jsonFPOOrderEntry = new JObject();
+                        jsonFPOOrderEntry.Add("FHMasterDate", entry.FDay);
+                        jsonFPOOrderEntry.Add("FHQty ", entry.FQTY);
+                        jsonFPOOrderEntry.Add("FCAPACITY ", entry.FCAPACITY);//灏忔椂浜ц兘
+                        jsonFPOOrderEntry.Add("FHOURS ", entry.FHOURS);//宸ユ椂
+                        jsonFPOOrderEntry.Add("FGZRLENTRYID ", entry.FGZRLENTRYID);//
+                        Entry.Add(jsonFPOOrderEntry);
+                    }
+                    jsonModel.Add("FEntity", Entry);
+                    jsonRoot.Add("Model", jsonModel);
+                    CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
+                    var result = cloudClient.Save("Paez_Sc_WorkBillAutoSortBill", jsonRoot.ToString());
+                    JObject saveObj = JObject.Parse(result);
+                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
+                    if (saveIsSuc != "TRUE")
+                    {
+                        errMessege += saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString() + " \r\n";
+                        //this.View.ShowErrMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
+                        //return;
+                    }
+                }
+            }
+            if (errMessege.Length > 0)
+            {
+                this.View.ShowMessage(errMessege);
+            }
+            else {
+                this.View.ShowMessage("鎿嶄綔鎴愬姛");
+            }
+        }
     }
 }

--
Gitblit v1.9.1