王 垚
2021-02-13 b502fc26362d5c1b4e3e689fe71b5f6cfa1a7af9
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -1,4 +1,5 @@
using Demo.Model.Model;
using Demo.BillView.PRD;
using Demo.Model.Model;
using Demo.Model.Model.PODemandPlan;
using K3Cloud.Extend.Utils;
using Kingdee.BOS.Core;
@@ -380,7 +381,7 @@
            //{
            //锁定后生成日计划用料清单 及 提料计划
            DayPlanPPBomBillBatch();
            Extraction();
            //Extraction();
            SearchList();
            this.View.ShowMessage("操作成功");
            //}
@@ -1713,18 +1714,45 @@
        /// <summary>
        /// 日计划用料清单生成
        /// </summary>
        /// </summary>
        public void DayPlanPPBomBillBatch()
        {
            //LogService.WriteAsync(entrys);
            //查找到的同批项次
            Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
            //单据体信息转换为列表集合
            DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
            DynamicObjectCollection filterResult = entityDataObjoct.Clone();
            filterResult.Clear();
            entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x));
            string sqlWhere = " 1=1 ";
            string FDayPlanWorkID = "";
            string zxSql = "";
            List<string> zxSqlList = new List<string>();
            if (filterResult.Count() > 0)
            {
                foreach (var filter in filterResult)
                {
                    FDayPlanWorkID += filter["FDayPlanWorkID"].ToString() + ",";
                    zxSqlList.Add(string.Format(@"/*dialect*/
 INSERT INTO Z_SC_TLPLANZXJH (COLUMN1) VALUES ('{0}')
 SELECT * FROM Z_SC_TLPLANZXJH
 INSERT INTO SC_TLPLANZXJH(FID, FDAYPLANID, FCREATEDATE) SELECT *, GETDATE() FROM Z_SC_TLPLANZXJH
 DELETE FROM Z_SC_TLPLANZXJH
 SELECT * FROM SC_TLPLANZXJH", filter["FDayPlanWorkID"]));
                }
                FDayPlanWorkID = FDayPlanWorkID.TrimEnd(',');
                sqlWhere += $"AND t2.FID IN ({FDayPlanWorkID})";
            }
            DBServiceHelper.ExecuteBatch(Context, zxSqlList);
            Stopwatch sw = new Stopwatch();
            sw.Start();//开始计时
            LogHelper.Info("生成日计划用料清单准备数据");
            //锁定的日计划不生成
            try
            {
                string sql = string.Format(@"
/*dialect*/
select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,T5.FNUMBER,t1.FHMASTERDATE,t1.FHQTY,t4.FMATERIALID FMATERIALID2,T6.FNUMBER FNUMBER2,T7.FNUMBER FUNITNUMBER,FNumerator,FDenominator,convert(decimal(18,2),(t4.FMustQty/T3.FQTY) *t1.FHQTY) FHQtyMust,T4.FUnitID,t8.FNUMBER FUNITNUMBER2,T3.FID FPPBOM,T4.FENTRYID FPPBOMENTRYID,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,FFIXSCRAPQTY,T9.FID AS DayPlanFID,t2.FSCORDERNO,
                string sql = string.Format(@"/*dialect*/
select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,t3.FMOEntrySeq as FMoSeq,T5.FNUMBER,t1.FHMASTERDATE,t1.FHQTY,t4.FMATERIALID FMATERIALID2,T6.FNUMBER FNUMBER2,T7.FNUMBER FUNITNUMBER,FNumerator,FDenominator,convert(decimal(18,2),(t4.FMustQty/T3.FQTY) *t1.FHQTY) FHQtyMust,T4.FUnitID,t8.FNUMBER FUNITNUMBER2,T3.FID FPPBOM,T4.FENTRYID FPPBOMENTRYID,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,FFIXSCRAPQTY,T9.FID AS DayPlanFID,t2.FSCORDERNO,
t3.FMOENTRYID,t3.FBILLNO FPPBOMBILLNO,T4.FSEQ,tc.FOWNERTYPEID,tc.FOWNERID,tc.FEntrustPickOrgId,torg.FNUMBER as FORGNUMBER,t3.FMOID,FIssueType,FMaterialType,td.FNUMBER as FWORKSHOPID,t4.FReplaceGroup,isnull(ttt.FrowCount,0)FIsTDL,t4.FUseRate
FROM Sc_WorkBillSortBillSub t1
JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID
@@ -1751,12 +1779,13 @@
select distinct FDAYPLANFID from Sc_DayPlanPPBomBillMain where FID IN (
select distinct FDAYPLANFID from T_PRD_PICKMTRLDATA)
)
AND {0}
-- and T4.FMustQty>0
-- (
-- select  FDayPlanFID FROM Sc_DayPlanPPBomBillMain WHERE FID IN ( select distinct FID from  Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0)
-- )
"
);
",
sqlWhere);
                LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable dt = ds.Tables[0];
@@ -1802,7 +1831,8 @@
                            FWORKSHOPID = dr["FWORKSHOPID"].ToString(),
                            FReplaceGroup = dr["FReplaceGroup"].ToString(),
                            FUseRate = dr["FUseRate"].ToString(),
                            FIsTDL = dr["FIsTDL"].ToString()
                            FIsTDL = dr["FIsTDL"].ToString(),
                            FMoSeq = dr["FMoSeq"].ToString(),
                        });
                    }
                    LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
@@ -1844,6 +1874,7 @@
                            ModelEnty.Add("FHQtyScrap", _item.FHQtyScrap);//变动损耗率%
                            ModelEnty.Add("FMOBILLNO", _item.FMOBILLNO);//  
                            ModelEnty.Add("FMOENTRYIDINT", _item.FMOENTRYID);//  
                            ModelEnty.Add("FMoSeq", _item.FMoSeq);//
                            ModelEnty.Add("FPPBOMBILLNO", _item.FPPBOMBILLNO);//  
                            ModelEnty.Add("FPPBOMFSEQINT", _item.FPPBOMFSEQ);//  
                            ModelEnty.Add("FOwnerTypeId", _item.FOwnerTypeId);//  
@@ -1909,6 +1940,7 @@
            catch (Exception ex)
            {
                LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
@@ -1953,7 +1985,8 @@
                LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                sql = string.Format(@"
 /*dialect*/
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM  SC_WORKBILLSORTBILLMAIN T1
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId
FROM  SC_WORKBILLSORTBILLMAIN T1
JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID
LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY  T1
JOIN T_PRD_PPBOM   T2 on t1.FID = t2.FID