using Demo.BillView.PRD;
|
using Demo.Model.Model;
|
using Demo.Model.Model.PODemandPlan;
|
using K3Cloud.Extend.Utils;
|
using Kingdee.BOS.Core;
|
using Kingdee.BOS.Core.Bill;
|
using Kingdee.BOS.Core.CommonFilter;
|
using Kingdee.BOS.Core.Const;
|
using Kingdee.BOS.Core.DynamicForm;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
|
using Kingdee.BOS.Core.List;
|
using Kingdee.BOS.Core.Metadata;
|
using Kingdee.BOS.Core.Metadata.EntityElement;
|
using Kingdee.BOS.JSON;
|
using Kingdee.BOS.KDThread;
|
using Kingdee.BOS.Orm.DataEntity;
|
using Kingdee.BOS.ServiceHelper;
|
using Kingdee.BOS.ServiceHelper.FileServer;
|
using Kingdee.BOS.Util;
|
using Kingdee.K3.Core.SCM.STK;
|
using Kingdee.K3.SCM.ServiceHelper;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
using NPOI.SS.UserModel;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Diagnostics;
|
using System.Linq;
|
using System.Threading;
|
using System.Web;
|
using ZD.Cloud.Logger;
|
using ZD.Cloud.WebApi;
|
using ZD.Share.Common;
|
using NPOI.XSSF.UserModel;
|
using NPOI.SS.UserModel;
|
|
namespace Demo.BillView.PRD
|
{
|
[Description("生产计划平台按钮功能")]
|
[HotUpdate]
|
public class Pro_WorkBillPlatform : AbstractDynamicFormPlugIn
|
{
|
string _OutServicePath = "";
|
string PathName = "日计划导入模板.xlsx";
|
List<PRD_Inventory> ListInventory;//库存明细
|
List<PRD_Inventory> ListInventoryByStockOrgId;//物料总库存
|
|
private bool isSearched = false;
|
/// <summary>
|
/// 页面初始化 渲染界面 将T0-T60更改为日期显示
|
/// </summary>
|
/// <param name="e"></param>
|
public override void OnInitialize(InitializeEventArgs e)
|
{
|
base.OnInitialize(e);
|
DateTime DateNow = DateTime.Now;
|
for (int m = 0; m <= 30; m++)
|
{
|
this.View.GetControl("FT" + "" + m + "").ControlAppearance.TextColor = "#FFFF00";
|
this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString();
|
}
|
this.View.SendDynamicFormAction(View);
|
}
|
public override void DataChanged(DataChangedEventArgs e)
|
{
|
if (!isSearched) return;
|
base.DataChanged(e);
|
var columns = new List<string>() { "", "" };
|
for (int i = 0; i < 100; i++)
|
{
|
columns.Add("FT" + i.ToString());
|
}
|
|
var model = this.View.Model;
|
if (columns.Contains(e.Field.Key) || e.Field.Key == "FCDQuantity")
|
{
|
var sum = columns.Select(x => Convert.ToDouble(model.GetValue(x, e.Row))).Sum();//日计划总和
|
var scOrderCount = Convert.ToDouble(model.GetValue("FOrderQuantity", e.Row));//生产订单数量
|
var cdOrderCount = Convert.ToDouble(model.GetValue("FCDQuantity", e.Row));//拆单数量
|
var FCXStockInQty = Convert.ToDouble(model.GetValue("FCXStockInQty", e.Row));//产线入库数量
|
var FQTYLS = Convert.ToDouble(model.GetValue("FQTYLS", e.Row));//历史
|
this.View.Model.SetValue("FDayPlanQuantity", sum, e.Row);//日计划总数量
|
this.View.Model.SetValue("FNoScheduled", cdOrderCount - sum - FQTYLS, e.Row);//未排数量 = 拆单 - 历史 - 日计划
|
//this.View.Model.SetValue("FKpQty", cdOrderCount - sum - FCXStockInQty, e.Row);//可排数量 = 拆单数量 - 日计划 - 产线入库数量
|
|
var scOrderNo = model.GetValue("FSCOrderNo", e.Row).ToString();
|
var scOrderFentrySeqNo = model.GetValue("FSRCBILLENTRYSEQ", e.Row).ToString();
|
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
|
//单据体信息转换为列表集合
|
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
|
// var groups = entityDataObjoct.Where(x => Convert.ToString(x["FSCOrderNo"]) == scOrderNo && Convert.ToString(x["FSRCBILLENTRYSEQ"]) == scOrderFentrySeqNo).ToList();//生产资源分组(计算优先级)
|
DynamicObjectCollection groups = entityDataObjoct.Clone();
|
groups.Clear();
|
entityDataObjoct.Where(x => Convert.ToString(x["FSCOrderNo"]) == scOrderNo && Convert.ToString(x["FSRCBILLENTRYSEQ"]) == scOrderFentrySeqNo).ToList().ForEach(x => groups.Add(x));
|
var fsumDayPlanCount = groups.Select(x => Convert.ToDecimal(x["FDayPlanQuantity"])).Sum();//日计划总量
|
foreach (var group in groups)
|
{
|
this.View.Model.SetValue("FKpQty", Convert.ToDecimal(scOrderCount) - fsumDayPlanCount, Convert.ToInt32(group["SEQ"]) - 1);//拆单数量 - 日计划 - 产线入库数量
|
}
|
}
|
}
|
public override void BarItemClick(BarItemClickEventArgs e)
|
{
|
//this.View.ShowMessage(e.BarItemKey.ToUpper().ToString());
|
base.BarItemClick(e);
|
try
|
{
|
if (e.BarItemKey.ToUpper() == "BTEXPORT")
|
{
|
ExportExcel();
|
string path = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, PathName);
|
DynamicFormShowParameter dynamicForm = new DynamicFormShowParameter();
|
dynamicForm.FormId = "BOS_FileDownLoad";
|
dynamicForm.OpenStyle.ShowType = ShowType.Modal;
|
dynamicForm.CustomParams.Add("IsExportData", "true");
|
dynamicForm.CustomParams.Add("url", path);
|
this.View.ShowForm(dynamicForm);
|
}
|
//删除
|
if (e.BarItemKey.ToUpper() == "BTNDELETE")
|
{
|
this.View.ShowMessage("确定删除?",
|
MessageBoxOptions.YesNo, new Action<MessageBoxResult>((result) =>
|
{
|
if (result == MessageBoxResult.Yes)
|
{
|
DayPlanDelete();
|
}
|
})
|
);
|
|
}
|
//提交
|
if (e.BarItemKey.ToUpper() == "BTNSUBMIT")
|
{
|
DayPlanSubmit();
|
}
|
//审核
|
if (e.BarItemKey.ToUpper() == "BTNADUIT")
|
{
|
DayPlanAduit();
|
}
|
if (e.BarItemKey.ToUpper() == "TBSEARCH")
|
{
|
isSearched = false;
|
SearchList();
|
isSearched = true;
|
}
|
if (e.BarItemKey.ToUpper() == "TBLOCK")
|
{
|
Lock();
|
}
|
//解锁
|
if (e.BarItemKey.ToUpper() == "TBRELIEVELOCK")
|
{
|
RelieveLock();
|
}
|
//保存
|
if (e.BarItemKey.ToUpper() == "BTNSAVE")
|
{
|
Save();
|
}
|
//齐套分析
|
if (e.BarItemKey.ToUpper() == "TBCOMPLETE")
|
{
|
COMPLETE();
|
SearchList();
|
}
|
//齐套分析
|
if (e.BarItemKey.ToUpper() == "TBCOMPLETEBOM")
|
{
|
COMPLETEBOM();
|
}
|
//tbXnqt虚拟齐套
|
if (e.BarItemKey.ToUpper() == "TBXNQT")
|
{
|
Xnqt();
|
}
|
//tb_CKXNQT 查看虚拟齐套
|
if (e.BarItemKey.ToUpper() == "TB_CKXNQT")
|
{
|
XnqtLook();
|
}
|
//数据重算
|
if (e.BarItemKey.ToUpper() == "TBEXTRACTION")
|
{
|
return;
|
try
|
{
|
DayPlanPPBomBillBatch();
|
Extraction();
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
finally
|
{
|
this.View.ShowMessage("操作成功!");
|
}
|
}
|
//选单
|
if (e.BarItemKey.ToUpper().Contains("TBSELECTMENU"))
|
{
|
SelectMenu(e.BarItemKey.ToString());
|
}
|
//预留
|
if (e.BarItemKey.ToUpper() == "TBRESERVE")
|
{
|
Reserve();
|
}
|
//释放
|
if (e.BarItemKey.ToUpper() == "TBRELEASE")
|
{
|
Release();
|
}
|
//下达
|
if (e.BarItemKey.ToUpper() == "TB_RELEASE")
|
{
|
ReleaseForLMes();
|
}
|
//同步
|
if (e.BarItemKey.ToUpper() == "TB_TONGBU")
|
{
|
TongBu();
|
}
|
//日计划用料清单
|
if (e.BarItemKey.ToUpper() == "TB_DAYPLANBOM")
|
{
|
DayPlanPPBomBill();
|
}
|
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
public override void EntryBarItemClick(BarItemClickEventArgs e)
|
{
|
base.EntryBarItemClick(e);
|
if (e.BarItemKey.ToUpper() == "TBEDIT")
|
{
|
isSearched = false;
|
SearchListEdit();
|
isSearched = true;
|
}
|
if (e.BarItemKey.ToUpper() == "TBROWCOPY")
|
{
|
RowCopy();
|
}
|
|
|
}
|
/// <summary>
|
/// button按钮点击事件
|
/// </summary>
|
/// <param name="e"></param>
|
public override void ButtonClick(ButtonClickEventArgs e)
|
{
|
base.ButtonClick(e);
|
if (e.Key.ToUpper() == "FTBXNQT")
|
{
|
try
|
{
|
List<string> sqlList = new List<string>();
|
string sql = $"truncate table Sc_WorkBillMainXnqt";
|
sqlList.Add(sql);
|
sql = $"truncate table Sc_WorkBillSubXnqt";
|
sqlList.Add(sql);
|
string columnName = DBServiceHelper.ExecuteScalar<string>(Context, "/*dialect*/ select stuff((select ',' + name from syscolumns Where id = object_Id('Sc_WorkBillMainXnqt') for xml path('')),1,1,'') as name ", "");
|
sql = $"insert into Sc_WorkBillMainXnqt({columnName}) select {columnName} from Sc_WorkBillSortBillMain";
|
//LogHelper.Info("测试1:" + sql);
|
sqlList.Add(sql);
|
columnName = DBServiceHelper.ExecuteScalar<string>(Context, "/*dialect*/ select stuff((select ',' + name from syscolumns Where id = object_Id('Sc_WorkBillSubXnqt') for xml path('')),1,1,'') as name ", "");
|
sql = $"insert into Sc_WorkBillSubXnqt({columnName}) select {columnName} from Sc_WorkBillSortBillSub";
|
//LogHelper.Info("测试1:" + sql);
|
|
sqlList.Add(sql);
|
sql = $"update Sc_WorkBillSubXnqt set FComplete=''";
|
sqlList.Add(sql);
|
|
DBServiceHelper.ExecuteBatch(Context, sqlList);
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message);
|
return;
|
}
|
this.View.ShowMessage("操作成功");
|
}
|
}
|
/// <summary>
|
/// 行双击 跳出齐套分析明细列表
|
/// </summary>
|
/// <param name="e"></param>
|
public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e)
|
{
|
base.EntityRowClick(e);
|
DynamicFormShowParameter formPa = new DynamicFormShowParameter();
|
if (Convert.ToInt32(this.View.Model.GetValue("FDayPlanWorkID", e.Row)) == 0)
|
return;
|
if (e.ColKey == "FDELAYLNUM")
|
{
|
//生产计划平台拖期明细跳转
|
formPa.FormId = "paez_TardinessDetails";
|
formPa.CustomParams.Add("FID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString()));
|
this.View.ShowForm(formPa);
|
}
|
else if (e.ColKey == "FQTYLS")
|
{
|
//生产计划平台
|
string pageId = Guid.NewGuid().ToString();
|
BillShowParameter showParameter = new BillShowParameter();
|
showParameter.FormId = "Paez_Sc_WorkBillAutoSortBill";
|
showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
|
showParameter.PageId = pageId;
|
showParameter.Status = OperationStatus.EDIT;
|
// 传入需要修改的日计划工单内码,
|
showParameter.PKey = Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString());
|
this.View.ShowForm(showParameter);
|
|
}
|
else
|
{
|
var type = this.View.Model.GetValue("FQTTYPE").ToString();
|
if (type == "收料通知单")
|
formPa.CustomParams.Add("tempName", "JIT_MOMaterReadysBillXn");
|
//齐套分析明细列表跳转
|
formPa.FormId = "paez_CompleteAnalysisDetail";
|
formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString()));
|
this.View.ShowForm(formPa);
|
}
|
}
|
/// <summary>
|
/// 查看虚拟齐套
|
/// </summary>
|
public void XnqtLook()
|
{
|
var _key = this.View.Model.GetEntryCurrentRowIndex("FEntity");
|
if (_key < 0)
|
{
|
this.View.ShowErrMessage("请选择需要查看的单据行!");
|
return;
|
}
|
DynamicFormShowParameter formPa = new DynamicFormShowParameter();
|
//齐套分析明细列表跳转
|
formPa.FormId = "paez_CompleteAnalysisDetail";
|
formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", _key).ToString()));
|
formPa.CustomParams.Add("tempName", "JIT_MOMaterReadysBillXn");
|
this.View.ShowForm(formPa);
|
}
|
/// <summary>
|
/// 导出数据到Excel
|
/// </summary>
|
public void ExportExcel()
|
{
|
List<string> Title = new List<string> { "组织编码*", "销售订单号*", "销售订单明细行号*", "生产车间编码*", "生产资源编码*", "优先级", "员工编码", "物料编码*", "物料名称", "规格型号", "计量单位", "批次号", "销售订单数量", "生产订单数量", "总齐套数量" };
|
/*
|
,"T0","T1","T2","T3","T4","T5","T6","T7",
|
"T8","T9","T10","T11","T12","T13","T14","T15","T16","T17",
|
"T18","T19","T20","T21","T22","T23","T24","T25","T26","T27","T28","T29",
|
"T30","T31","T32","T33","T34","T35","T36","T37","T38","T39","T40","T41","T42",
|
"T43","T44","T45","T46","T47","T48","T49","T50","T51","T52","T53","T54","T55","T56","T57","T58","T59","T60"
|
*/
|
DateTime date = DateTime.Now;
|
for (int i = 0; i < 61; i++)
|
{
|
Title.Add(date.AddDays(i).ToString("yyyy-MM-dd"));
|
}
|
string sheetname = "日计划";
|
string file = "";
|
file = @"D:\办公\K3Cloud\WebSite\TempfilePath\" + sheetname;
|
|
//@"D:\办公\K3Cloud\WebSite\";
|
//通过Directory类的CreateDirectory方法创建。
|
string activeDir = AppDomain.CurrentDomain.BaseDirectory;
|
string newPath = System.IO.Path.Combine(activeDir, "TempfilePath");
|
System.IO.Directory.CreateDirectory(newPath);
|
|
file = newPath + "\\" + PathName;
|
//Server.MapPath("/");
|
DataTable dt = null;
|
XSSFWorkbook xssfworkbook = new XSSFWorkbook();//创建xlsx
|
XSSFSheet sheet = (XSSFSheet)xssfworkbook.CreateSheet(sheetname);//新建一个名称为sheetname的工作簿
|
//设置基本样式
|
ICellStyle style = xssfworkbook.CreateCellStyle();
|
style.WrapText = true;
|
IFont font = xssfworkbook.CreateFont();
|
font.FontHeightInPoints = 9;
|
font.FontName = "Arial";
|
style.SetFont(font);
|
|
//设置统计样式
|
ICellStyle style1 = xssfworkbook.CreateCellStyle();
|
style1.WrapText = true;
|
IFont font1 = xssfworkbook.CreateFont();
|
font1.FontHeightInPoints = 9;
|
font1.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
|
font1.FontName = "Arial";
|
style1.SetFont(font1);
|
|
//设置大类样式
|
ICellStyle style2 = xssfworkbook.CreateCellStyle();
|
style2.WrapText = true;
|
//style2.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Gold.Index;
|
//style2.FillPattern = FillPattern.SolidForeground;
|
IFont font2 = xssfworkbook.CreateFont();
|
font2.FontHeightInPoints = 9;
|
font2.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
|
font2.FontName = "Arial";
|
style2.SetFont(font2);
|
|
//设置列名
|
XSSFRow row = (XSSFRow)sheet.CreateRow(0);
|
for (int i = 0; i < Title.Count; i++)
|
{
|
ICell cell = (ICell)row.CreateCell(i);
|
var rowName = Title[i];
|
cell.SetCellValue(rowName);
|
cell.CellStyle = style;
|
}
|
|
//单元格赋值
|
//列宽自适应,只对英文和数字有效
|
for (int i = 0; i <= Title.Count; i++)
|
{
|
sheet.AutoSizeColumn(i);
|
}
|
using (System.IO.Stream stream = System.IO.File.OpenWrite(file))
|
{
|
xssfworkbook.Write(stream);
|
stream.Close();
|
_OutServicePath = file;
|
|
}
|
|
}
|
private string _fileId = string.Empty;
|
/// <summary>
|
/// 弹出下载提示窗,下载文件至客户端本地。
|
/// </summary>
|
public void ShowDownload()
|
{
|
|
_fileId = "2000avbbb";
|
string url = FileServerHelper.GetAppSiteOuterNetUrl(this.Context, HttpContext.Current.Request);
|
//fileId文件编码可由 T_BAS_ATTACHMENT 附件明细表查得,此处直接拿上面上传文件的编码来做示例。
|
string fileurl = string.Format("{0}FileUpLoadServices/download.aspx?fileId={1}&token={2}",
|
url, _fileId, this.Context.UserToken);
|
|
JSONObject jObject = new JSONObject();
|
jObject.Put("url", HttpUtility.UrlEncode(fileurl));
|
jObject.Put("title", "文件下载");
|
jObject.Put("desc", "请点击打开附件:");
|
jObject.Put("urltitle", "这是文件名");
|
this.View.AddAction(JSAction.openUrlWindow, new JSONArray { jObject });
|
}
|
/// <summary>
|
/// 锁定
|
/// </summary>
|
public void Lock()
|
{
|
int day = Convert.ToInt32(this.Model.GetValue("FLockDays"));
|
List<string> sqlList = new List<string>();
|
string sql = $"/*dialect*/update t1 set t1.FHLockedSub=1 from Sc_WorkBillSortBillSub t1 join Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{day - 1},getdate())";
|
sqlList.Add(sql);
|
int result = DBServiceHelper.ExecuteBatch(Context, sqlList);
|
DayPlanPPBomBill();
|
}
|
/// <summary>
|
/// 解锁
|
/// </summary>
|
public void RelieveLock()
|
{
|
int day = Convert.ToInt32(this.Model.GetValue("FLockDays"));
|
//获取单据体信息
|
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
|
//单据体信息转换为列表集合
|
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
|
List<string> sqlList = new List<string>();
|
string sql = $"/*dialect*/update t1 set t1.FHLockedSub=0 from Sc_WorkBillSortBillSub t1 join Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{day - 1},getdate())";
|
DBServiceHelper.Execute(Context, sql);
|
//foreach (var item in entityDataObjoct)
|
//{
|
// sql = $"/*dialect*/update t1 set t1.FHLockedSub=0 from Sc_WorkBillSortBillSub t1 join Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{day - 1},getdate()) and t1.FID = { Convert.ToString(item["FDayPlanWorkID"])} ";
|
// sqlList.Add(sql);
|
//}
|
SearchList();
|
this.View.ShowMessage("操作成功");
|
}
|
/// <summary>
|
/// 保存功能
|
/// </summary>
|
public void Save()
|
{
|
try
|
{
|
EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity");
|
List<int> fseqList = new List<int>();//用于记录 保存失败的行号 渲染颜色
|
string errResult = string.Empty;
|
List<string> sqlList = new List<string>();
|
string sql;
|
//获取单据体信息
|
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));
|
if (filterResult.Count == 0)
|
{
|
this.View.ShowMessage("请选择需要保存的数据");
|
return;
|
}
|
#region 原验证方式
|
//生产订单数量改为未入库数量
|
//var prd_DayPlanSave = filterResult.Select(x => new PRD_DayPlanSave { FSCOrderNo = Convert.ToString(x["FSCOrderNo"]), FSrcbillEntrySeq = Convert.ToString(x["FSRCBILLENTRYSEQ"]), FHSourceID = Convert.ToInt32(x["FResourcesId_Id"]), FCDQuantity = Convert.ToDecimal(x["FCDQuantity"]), FOrderQuantity = Convert.ToDecimal(x["FOrderQuantity"]), FNoStockInQty = Convert.ToDecimal(x["FNoStockInQty"]), FDayPlanQuantity = Convert.ToDecimal(x["FDayPlanQuantity"]), FKpQty = Convert.ToDecimal(x["FKpQty"]) }).ToList();
|
//判断生产订单是否有重复生产资源
|
//foreach (var item in prd_DayPlanSave)
|
//{
|
//if (item.FHSourceID == 0)
|
//{
|
// this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",生产资源不能为空");
|
// return;
|
//}
|
//if (prd_DayPlanSave.Where(x => x.FSCOrderNo == item.FSCOrderNo && x.FSrcbillEntrySeq == item.FSrcbillEntrySeq && x.FHSourceID == item.FHSourceID).ToList().Count > 1)
|
//{
|
// this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",生产资源:" + item.FHSourceID + "信息重复");
|
// return;
|
//}
|
//if (item.FKpQty < 0)
|
//{
|
// this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",可排数量:" + item.FKpQty + "小于0,日计划排产数超出未生产数量");
|
// return;
|
//}
|
//if (item.FKpQty > 0)
|
//{
|
// this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",可排数量:" + item.FKpQty + ",需要全部排产");
|
// return;
|
//}
|
//}
|
//拆单数量 不能 超过 生产订单总数 (有一种情况 日计划工单已有500拆单数量 但没有显示在当前生产计划平台上面 可能会超出生产订单总数量 2022-2-23 )
|
//var _prd_DayPlanSave = prd_DayPlanSave.GroupBy(x => new { x.FSCOrderNo, x.FSrcbillEntrySeq }).Select(y => new PRD_DayPlanSave { FSCOrderNo = y.Key.FSCOrderNo, FSrcbillEntrySeq = y.Key.FSrcbillEntrySeq, FOrderQuantity = y.First().FOrderQuantity, FCDQuantity = y.Sum(s => s.FCDQuantity) });
|
//foreach (var item in _prd_DayPlanSave)
|
//{
|
// if (item.FOrderQuantity < item.FCDQuantity)
|
// {
|
// this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",拆单总数量:" + item.FCDQuantity.ToString() + ",超出生产订单总数:" + item.FOrderQuantity.ToString());
|
// return;
|
// }
|
//}
|
#endregion
|
DateTime date = Convert.ToDateTime(DateTime.Now.ToString("d"));
|
foreach (DynamicObject current in filterResult)
|
{
|
if (Convert.ToString(current["FT0"]) == "" || Convert.ToString(current["FT0"]) == "0")
|
continue;
|
if (Convert.ToDecimal(current["FKpQty"]) < 0)
|
{
|
errResult += "生产订单号:" + current["FSCOrderNo"] + ",生产订单明细行号:" + current["FSRCBILLENTRYSEQ"] + ",可排数量:" + current["FKpQty"] + "小于0,日计划排产数超出未生产数量" + "\r\n";
|
fseqList.Add(Convert.ToInt32(current["SEQ"]));
|
continue;
|
}
|
int _FDayPlanWorkID = Convert.ToInt32(current["FDayPlanWorkID"]);
|
if (_FDayPlanWorkID > 0)
|
{
|
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("FID", Convert.ToString(current["FDayPlanWorkID"]));
|
if (Convert.ToString(current["FResourcesId_Id"]) != "0")
|
{
|
JObject jsonFProductWorkShopId = new JObject();
|
jsonFProductWorkShopId.Add("FNumber", (current["FResourcesId"] as DynamicObject)["Number"].ToString());
|
jsonModel.Add("FHSourceID", jsonFProductWorkShopId);//FHSourceID 生产车间
|
}
|
jsonModel.Add("FPriority", Convert.ToString(current["FPriority"]));
|
jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"]));
|
jsonModel.Add("FDayPlanQuantity", Convert.ToDecimal(current["FDayPlanQuantity"]) + Convert.ToDecimal(current["FQTYLS"]));
|
jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"]));
|
jsonModel.Add("FCDQuantity", Convert.ToString(current["FCDQuantity"]));//拆单数量
|
jsonModel.Add("FHOrderLev", Convert.ToString(current["FOrderLevel"]));//订单等级
|
//jsonModel.Add("FHMaker ", new JObject() { ["FUserID"] = Context.UserId }); //创建人
|
jsonModel.Add("FHUpDater ", new JObject() { ["FUserID"] = Context.UserId }); //修改人
|
string FSCOrderNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号FSCOrderNo
|
string FSRCBILLENTRYSEQ = Convert.ToString(current["FSRCBILLENTRYSEQ"]);//生产订单明细行号
|
sql = string.Format(@"
|
/*dialect*/
|
select FEntryID, FHMASTERDATE,FSpreadBillNo from SC_WORKBILLSORTBILLSub t1
|
join SC_WORKBILLSORTBILLMain t2 on t1.FID =t2.FID
|
where t1.FID = '{0}'
|
order by FEntryID"
|
, _FDayPlanWorkID);
|
List<DayPlanModel> dayPlanModel = new List<DayPlanModel>();
|
dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<DayPlanModel>();
|
List<string> deleteSqlList = new List<string>();
|
JArray Entry = new JArray();
|
for (int i = 0; i <= 0; i++)
|
{
|
JObject jsonFPOOrderEntry = new JObject();
|
List<DayPlanModel> _dayPlanModel = dayPlanModel.Where(x => x.FHMASTERDATE == date.AddDays(i)).ToList();
|
if (_dayPlanModel.Count > 0 && Convert.ToString(current["FT" + "" + i + ""]) == "0")
|
{
|
deleteSqlList.Add($"delete SC_WORKBILLSORTBILLSub where FEntryID = {_dayPlanModel.FirstOrDefault().FEntryID}");
|
continue;
|
}
|
else if (Convert.ToString(current["FT" + "" + i + ""]) == "0")
|
continue;
|
else if (_dayPlanModel.Count > 0)
|
jsonFPOOrderEntry.Add("FEntryID", _dayPlanModel.FirstOrDefault().FEntryID);
|
jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期
|
jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量
|
Entry.Add(jsonFPOOrderEntry);
|
}
|
jsonModel.Add("FEntity", Entry);
|
jsonRoot.Add("Model", jsonModel);
|
//保存前删除日计划数量
|
DBServiceHelper.ExecuteBatch(Context, deleteSqlList);
|
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")
|
{
|
errResult += $"序号:{current["SEQ"]}," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString() + "\r\n";
|
fseqList.Add(Convert.ToInt32(current["SEQ"]));
|
continue;
|
}
|
}
|
else
|
{
|
string FOrderType = Convert.ToString(current["FOrderType"]) ?? "";
|
string FTempName = "T_PRD_MO";
|
string FTempNameEntry = "T_PRD_MOENTRY";
|
if (FOrderType == "委外订单")
|
{
|
FTempName = "T_SUB_REQORDER";
|
FTempNameEntry = "T_SUB_REQORDERENTRY";
|
}
|
///查询生产订单数据
|
sql = string.Format(@"
|
/*dialect*/
|
SELECT t4.FNAME as FMoFBillType,T1.FBILLNO,T2.*,t3.FNUMBER as FUnitNumber,tBom.FNUMBER as FBomNumber FROM {0} T1
|
LEFT JOIN {1} T2 ON T1.FID = T2.FID
|
LEFT JOIN T_ENG_BOM tBom on t2.FBOMID = tBom.FID
|
join T_BD_UNIT t3 on t2.FUNITID=t3.FUNITID
|
join ( select A.FBILLTYPEID,B.FNAME from T_BAS_BILLTYPE A
|
JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID
|
where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER') AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID
|
WHERE T1.FBILLNO = '{2}' AND T2.FMATERIALID = '{3}' AND T2.FSEQ = '{4}'", FTempName, FTempNameEntry, Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]));
|
DataTable dt = new DataTable();
|
dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 0)
|
continue;
|
string FID = "";//FID 源单主内码
|
string FENTRYID = "";//FENTRYID 源单子内码
|
string FLOT = "";//FLOT 批次
|
string FQTY = "";//FQTY 生产订单数量
|
string FBILLNO = "";//FBILLNO 原单号
|
string FHUnitID = "";//单位
|
string FPlanBeginDate = "";//开始日期
|
string FPlanEndDate = "";//结束日期
|
string FMoFBillType = "";//
|
string FBomNumber = "";//Bom 版本
|
if (dt.Rows.Count > 0)
|
{
|
FID = dt.Rows[0]["FID"].ToString();
|
FENTRYID = dt.Rows[0]["FENTRYID"].ToString();
|
FLOT = dt.Rows[0]["FLOT"].ToString();
|
FQTY = dt.Rows[0]["FQTY"].ToString();
|
FBILLNO = dt.Rows[0]["FBILLNO"].ToString();
|
FHUnitID = dt.Rows[0]["FUnitNumber"].ToString();
|
FPlanBeginDate = dt.Rows[0]["FPlanStartDate"].ToString();
|
FPlanEndDate = dt.Rows[0]["FPlanFinishDate"].ToString();
|
FMoFBillType = dt.Rows[0]["FMoFBillType"].ToString();
|
FBomNumber = dt.Rows[0]["FBomNumber"].ToString();
|
}
|
string FSCOrderNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号FSCOrderNo
|
string FSRCBILLENTRYSEQ = Convert.ToString(current["FSRCBILLENTRYSEQ"]);//生产订单明细行号
|
sql = string.Format(@"
|
/*dialect*/
|
select FEntryID, FHMASTERDATE,FSpreadBillNo from SC_WORKBILLSORTBILLSub t1
|
join SC_WORKBILLSORTBILLMain t2 on t1.FID =t2.FID
|
where t2.FSRCBILLENTRYSEQ='{0}' and t2.FSCOrderNo ='{1}'
|
order by FEntryID"
|
, FSRCBILLENTRYSEQ, FSCOrderNo);
|
List<DayPlanModel> dayPlanModel = new List<DayPlanModel>();
|
dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<DayPlanModel>();
|
var fSpreadBillNo = 0;
|
if (dayPlanModel.Count > 0)
|
{
|
var fSpreadBillNoSplit = dayPlanModel.LastOrDefault().FSpreadBillNo.Split('-');
|
fSpreadBillNo = Convert.ToInt32(fSpreadBillNoSplit[fSpreadBillNoSplit.Length - 1]);
|
}
|
var fnallySpreadBillNo = "";
|
for (int i = 1; i < 100; i++)
|
{
|
fnallySpreadBillNo = $"{FSCOrderNo}-{FSRCBILLENTRYSEQ}-{fSpreadBillNo + i}";
|
string yzsql = $"select FID from T_PRD_MO where FBILLNO = '{fnallySpreadBillNo}'";
|
var yzfid = DBServiceHelper.ExecuteScalar<int>(Context, yzsql, 0);
|
if (yzfid == 0)
|
break;
|
}
|
|
//选单数据 做新增
|
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("FPreparatDate", Convert.ToString(current["FBzDate"]));//编制日期(改为预计开工日期)
|
jsonModel.Add("FMoFBillType", FMoFBillType);//
|
jsonModel.Add("FOrderType", FOrderType);//
|
jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(current["FSRCBILLENTRYSEQ"]));//生产订单明细行号
|
jsonModel.Add("FSCOrderNo", Convert.ToString(current["FSCOrderNo"])); //生产订单号FSCOrderNo
|
jsonModel.Add("FHSeOrderBillNo", Convert.ToString(current["FSalOrderNo"]));//销售订单号
|
jsonModel.Add("FHOrderLev", current["FOrderLevel"].ToString());//订单等级
|
jsonModel.Add("FHOrderQty", Convert.ToString(current["FSalOrderCount"]));//销售订单数量
|
jsonModel.Add("FHOrderCommitDate", Convert.ToString(current["FDeliveryDate"]));//交货期HOrderCommitDate
|
jsonModel.Add("FHUnitID", new JObject() { ["Fnumber"] = FHUnitID });//单位
|
jsonModel.Add("FBOMID", new JObject() { ["Fnumber"] = FBomNumber });//BOM版本
|
jsonModel.Add("FHPlanBeginDate", FPlanBeginDate);//计划开始日期
|
jsonModel.Add("FHPlanEndDate", FPlanEndDate);//计划完工日期
|
jsonModel.Add("FPriority", Convert.ToString(current["FPriority"]));//优先级
|
jsonModel.Add("FBatch", FLOT);//批次
|
jsonModel.Add("FHOrderNeedQty", FQTY);// 订单需求数量
|
jsonModel.Add("FPrdBillNo", FBILLNO); ;//源单编号
|
jsonModel.Add("FPRDMOMAINID", FID); ;//源单主内码
|
jsonModel.Add("FPRDMOENTYID", FENTRYID); ;//源单子内码
|
jsonModel.Add("FMoFID", FID); ;//源单主内码
|
jsonModel.Add("FMoFentryId", FENTRYID); ;//源单子内码
|
jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"])); ;//生产订单数量
|
jsonModel.Add("FDayPlanQuantity", Convert.ToString(current["FDayPlanQuantity"])); ;//日计划数量
|
jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"])); ;//未排数量
|
jsonModel.Add("FCDQuantity", Convert.ToString(current["FCDQuantity"]));//拆单数量
|
jsonModel.Add("FHMaker", new JObject() { ["FUserID"] = Context.UserId }); //创建人
|
jsonModel.Add("FHUpDater", new JObject() { ["FUserID"] = Context.UserId }); //修改人
|
JObject jsonFHMaterID = new JObject();
|
jsonFHMaterID.Add("FNumber", (current["FMatrailId"] as DynamicObject)["Number"].ToString());
|
jsonModel.Add("FHMaterID", jsonFHMaterID);//FHMaterID 物料
|
if (Convert.ToString(current["FORGID_Id"]) != "0")
|
{
|
JObject jsonFHPRDORGID = new JObject();
|
jsonFHPRDORGID.Add("FNumber", (current["FORGID"] as DynamicObject)["Number"].ToString());
|
jsonModel.Add("FHPRDORGID", jsonFHPRDORGID);//FHMaterID 生产组织
|
}
|
if (Convert.ToString(current["FResourcesId_Id"]) != "0")
|
{
|
JObject jsonFProductWorkShopId = new JObject();
|
jsonFProductWorkShopId.Add("FNumber", (current["FResourcesId"] as DynamicObject)["Number"].ToString());
|
jsonModel.Add("FHSourceID", jsonFProductWorkShopId);//FHSourceID 生产车间
|
}
|
if (Convert.ToString(current["FProductWorkShopId_Id"]) != "0")
|
{
|
JObject jsonFResourcesId = new JObject();
|
jsonFResourcesId.Add("FNumber", (current["FProductWorkShopId"] as DynamicObject)["Number"].ToString());
|
jsonModel.Add("FHWorkShopID", jsonFResourcesId);//FHWorkShopID 生产资源
|
}
|
JArray Entry = new JArray();
|
if (Convert.ToString(current["FT0"]) == "" || Convert.ToString(current["FT0"]) == "0")
|
continue;
|
JObject jsonFPOOrderEntry = new JObject();
|
jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(0).ToShortDateString()); ;//主日期
|
jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT0"])); ;//日计划数量
|
|
jsonFPOOrderEntry.Add("FSpreadBillNo", fnallySpreadBillNo); //流传单号 生产订单号+生产订单明细行号+序号mo0001-1-1
|
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")
|
{
|
//LogHelper.Error("生产计划平台新增保存失败:" + saveObj.ToString());
|
errResult += $"序号:{current["SEQ"]}," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString() + "\r\n";
|
fseqList.Add(Convert.ToInt32(current["SEQ"]));
|
continue;
|
}
|
if (saveIsSuc == "TRUE")
|
{
|
string FDayPlanBillNo = saveObj["Result"]["Number"].ToString();
|
string FDayPlanID = saveObj["Result"]["Id"].ToString();
|
this.Model.SetValue("FDayPlanWorkID", FDayPlanID, Convert.ToInt32(current["SEQ"]) - 1);//
|
this.View.UpdateView();
|
}
|
}
|
}
|
if (fseqList.Count > 0)
|
{
|
foreach (var item in fseqList)
|
{
|
grid.SetRowBackcolor("#71FF98CB", item - 1);
|
}
|
this.View.ShowErrMessage(errResult);
|
return;
|
}
|
this.View.ShowMessage("操作成功");
|
//SearchList();
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 齐套分析
|
/// </summary>
|
///
|
[Obsolete]
|
private void COMPLETE()
|
{
|
// 显示一个进度显示界面:显示一个不停滚动的模拟进度
|
// bUseTruePro参数:是否显示真实的进度。
|
// bUseTruePro = false :
|
// 显示一个不停滚动的模拟进度,与实际处理进度没有关联。
|
// 此方案优点:实际处理代码无需计算进度
|
// 此方案缺点:进度不准确,且进度页面不会自动关闭。
|
// bUseTruePro = true: 进度界面显示真实进度
|
// 此方案优点:进度真实
|
// 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句
|
// this.View.Session["ProcessRateValue"] = 100;
|
// 特别说明,当进度更新到100时,进度界面会自动关闭
|
// 本案例选用此方案
|
var processForm = this.View.ShowProcessForm(
|
new Action<FormResult>(t => { }),
|
true,
|
"正在生成,请稍候...");
|
|
// 开启一个异步线程,处理引入功能
|
// using Kingdee.BOS.KDThread;
|
MainWorker.QuequeTask(() =>
|
{
|
var resuult = "";
|
try
|
{
|
// 需要捕获错误,以确保处理结束时,关闭进度滚动界面
|
// 引入功能实际处理函数
|
resuult = this.CompleteSetAnalysisByDataTable();
|
}
|
finally
|
{
|
// 确保标记进度已经到达100%
|
this.View.Session["ProcessRateValue"] = 100;
|
// 引入完毕,关闭进度显示页面
|
var processView = this.View.GetView(processForm.PageId);
|
if (processView != null)
|
{
|
processView.Close();
|
this.View.SendDynamicFormAction(processView);
|
}
|
this.View.ShowMessage(resuult);
|
|
}
|
},
|
(t) => { });
|
}
|
private void COMPLETEBOM()
|
{
|
// 显示一个进度显示界面:显示一个不停滚动的模拟进度
|
// bUseTruePro参数:是否显示真实的进度。
|
// bUseTruePro = false :
|
// 显示一个不停滚动的模拟进度,与实际处理进度没有关联。
|
// 此方案优点:实际处理代码无需计算进度
|
// 此方案缺点:进度不准确,且进度页面不会自动关闭。
|
// bUseTruePro = true: 进度界面显示真实进度
|
// 此方案优点:进度真实
|
// 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句
|
// this.View.Session["ProcessRateValue"] = 100;
|
// 特别说明,当进度更新到100时,进度界面会自动关闭
|
// 本案例选用此方案
|
var processForm = this.View.ShowProcessForm(
|
new Action<FormResult>(t => { }),
|
true,
|
"正在生成,请稍候...");
|
|
// 开启一个异步线程,处理引入功能
|
// using Kingdee.BOS.KDThread;
|
MainWorker.QuequeTask(() =>
|
{
|
var resuult = "";
|
try
|
{
|
// 需要捕获错误,以确保处理结束时,关闭进度滚动界面
|
// 引入功能实际处理函数
|
resuult = this.CompleteSetAnalysisByDataTableBom();
|
}
|
finally
|
{
|
// 确保标记进度已经到达100%
|
this.View.Session["ProcessRateValue"] = 100;
|
// 引入完毕,关闭进度显示页面
|
var processView = this.View.GetView(processForm.PageId);
|
if (processView != null)
|
{
|
processView.Close();
|
this.View.SendDynamicFormAction(processView);
|
this.View.ShowMessage(resuult);
|
}
|
}
|
},
|
(t) => { });
|
}
|
//生产用料清单 齐套分析
|
public string CompleteSetAnalysisByDataTable()
|
{
|
LogHelper.Info("齐套分析sql模式开始准备数据:");
|
string sql = "";
|
try
|
{
|
Stopwatch sw = new Stopwatch();
|
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))
|
{
|
return "请选择组织和单个生产车间";
|
}
|
List<PRD_PPBOM> BomList = new List<PRD_PPBOM>();
|
string procSql = $"exec proc_jit_qtfx {fPrdOrgId},{fProWorkShopId},{Context.UserId}";
|
LogService.Write(procSql);
|
DataSet _ds = DBServiceHelper.ExecuteDataSet(Context, procSql);
|
DataTable resulTable = _ds.Tables[0];
|
if (resulTable.Rows[0][0].ToString().Contains("失败"))
|
return resulTable.Rows[0][0].ToString();
|
else
|
BomList = _ds.ToModelList<PRD_PPBOM>();
|
string fDayPlanFids = "";
|
if (BomList.Count == 0)
|
{
|
return "没有需要进行齐套分析的数据";
|
}
|
else
|
{
|
List<string> _BomList = BomList.Select(x => x.FID.ToString()).Distinct().ToList();
|
fDayPlanFids = string.Join(",", _BomList);
|
}
|
sw.Start();//开始计时
|
//获取当前即时库存 库存数量+库存组织+物料+货主+仓库
|
sql = "/*dialect*/ exec proc_jit_SelectInventory 'PPBOM'";
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
ListInventory = ds.ToModelList<PRD_Inventory>();
|
//车间 仓库对照列表
|
ds = DBServiceHelper.ExecuteDataSet(Context, @"
|
/*dialect*/
|
SELECT DISTINCT T1.FORGID,FWORKSHOPID,FSTOCKID FROM T_PRD_WORKHOUSECOMPAR T1
|
JOIN T_PRD_WORKHOUSECOMPARENTRY T2 ON T1.FID=T2.FID
|
");
|
List<PRD_WorkHouseCompar> pRD_WorkHouseCompar = ds.ToModelList<PRD_WorkHouseCompar>();
|
int i = 1;//用于进度条的加载
|
//日计划+生产订单子表编码ID
|
var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList();
|
string LLsql = string.Format(@"
|
/*dialect*/
|
select a.FCXStockInQty,FPRDMOENTYID,FNeedQty/FQty dwyl,FPickedQty,T2.FMATERIALID,
|
case when FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) < 0 then 0
|
else FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) end as FRemainPickedQty
|
from
|
(
|
select distinct 0 as FCXStockInQty,FPRDMOENTYID from SC_WORKBILLSORTBILLMAIN a
|
union all
|
select distinct 0 as FCXStockInQty,FMOENTRYID from SC_WORKBILLSORTBILLMAIN a where FMOENTRYID>0
|
) a
|
join T_PRD_PPBOM T1 on a.FPRDMOENTYID = t1.FMOENTRYID
|
LEFT JOIN T_PRD_PPBOMENTRY t2 on T1.FID = T2.FID
|
LEFT JOIN T_PRD_PPBOMENTRY_Q t3 on t2.FENTRYID = T3.FENTRYID ", fDayPlanFids);
|
List<DayPlanPickedModel> DayPlanPickedModel = new List<DayPlanPickedModel>();
|
ds = DBServiceHelper.ExecuteDataSet(Context, LLsql);
|
DayPlanPickedModel = ds.ToModelList<DayPlanPickedModel>();
|
//CompleteAnalysisTempModel 用于存储临时需要插入数据
|
List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>();
|
//创建字典 用于储存物料 + 占用数量
|
Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>();
|
LogService.Write($"齐套分析,数据准备阶段,用时" + sw.Elapsed + "总行数:" + DatePlanList.Count);
|
//第一个循环 日计划工单明细 一天+一个工单 一个循环
|
foreach (var item in DatePlanList)
|
{
|
this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(75) / DatePlanList.Count) * i);
|
//日计划用料清单明细 每一天的实际用料情况
|
var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList();
|
//每一个物料进行库存计算
|
foreach (var _item in _BomList)
|
{
|
//车间仓库 对照表 每个日计划同属一个车间 A,B
|
var _pRD_WorkHouseCompar = pRD_WorkHouseCompar.Where(c => /*c.FORGID == _item.FStockOrgId &&*/ c.FWORKSHOPID == _item.FHWorkShopID).ToList();
|
decimal jskcQty = 0;//用于计算
|
decimal jskcQty2 = 0;//用于计算当时那个计算节点的即时库存
|
//计算当前这几个仓库总的库存量
|
if (_pRD_WorkHouseCompar.Count > 0)
|
{
|
foreach (var _WorkHouse in _pRD_WorkHouseCompar)
|
{
|
//库存数据匹配
|
List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber/* && c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == _WorkHouse.FSTOCKID).ToList();
|
if (_ListInventory.Count > 0)
|
{
|
foreach (var Inventory in _ListInventory)
|
{
|
jskcQty += Inventory.FBASEQTY;
|
}
|
}
|
}
|
}
|
//找出物料被其它订单占用数量
|
decimal occupyMaterial = 0;
|
if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2))
|
{
|
occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2];
|
}
|
//虚拟日计划用料清单 需求数量
|
decimal planNeed = _item.PlanCount; //不参与计算 用于记录
|
decimal need = _item.PlanCount;//参与计算
|
decimal FOccupyPickedCount = 0;//占用领料单数量
|
//找到领用数量
|
var _DayPlanPickedModel = DayPlanPickedModel.Where(c => c.FPRDMOENTYID == _item.FPRDMOENTYID && c.FMATERIALID == _item.FMATERIALID2).FirstOrDefault();
|
if (_DayPlanPickedModel != null)
|
{
|
if (_DayPlanPickedModel.FRemainPickedQty >= need)
|
{
|
//领料数量满足了当前这个需求量 直接齐套 不需要去占用仓库
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = planNeed, //齐套数量
|
FLackCount = 0,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = planNeed,//占用领料数量
|
FComPlete = "齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FWorkShop = _item.FHWorkShopID //车间
|
});
|
//扣除剩余可用领料数量
|
_DayPlanPickedModel.FRemainPickedQty -= need;
|
//循环下一个物料
|
continue;
|
}
|
else
|
{
|
need -= _DayPlanPickedModel.FRemainPickedQty; //剩余需求数量
|
FOccupyPickedCount = _DayPlanPickedModel.FRemainPickedQty;
|
_DayPlanPickedModel.FRemainPickedQty = 0;
|
}
|
}
|
if (_pRD_WorkHouseCompar.Count > 0)
|
{
|
//缺料数量 需求数量 - 实际库存 >0 ? 一个物料不管占用多少条 库存+货主 数据 缺料数量是同一个数量
|
decimal _fLackCount = need > jskcQty ? (need - jskcQty) : 0;
|
//LogHelper.Info("组织:" + _item.FStockOrgId + " ,及时库存" + jskcQty);
|
//总库存为0了 直接给出 缺料数量
|
if (jskcQty == 0)
|
{
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = FOccupyPickedCount, //齐套数量
|
FLackCount = need,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = FOccupyPickedCount,//占用领料数量
|
FComPlete = "未齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FWorkShop = _item.FHWorkShopID //车间
|
});
|
//终止该物料计算 进入下一个
|
continue;
|
}
|
foreach (var WorkHouse in _pRD_WorkHouseCompar)
|
{
|
//库存数据匹配
|
List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber /*&& c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == WorkHouse.FSTOCKID).ToList();
|
//需求数量 占用完后可以跳出车间仓库循环
|
if (need == 0)
|
break;
|
if (_ListInventory.Count > 0)
|
{
|
foreach (var Inventory in _ListInventory)
|
{
|
if (need == 0)
|
break;
|
//齐套数量
|
decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;
|
if (!occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2))
|
{
|
occupyDic.Add(_item.FHWorkShopID + _item.FMATERIALID2, fCompleteCount);
|
}
|
else
|
{
|
occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2];
|
occupyDic[_item.FHWorkShopID + _item.FMATERIALID2] = occupyMaterial + fCompleteCount;
|
}
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FErpClsID = _item.FErpClsID,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = Inventory.FOwnerTypeId,
|
FOwnerId = Inventory.FOwnerId,
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = fCompleteCount + FOccupyPickedCount, //齐套数量
|
FLackCount = _fLackCount,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = FOccupyPickedCount,//领料占用数量
|
FComPlete = jskcQty >= need ? "齐套" : "未齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FStock = Inventory.FSTOCKID,//仓库
|
FWorkShop = _item.FHWorkShopID, //车间
|
FLot = Inventory.FLot
|
});
|
//扣减总库存数量
|
jskcQty = jskcQty >= fCompleteCount ? jskcQty - fCompleteCount : 0;
|
//剩余日计划需求数量
|
need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0;
|
//扣减消耗库存
|
Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount;
|
}
|
}
|
}
|
}
|
//没有车间仓库数据 即没有可用库存 为未齐套
|
else
|
{
|
if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2))
|
{
|
occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2];
|
}
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = planNeed - need, //齐套数量
|
FLackCount = need,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = FOccupyPickedCount,//占用领料数量
|
FComPlete = "未齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FWorkShop = _item.FHWorkShopID //车间
|
});
|
}
|
}
|
//Thread.Sleep(6000);
|
i++;
|
}
|
LogService.Write($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
|
List<string> sqlList = new List<string>();
|
DataTable insertDT = new DataTable();
|
insertDT.TableName = "JIT_MOMaterReadysBill";
|
//insertDT.Columns.Add("FID", typeof(long));
|
//insertDT.Columns.Add("FBILLNO", typeof(string));
|
insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string));
|
insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long));
|
insertDT.Columns.Add("FHMAINICMOENTRYID", typeof(long));
|
insertDT.Columns.Add("FHICMOINTERID", typeof(long));
|
insertDT.Columns.Add("FHICMOENTRYID", typeof(long));
|
insertDT.Columns.Add("FHMATERID", typeof(long));
|
insertDT.Columns.Add("FHSTOCKORGID", typeof(long));
|
insertDT.Columns.Add("FHSTOCKQTY", typeof(decimal));
|
insertDT.Columns.Add("FHLEFTQTY", typeof(decimal));
|
insertDT.Columns.Add("FHPRDORGID", typeof(long));
|
insertDT.Columns.Add("FUNITDOSAGE", typeof(decimal));
|
insertDT.Columns.Add("FSUMPLANCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FPRDBILLNO", typeof(string));
|
insertDT.Columns.Add("FOWNERID", typeof(long));
|
insertDT.Columns.Add("FOWNERTYPEID", typeof(string));
|
//insertDT.Columns.Add("FIDENTIFICAT", typeof(long));
|
insertDT.Columns.Add("FPLANDATE", typeof(DateTime));
|
insertDT.Columns.Add("FCOMPLETE", typeof(string));
|
insertDT.Columns.Add("FLACKCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FOCCUPYCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FCOMPLETECOUNT1", typeof(decimal));
|
insertDT.Columns.Add("FERPCLSID", typeof(string));
|
insertDT.Columns.Add("FWORKSHOPID", typeof(long));
|
insertDT.Columns.Add("FSTOCKID", typeof(long));
|
insertDT.Columns.Add("FOCCUPYPICKEDCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FLOT", typeof(long));
|
|
int jdtmmm = 1;
|
int maxFid = DBServiceHelper.ExecuteScalar<int>(Context, "select max(FID)FID FROM JIT_MOMaterReadysBill", 0);
|
foreach (var item in completeAnalysisTempModel)
|
{
|
DataRow dr = insertDT.NewRow();
|
//dr["FID"] = maxFid + jdtmmm;
|
//dr["FBILLNO"] = "";
|
dr["FDOCUMENTSTATUS"] = "A";
|
dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr;
|
dr["FHMAINICMOENTRYID"] = item.FHMainICMOEntryID;
|
dr["FHICMOINTERID"] = item.FHICMOInterID;
|
dr["FHICMOENTRYID"] = item.FHICMOEntryID;
|
dr["FHMATERID"] = item.FHMaterID;
|
dr["FHSTOCKORGID"] = item.FHStockOrgID;
|
dr["FHSTOCKQTY"] = item.FHStockQty;
|
dr["FHLEFTQTY"] = item.FHLeftQty;
|
dr["FHPRDORGID"] = item.FHPRDORGID;
|
dr["FUNITDOSAGE"] = item.FUnitDosage;
|
dr["FSUMPLANCOUNT"] = item.FSumPlanCount;
|
dr["FPRDBILLNO"] = item.FPRDBillNo;
|
dr["FOWNERID"] = item.FOwnerId == null ? "0" : item.FOwnerId;
|
dr["FOWNERTYPEID"] = item.FOwnerTypeId;
|
//dr["FIDENTIFICAT"] = "";
|
dr["FPLANDATE"] = item.FPlanDate.ToString("yyyy-MM-dd");
|
dr["FCOMPLETE"] = item.FComPlete;
|
dr["FLACKCOUNT"] = item.FLackCount;
|
dr["FOCCUPYCOUNT"] = item.FOccupyCount;
|
dr["FCOMPLETECOUNT1"] = item.FCompleteCount1;
|
dr["FERPCLSID"] = item.FErpClsID;
|
dr["FWORKSHOPID"] = item.FWorkShop == null ? "0" : item.FWorkShop;
|
dr["FSTOCKID"] = item.FStock == null ? "0" : item.FStock;
|
dr["FOCCUPYPICKEDCOUNT"] = item.FOccupyPickedCount;
|
dr["FLOT"] = item.FLot == null ? "0" : item.FLot;
|
insertDT.Rows.Add(dr);
|
this.View.Session["ProcessRateValue"] = 75 + Convert.ToInt32((Convert.ToDecimal(23) / completeAnalysisTempModel.Count) * jdtmmm);
|
jdtmmm++;
|
}
|
//灌入数据结束
|
insertDT.EndLoadData();
|
//批量插入到数据库
|
string deletesql = $"delete from JIT_MOMaterReadysBill where FHICMOINTERID in ({fDayPlanFids}) ";
|
DBServiceHelper.Execute(Context, deletesql);
|
DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, insertDT);
|
LogService.Write("批量插入到数据库用时:" + sw.Elapsed);
|
//执行完成后 更新日计划工单状态
|
// DBServiceHelper.Execute(Context, @"
|
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
|
// DBServiceHelper.Execute(Context, @"
|
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
|
//释放齐套操作 避免多人同时进行齐套分析
|
DBServiceHelper.Execute(Context, $"/*dialect*/ update T_PRD_QTFX set FSTATUS = 0 where FPRDORGID ={fPrdOrgId} and FSTATUS = 1 ");
|
sw.Stop();//结束计时
|
LogService.Write("齐套分析运行总时长:" + sw.Elapsed);
|
return "操作成功";
|
}
|
catch (Exception ex)
|
{
|
DBServiceHelper.Execute(Context, $"/*dialect*/ update T_PRD_QTFX set FSTATUS = 0 where FUSERID ={Context.UserId} and FSTATUS = 1 ");
|
LogService.Write("操作失败:" + ex.Message.ToString() + ex.StackTrace);
|
return "操作失败," + ex.Message.ToString();
|
|
}
|
}
|
//收料通知单 齐套分析
|
public string CompleteSetAnalysisByDataTableBom()
|
{
|
LogHelper.Info("齐套分析sql模式开始准备数据:");
|
string sql = "";
|
try
|
{
|
Stopwatch sw = new Stopwatch();
|
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))
|
{
|
return "请选择组织和单个生产车间";
|
}
|
List<PRD_PPBOM> BomList = new List<PRD_PPBOM>();
|
string procSql = $"exec proc_jit_qtfx {fPrdOrgId},{fProWorkShopId},{Context.UserId}";
|
DataSet _ds = DBServiceHelper.ExecuteDataSet(Context, procSql);
|
DataTable resulTable = _ds.Tables[0];
|
if (resulTable.Rows[0][0].ToString().Contains("失败"))
|
return resulTable.Rows[0][0].ToString();
|
else
|
BomList = _ds.ToModelList<PRD_PPBOM>();
|
string fDayPlanFids = "";
|
if (BomList.Count == 0)
|
{
|
return "没有需要进行齐套分析的数据";
|
}
|
else
|
{
|
List<string> _BomList = BomList.Select(x => x.FID.ToString()).Distinct().ToList();
|
fDayPlanFids = string.Join(",", _BomList);
|
}
|
sw.Start();//开始计时
|
//获取当前即时库存 库存数量+库存组织+物料+货主+仓库
|
sql = "/*dialect*/ exec proc_jit_SelectInventory 'BOM'";
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
ListInventory = ds.ToModelList<PRD_Inventory>();
|
//车间 仓库对照列表
|
ds = DBServiceHelper.ExecuteDataSet(Context, @"
|
/*dialect*/
|
SELECT DISTINCT T1.FORGID,FWORKSHOPID,FSTOCKID FROM T_PRD_WORKHOUSECOMPAR T1
|
JOIN T_PRD_WORKHOUSECOMPARENTRY T2 ON T1.FID=T2.FID
|
");
|
List<PRD_WorkHouseCompar> pRD_WorkHouseCompar = ds.ToModelList<PRD_WorkHouseCompar>();
|
int i = 1;//用于进度条的加载
|
//日计划+生产订单子表编码ID
|
var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList();
|
string LLsql = string.Format(@"
|
/*dialect*/
|
select a.FCXStockInQty,FPRDMOENTYID,FNeedQty/FQty dwyl,FPickedQty,T2.FMATERIALID,
|
case when FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) < 0 then 0
|
else FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) end as FRemainPickedQty
|
from
|
(
|
select sum(FCXStockInQty)FCXStockInQty,FPRDMOENTYID from SC_WORKBILLSORTBILLMAIN a
|
group by FPRDMOENTYID
|
) a
|
join T_PRD_PPBOM T1 on a.FPRDMOENTYID = t1.FMOENTRYID
|
LEFT JOIN T_PRD_PPBOMENTRY t2 on T1.FID = T2.FID
|
LEFT JOIN T_PRD_PPBOMENTRY_Q t3 on t2.FENTRYID = T3.FENTRYID ", fDayPlanFids);
|
List<DayPlanPickedModel> DayPlanPickedModel = new List<DayPlanPickedModel>();
|
ds = DBServiceHelper.ExecuteDataSet(Context, LLsql);
|
DayPlanPickedModel = ds.ToModelList<DayPlanPickedModel>();
|
//CompleteAnalysisTempModel 用于存储临时需要插入数据
|
List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>();
|
//创建字典 用于储存物料 + 占用数量
|
Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>();
|
LogService.Write($"齐套分析,数据准备阶段,用时" + sw.Elapsed + "总行数:" + BomList.Count);
|
//第一个循环 日计划工单明细 一天+一个工单 一个循环
|
foreach (var item in DatePlanList)
|
{
|
this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(75) / DatePlanList.Count) * i);
|
//日计划用料清单明细 每一天的实际用料情况
|
var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList();
|
//每一个物料进行库存计算
|
foreach (var _item in _BomList)
|
{
|
//车间仓库 对照表 每个日计划同属一个车间 A,B
|
var _pRD_WorkHouseCompar = pRD_WorkHouseCompar.Where(c => /*c.FORGID == _item.FStockOrgId &&*/ c.FWORKSHOPID == _item.FHWorkShopID).ToList();
|
decimal jskcQty = 0;//用于计算
|
decimal jskcQty2 = 0;//用于计算当时那个计算节点的即时库存
|
//计算当前这几个仓库总的库存量
|
if (_pRD_WorkHouseCompar.Count > 0)
|
{
|
foreach (var _WorkHouse in _pRD_WorkHouseCompar)
|
{
|
//库存数据匹配
|
List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber/* && c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == _WorkHouse.FSTOCKID).ToList();
|
if (_ListInventory.Count > 0)
|
{
|
foreach (var Inventory in _ListInventory)
|
{
|
jskcQty += Inventory.FBASEQTY;
|
}
|
}
|
}
|
}
|
//找出物料被其它订单占用数量
|
decimal occupyMaterial = 0;
|
if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2))
|
{
|
occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2];
|
}
|
//虚拟日计划用料清单 需求数量
|
decimal planNeed = _item.PlanCount; //不参与计算 用于记录
|
decimal need = _item.PlanCount;//参与计算
|
decimal FOccupyPickedCount = 0;//占用领料单数量
|
//找到领用数量
|
var _DayPlanPickedModel = DayPlanPickedModel.Where(c => c.FPRDMOENTYID == _item.FPRDMOENTYID && c.FMATERIALID == _item.FMATERIALID2).FirstOrDefault();
|
if (_DayPlanPickedModel.FRemainPickedQty >= need)
|
{
|
//领料数量满足了当前这个需求量 直接齐套 不需要去占用仓库
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = planNeed, //齐套数量
|
FLackCount = 0,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = planNeed,//占用领料数量
|
FComPlete = "齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FWorkShop = _item.FHWorkShopID //车间
|
});
|
//扣除剩余可用领料数量
|
_DayPlanPickedModel.FRemainPickedQty -= need;
|
//循环下一个物料
|
continue;
|
}
|
else
|
{
|
need -= _DayPlanPickedModel.FRemainPickedQty; //剩余需求数量
|
FOccupyPickedCount = _DayPlanPickedModel.FRemainPickedQty;
|
_DayPlanPickedModel.FRemainPickedQty = 0;
|
}
|
if (_pRD_WorkHouseCompar.Count > 0)
|
{
|
//缺料数量 需求数量 - 实际库存 >0 ? 一个物料不管占用多少条 库存+货主 数据 缺料数量是同一个数量
|
decimal _fLackCount = need > jskcQty ? (need - jskcQty) : 0;
|
//LogHelper.Info("组织:" + _item.FStockOrgId + " ,及时库存" + jskcQty);
|
//总库存为0了 直接给出 缺料数量
|
if (jskcQty == 0)
|
{
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = FOccupyPickedCount, //齐套数量
|
FLackCount = need,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = FOccupyPickedCount,//占用领料数量
|
FComPlete = "未齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FWorkShop = _item.FHWorkShopID //车间
|
});
|
//终止该物料计算 进入下一个
|
continue;
|
}
|
foreach (var WorkHouse in _pRD_WorkHouseCompar)
|
{
|
//库存数据匹配
|
List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber /*&& c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == WorkHouse.FSTOCKID).ToList();
|
//需求数量 占用完后可以跳出车间仓库循环
|
if (need == 0)
|
break;
|
if (_ListInventory.Count > 0)
|
{
|
foreach (var Inventory in _ListInventory)
|
{
|
if (need == 0)
|
break;
|
//齐套数量
|
decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;
|
if (!occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2))
|
{
|
occupyDic.Add(_item.FHWorkShopID + _item.FMATERIALID2, fCompleteCount);
|
}
|
else
|
{
|
occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2];
|
occupyDic[_item.FHWorkShopID + _item.FMATERIALID2] = occupyMaterial + fCompleteCount;
|
}
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FErpClsID = _item.FErpClsID,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = Inventory.FOwnerTypeId,
|
FOwnerId = Inventory.FOwnerId,
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = fCompleteCount + FOccupyPickedCount, //齐套数量
|
FLackCount = _fLackCount,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = FOccupyPickedCount,//领料占用数量
|
FComPlete = jskcQty >= need ? "齐套" : "未齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FStock = Inventory.FSTOCKID,//仓库
|
FWorkShop = _item.FHWorkShopID, //车间
|
FBILLNO = Inventory.FBILLNO,
|
FLot = Inventory.FLot
|
});
|
//扣减总库存数量
|
jskcQty = jskcQty >= fCompleteCount ? jskcQty - fCompleteCount : 0;
|
//剩余日计划需求数量
|
need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0;
|
//扣减消耗库存
|
Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount;
|
}
|
}
|
}
|
}
|
//没有车间仓库数据 既没有可用库存 为未齐套
|
else
|
{
|
if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2))
|
{
|
occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2];
|
}
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = planNeed,//计划总数量
|
FCompleteCount1 = planNeed - need, //齐套数量
|
FLackCount = need,//缺料数量
|
FHStockQty = jskcQty2,//即时库存
|
FHLeftQty = jskcQty,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FOccupyPickedCount = FOccupyPickedCount,//占用领料数量
|
FComPlete = "未齐套",
|
FPlanDate = item.FHMASTERDATE, // 日计划日期
|
FWorkShop = _item.FHWorkShopID //车间
|
});
|
}
|
}
|
//Thread.Sleep(6000);
|
i++;
|
}
|
LogService.Write($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
|
List<string> sqlList = new List<string>();
|
DataTable insertDT = new DataTable();
|
insertDT.TableName = "JIT_MOMaterReadysBillXn";
|
//insertDT.Columns.Add("FID", typeof(long));
|
//insertDT.Columns.Add("FBILLNO", typeof(string));
|
insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string));
|
insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long));
|
insertDT.Columns.Add("FHMAINICMOENTRYID", typeof(long));
|
insertDT.Columns.Add("FHICMOINTERID", typeof(long));
|
insertDT.Columns.Add("FHICMOENTRYID", typeof(long));
|
insertDT.Columns.Add("FHMATERID", typeof(long));
|
insertDT.Columns.Add("FHSTOCKORGID", typeof(long));
|
insertDT.Columns.Add("FHSTOCKQTY", typeof(decimal));
|
insertDT.Columns.Add("FHLEFTQTY", typeof(decimal));
|
insertDT.Columns.Add("FHPRDORGID", typeof(long));
|
insertDT.Columns.Add("FUNITDOSAGE", typeof(decimal));
|
insertDT.Columns.Add("FSUMPLANCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FPRDBILLNO", typeof(string));
|
insertDT.Columns.Add("FOWNERID", typeof(long));
|
insertDT.Columns.Add("FOWNERTYPEID", typeof(string));
|
//insertDT.Columns.Add("FIDENTIFICAT", typeof(long));
|
insertDT.Columns.Add("FPLANDATE", typeof(DateTime));
|
insertDT.Columns.Add("FCOMPLETE", typeof(string));
|
insertDT.Columns.Add("FLACKCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FOCCUPYCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FCOMPLETECOUNT1", typeof(decimal));
|
insertDT.Columns.Add("FERPCLSID", typeof(string));
|
insertDT.Columns.Add("FWORKSHOPID", typeof(long));
|
insertDT.Columns.Add("FSTOCKID", typeof(long));
|
insertDT.Columns.Add("FOCCUPYPICKEDCOUNT", typeof(decimal));
|
insertDT.Columns.Add("FRECIEVEBILLNO", typeof(string));
|
insertDT.Columns.Add("FLOT", typeof(long));
|
int jdtmmm = 1;
|
int maxFid = DBServiceHelper.ExecuteScalar<int>(Context, "select max(FID)FID FROM JIT_MOMaterReadysBillXn", 0);
|
foreach (var item in completeAnalysisTempModel)
|
{
|
DataRow dr = insertDT.NewRow();
|
//dr["FID"] = maxFid + jdtmmm;
|
//dr["FBILLNO"] = "";
|
dr["FDOCUMENTSTATUS"] = "A";
|
dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr;
|
dr["FHMAINICMOENTRYID"] = item.FHMainICMOEntryID;
|
dr["FHICMOINTERID"] = item.FHICMOInterID;
|
dr["FHICMOENTRYID"] = item.FHICMOEntryID;
|
dr["FHMATERID"] = item.FHMaterID;
|
dr["FHSTOCKORGID"] = item.FHStockOrgID;
|
dr["FHSTOCKQTY"] = item.FHStockQty;
|
dr["FHLEFTQTY"] = item.FHLeftQty;
|
dr["FHPRDORGID"] = item.FHPRDORGID;
|
dr["FUNITDOSAGE"] = item.FUnitDosage;
|
dr["FSUMPLANCOUNT"] = item.FSumPlanCount;
|
dr["FPRDBILLNO"] = item.FPRDBillNo;
|
dr["FOWNERID"] = item.FOwnerId == null ? "0" : item.FOwnerId;
|
dr["FOWNERTYPEID"] = item.FOwnerTypeId;
|
//dr["FIDENTIFICAT"] = "";
|
dr["FPLANDATE"] = item.FPlanDate.ToString("yyyy-MM-dd");
|
dr["FCOMPLETE"] = item.FComPlete;
|
dr["FLACKCOUNT"] = item.FLackCount;
|
dr["FOCCUPYCOUNT"] = item.FOccupyCount;
|
dr["FCOMPLETECOUNT1"] = item.FCompleteCount1;
|
dr["FERPCLSID"] = item.FErpClsID;
|
dr["FWORKSHOPID"] = item.FWorkShop == null ? "0" : item.FWorkShop;
|
dr["FSTOCKID"] = item.FStock == null ? "0" : item.FStock;
|
dr["FOCCUPYPICKEDCOUNT"] = item.FOccupyPickedCount;
|
dr["FRECIEVEBILLNO"] = item.FBILLNO == null ? "" : item.FBILLNO;
|
dr["FLOT"] = item.FLot == null ? "0" : item.FLot;
|
insertDT.Rows.Add(dr);
|
this.View.Session["ProcessRateValue"] = 75 + Convert.ToInt32((Convert.ToDecimal(23) / completeAnalysisTempModel.Count) * jdtmmm);
|
jdtmmm++;
|
}
|
insertDT.EndLoadData(); // 灌入数据结束
|
// 批量插入到数据库
|
string deletesql = $"delete from JIT_MOMaterReadysBillXn where FHICMOINTERID in ({fDayPlanFids}) ";
|
DBServiceHelper.Execute(Context, deletesql);
|
DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, insertDT);
|
LogService.Write("批量插入到数据库用时:" + sw.Elapsed);
|
//执行完成后 更新日计划工单状态
|
// DBServiceHelper.Execute(Context, @"
|
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
|
// DBServiceHelper.Execute(Context, @"
|
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
|
//释放齐套操作 避免多人同时进行齐套分析
|
DBServiceHelper.Execute(Context, $"/*dialect*/ update T_PRD_QTFX set FSTATUS = 0 where FPRDORGID ={fPrdOrgId} and FSTATUS = 1 ");
|
sw.Stop();//结束计时
|
LogService.Write("齐套分析运行总时长:" + sw.Elapsed);
|
return "操作成功";
|
}
|
catch (Exception ex)
|
{
|
LogService.Write("操作失败:" + ex.Message.ToString());
|
return "操作失败," + ex.Message.ToString();
|
|
}
|
}
|
/// <summary>
|
/// 虚拟齐套
|
/// </summary>
|
public void Xnqt()
|
{
|
//LogHelper.Info("虚拟齐套分析sql模式开始准备数据:");
|
string sql = "";
|
try
|
{
|
//Stopwatch sw = new Stopwatch();
|
//sw.Start();//开始计时
|
////LogHelper.Info("虚拟齐套分析开始准备数据:" + sw.Elapsed);
|
//清空齐套临时表
|
DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBillXn ");
|
////更新状态
|
//DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillsub set FCOMPLETE='' ");
|
//获取当前即时库存 按照物料+库存组织+货主+库存数量
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @"
|
/*dialect*/
|
select isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0) FBASEQTY,T1.FStockOrgId,T1.FMATERIALID,a.FOWNERID,c.FNUMBER from
|
(
|
select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a
|
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
|
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
|
LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY
|
group by FMATERIALID,FID) T2 on T1.FID = t2.FID
|
group by a.FHPRDORGID,T2.FMATERIALID
|
) T1
|
LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID
|
LEFT JOIN JIT_MOMaterReadysBillXn B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID and a.FOwnerId = b.FOwnerId
|
LEFT join T_ORG_Organizations c on a.FOWNERID = c.FORGID
|
join t_BD_Stock d on a.FSTOCKID =d.FSTOCKID
|
where d.FAvailableComplete<>0
|
--where T1.FMATERIALID in (105773)
|
");
|
ListInventory = ds.ToModelList<PRD_Inventory>();
|
//总库存 物料+库存组织+库存数量
|
ds = DBServiceHelper.ExecuteDataSet(Context, @"
|
/*dialect*/
|
select sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from
|
(
|
select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a
|
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
|
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
|
LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY
|
group by FMATERIALID,FID) T2 on T1.FID = t2.FID
|
group by a.FHPRDORGID,T2.FMATERIALID
|
) T1
|
LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID
|
LEFT JOIN JIT_MOMaterReadysBillXn B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID
|
join t_BD_Stock d on a.FSTOCKID =d.FSTOCKID
|
where d.FAvailableComplete<>0
|
--where T1.FMATERIALID in (105773)
|
group by T1.FStockOrgId,T1.FMATERIALID
|
");
|
ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>();
|
//需要虚拟齐套分析的数据
|
sql = @"
|
/*dialect*/
|
select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,
|
T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,(FHQTY-ISNULL(FProductNum,0))*(FNeedQty/FQty) PlanCount,TBase.FErpClsID from SC_WORKBILLSORTBILLMAIN a
|
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
|
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
|
LEFT JOIN(select FID, MAX(FENTRYID) FENTRYID, SUM(FNeedQty) FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY
|
group by FMATERIALID, FID ) T2 on T1.FID = t2.FID
|
--LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID
|
JOIN T_BD_MATERIAL T4 on T2.FMATERIALID = T4.FMATERIALID
|
JOIN t_BD_MaterialBase TBase on T2.FMATERIALID = TBase.FMATERIALID
|
JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID
|
--条件为今天往后的日计划 + 今天之前未关闭的日计划
|
where (FHEntryCloseDate is null and DATEDIFF(D,GETDATE(),FHMASTERDATE)<0)or DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0
|
and b.FHQTY>0
|
ORDER BY b.FHMASTERDATE,a.FHOrderLev
|
";
|
ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
List<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>();
|
//日计划+生产订单子表编码ID
|
var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList();
|
//CompleteAnalysisTempModel 用于存储临时需要插入数据
|
List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>();
|
int i = 1;
|
//创建字典 用于储存物料 + 占用数量
|
Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>();
|
foreach (var item in DatePlanList)
|
{
|
|
//筛选出当日计划数据
|
var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList();
|
foreach (var _item in _BomList)
|
{
|
//该日计划物料需要数
|
decimal need = _item.PlanCount;
|
var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault();
|
//真正需要取计算的数量(拆分货主)
|
//货主匹配
|
List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FMATERIALID == _item.FMATERIALID2 && c.FStockOrgId == _item.FStockOrgId && c.FBASEQTY > 0).ToList();
|
if (_ListInventory.Count > 0)
|
{
|
decimal _fLackCount = _item.PlanCount > sjkcList.FBASEQTY ? (_item.PlanCount - sjkcList.FBASEQTY) : 0;//缺料数量
|
foreach (var Inventory in _ListInventory)
|
{
|
|
if (need == 0)
|
break;
|
decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量
|
decimal occupyMaterial = 0;
|
if (!occupyDic.ContainsKey(_item.FMATERIALID2))
|
{
|
occupyDic.Add(_item.FMATERIALID2, fCompleteCount);
|
}
|
else
|
{
|
occupyMaterial = occupyDic[_item.FMATERIALID2];
|
occupyDic[_item.FMATERIALID2] = occupyMaterial + fCompleteCount;
|
}
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FErpClsID = _item.FErpClsID,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "BD_OwnerOrg",
|
FOwnerId = Inventory.FOwnerId,
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = _item.PlanCount,//计划总数量
|
FCompleteCount1 = fCompleteCount, //齐套数量
|
FLackCount = _fLackCount,//缺料数量
|
FHStockQty = sjkcList.FBASEQTY,//即时库存
|
FHLeftQty = Inventory.FBASEQTY,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
/* 2021 1.26 更改为need
|
FComPlete = sjkcList.FBASEQTY >= _item.PlanCount ? "齐套" : "未齐套",
|
*/
|
FComPlete = sjkcList.FBASEQTY >= need ? "齐套" : "未齐套",
|
FPlanDate = item.FHMASTERDATE // 日计划日期
|
});
|
//扣减总库存数量
|
sjkcList.FBASEQTY = sjkcList.FBASEQTY >= fCompleteCount ? sjkcList.FBASEQTY - fCompleteCount : 0;
|
//剩余日计划需求数量
|
need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0;
|
//扣减消耗库存
|
Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount;
|
}
|
}
|
else
|
{
|
decimal occupyMaterial = 0;
|
if (occupyDic.ContainsKey(_item.FMATERIALID2))
|
{
|
occupyMaterial = occupyDic[_item.FMATERIALID2];
|
}
|
completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
|
{
|
FHMainICMOInterIDr = _item.FPRDMOMAINID,
|
FHMainICMOEntryID = _item.FPRDMOENTYID,
|
FHICMOInterID = _item.FID.ToString(),
|
FHICMOEntryID = _item.FEntryID.ToString(),
|
FHMaterID = _item.FMATERIALID2,
|
FErpClsID = _item.FErpClsID,
|
FHStockOrgID = _item.FStockOrgId,
|
FHPRDORGID = _item.FStockOrgId,
|
FPRDBillNo = _item.FMOBillNO,
|
FOwnerTypeId = "BD_OwnerOrg",
|
FUnitDosage = _item.dwyl,//单位用量
|
FSumPlanCount = _item.PlanCount,//计划总数量
|
FCompleteCount1 = 0, //齐套数量
|
FLackCount = _item.PlanCount,//缺料数量
|
FHStockQty = 0,//即时库存
|
FHLeftQty = 0,//可用数量
|
FOccupyCount = occupyMaterial,//占用数量
|
FComPlete = "未齐套",
|
FPlanDate = item.FHMASTERDATE // 日计划日期
|
});
|
}
|
}
|
//Thread.Sleep(100);
|
// this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(40) / DatePlanList.Count) * i);
|
i++;
|
|
}
|
////LogHelper.Info($"虚拟齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
|
List<string> sqlList = new List<string>();
|
int jdtmmm = 1;
|
foreach (var item in completeAnalysisTempModel)
|
{
|
sql = string.Format(@"
|
/*dialect*/
|
delete z_JIT_MOMaterReadysBillXn
|
insert into z_JIT_MOMaterReadysBillXn (column1)
|
values('')
|
insert into JIT_MOMaterReadysBillXn
|
(FID, FBILLNO, FDOCUMENTSTATUS, FHMAINICMOINTERIDR, FHMAINICMOENTRYID, FHICMOINTERID, FHICMOENTRYID, FHMATERID, FHSTOCKORGID, FHSTOCKQTY, FHLEFTQTY, FHPRDORGID, FUNITDOSAGE, FSUMPLANCOUNT, FPRDBILLNO, FOWNERID, FOWNERTYPEID, FIDENTIFICAT, FPLANDATE, FCOMPLETE, FLACKCOUNT, FOCCUPYCOUNT, FCOMPLETECOUNT1,FErpClsID)
|
select id, '', 'A', '{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', 'BD_OwnerOrg', '','{13}','{14}','{15}','{16}','{17}',{18} from z_JIT_MOMaterReadysBillXn
|
delete z_JIT_MOMaterReadysBillXn
|
", item.FHMainICMOInterIDr, item.FHMainICMOEntryID, item.FHICMOInterID, item.FHICMOEntryID, item.FHMaterID, item.FHStockOrgID, item.FHStockQty, item.FHLeftQty, item.FHPRDORGID, item.FUnitDosage, item.FSumPlanCount, item.FPRDBillNo, item.FOwnerId == null ? "0" : item.FOwnerId, item.FPlanDate.ToString("yyyy-MM-dd"), item.FComPlete, item.FLackCount, item.FOccupyCount, item.FCompleteCount1, item.FErpClsID);
|
sqlList.Add(sql);
|
//this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(98) / completeAnalysisTempModel.Count) * jdtmmm);
|
jdtmmm++;
|
}
|
DBServiceHelper.ExecuteBatch(Context, sqlList);
|
// //执行完成后 更新日计划工单状态
|
// DBServiceHelper.Execute(Context, @"
|
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBillXn where isnull(FCOMPLETE,'未齐套') ='未齐套')
|
//");
|
// DBServiceHelper.Execute(Context, @"
|
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBillXn where isnull(FCOMPLETE,'未齐套') ='未齐套')
|
//");
|
//sw.Stop();//结束计时
|
////LogHelper.Info("虚拟齐套分析运行总时长:" + sw.Elapsed);
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage("异常:" + ex.Message.ToString());
|
//LogHelper.Error("虚拟齐套分析跳出:" + ex.Message.ToString());
|
}
|
finally
|
{
|
this.View.ShowMessage("执行完成!");
|
}
|
}
|
|
/// <summary>
|
/// 查询
|
/// </summary>
|
public void SearchList()
|
{
|
Stopwatch sw = new Stopwatch();
|
sw.Start();//开始计时
|
this.Model.DeleteEntryData("FEntity");
|
string sqlwhere = " and 1=1";
|
var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString();
|
if (!string.IsNullOrEmpty(fPrdOrgId))
|
sqlwhere += $" and FHPRDORGID in ({fPrdOrgId})";
|
else
|
{
|
this.View.ShowMessage("请选择生产订单组织");
|
return;
|
}
|
DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection;
|
if (entryOp.Count > 0)
|
{
|
//string[] pkValues = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToArray();
|
//var aa = string.Join(",", pkValues);
|
List<string> pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList();
|
sqlwhere += $" and FHWorkShopID in ({string.Join(",", pkValueList)})";
|
}
|
else
|
{
|
this.View.ShowMessage("请选择生产车间");
|
return;
|
}
|
//物料代码
|
string FMaterialNumber = Convert.ToString((this.Model.GetValue("FMaterialNumber")));
|
if (!string.IsNullOrEmpty(FMaterialNumber))
|
sqlwhere += $" and t3.FNumber like ''%{FMaterialNumber}%''";
|
//销售订单号
|
string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder")));
|
if (!string.IsNullOrEmpty(FSalOrder))
|
sqlwhere += $" and FHSeOrderBillNo like ''%{FSalOrder}%''";
|
//生产订单号
|
string FScOrderMainNo = Convert.ToString((this.Model.GetValue("FScOrderMainNo")));
|
if (!string.IsNullOrEmpty(FScOrderMainNo))
|
sqlwhere += $" and FSCORDERNO like ''%{FScOrderMainNo}%''";
|
//物料
|
if ((this.Model.GetValue("FMatralId") as DynamicObject) != null)
|
{
|
string FMatralId = (this.Model.GetValue("FMatralId") as DynamicObject)["Number"].ToString();
|
if (!string.IsNullOrEmpty(FMatralId))
|
sqlwhere += $" and t3.FNumber=''{FMatralId}''";
|
}
|
//编制日期
|
string FBeginPreparatDate = Convert.ToString((this.Model.GetValue("FBrginPreparatDate")));
|
if (!string.IsNullOrEmpty(FBeginPreparatDate))
|
sqlwhere += $" and FPreparatDate>=''{FBeginPreparatDate}''";
|
|
//编制日期
|
string FEndPreparatDate = Convert.ToString((this.Model.GetValue("FEndPreparatDate")));
|
if (!string.IsNullOrEmpty(FEndPreparatDate))
|
sqlwhere += $" and FPreparatDate<=''{FEndPreparatDate}''";
|
|
//发货起始时间,发货截止时间
|
string FBeginDeliveryDate = Convert.ToString((this.Model.GetValue("FBeginDeliveryDate")));
|
if (!string.IsNullOrEmpty(FBeginDeliveryDate))
|
sqlwhere += $" and TD.FPlanDeliveryDate>=''{FBeginDeliveryDate}''";
|
//发货起始时间,发货截止时间
|
string FEndDeliveryDate = Convert.ToString((this.Model.GetValue("FEndDeliveryDate")));
|
if (!string.IsNullOrEmpty(FEndDeliveryDate))
|
sqlwhere += $" and TD.FPlanDeliveryDate<=''{FEndDeliveryDate}''";
|
try
|
{
|
string sql = $"/*dialect*/exec proc_jit_WorkBillPlatformDayPlanSelect '{sqlwhere}' ";
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 0)
|
{
|
this.View.ShowMessage("无有效数据");
|
return;
|
}
|
DateTime DateNow = DateTime.Now;//获取当前日期
|
|
EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity");
|
for (int i = 0; i < dt.Rows.Count; i++)
|
{
|
this.Model.CreateNewEntryRow("FEntity");
|
this.Model.SetValue("FSEQ", i + 1, i);//序号
|
this.Model.SetValue("FMOFBILLTYPE", Convert.ToString(dt.Rows[i]["FMOFBILLTYPE"]), i);//生产订单单据类型
|
this.Model.SetValue("FOrderType", Convert.ToString(dt.Rows[i]["FOrderType"]), i);//订单类型
|
this.Model.SetValue("FStatus", Convert.ToString(dt.Rows[i]["FStatus"]), i);//订单状态
|
//this.Model.SetValue("F_bsv_Text", Convert.ToString(dt.Rows[i]["F_DY"]) + Convert.ToString(dt.Rows[i]["F_GL"]) + Convert.ToString(dt.Rows[i]["F_DB"]), i);//电压/功率/底板
|
this.Model.SetValue("FCompleteSetCount", "", i);//总齐套数量
|
this.Model.SetValue("FPriority", Convert.ToString(dt.Rows[i]["FPriority"]), i);//优先级
|
this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量
|
this.Model.SetValue("FNoStockInQty", dt.Rows[i]["FNoStockInQty"].ToString(), i);//未入库数量
|
this.Model.SetValue("FCXStockInQty", dt.Rows[i]["FCXStockInQty"].ToString(), i);//产线入库数量
|
this.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[i]["FSRCBILLENTRYSEQ"].ToString(), i);//
|
this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHOrderQty"].ToString(), i);//销售订单数量
|
this.Model.SetValue("FBatch", dt.Rows[i]["FBatch"].ToString(), i);//批次号
|
this.Model.SetValue("FUnit", dt.Rows[i]["FUnitId"].ToString(), i);//计量单位
|
this.Model.SetValue("FORGID", dt.Rows[i]["FHPRDORGID"].ToString(), i);//生产组织
|
this.Model.SetValue("FMatrailId", dt.Rows[i]["FHMaterID"].ToString(), i);//产品代码
|
this.Model.SetValue("FDeliverydate", dt.Rows[i]["FHOrderCommitDate"].ToString(), i);//交货日期
|
this.Model.SetValue("FPlanFinishDate", dt.Rows[i]["FPlanFinishDate"].ToString(), i);//计划完工日期
|
this.Model.SetValue("F_TEZV_Base", dt.Rows[i]["F_TEZV_Base"].ToString(), i);//包装标识
|
this.Model.SetValue("F_bsv_WYID", dt.Rows[i]["F_bsv_WYID"].ToString(), i);//唯一ID
|
this.Model.SetValue("FOrderLevel", dt.Rows[i]["FHOrderLev"].ToString(), i);//订单等级
|
this.Model.SetValue("FSCOrderNo", dt.Rows[i]["FSCOrderNo"].ToString(), i);//生产订单号
|
this.Model.SetValue("F_bsv_Integer", dt.Rows[i]["F_bsv_Integer"].ToString(), i);//计划周数
|
this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSEORDERBILLNO"].ToString(), i);//销售订单号
|
this.Model.SetValue("F_TEZV_Text6", dt.Rows[i]["F_TEZV_Text6"].ToString(), i);//源单客户代码
|
this.Model.SetValue("FCustId", dt.Rows[i]["FCustId"].ToString(), i);//客户
|
this.Model.SetValue("FPlanDeliveryDate", dt.Rows[i]["FPlanDeliveryDate"].ToString(), i);//发货时间
|
this.Model.SetValue("FBzDate", dt.Rows[i]["FPreparatDate"].ToString(), i);//预计开工日期
|
this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量
|
this.Model.SetValue("FHMainSourceInterID", dt.Rows[i]["FPRDMOMAINID"].ToString(), i);//源单主内码FHMainSourceInterID
|
this.Model.SetValue("FHMainSourceEntryID", dt.Rows[i]["FPRDMOENTYID"].ToString(), i);//源单子内码FHMainSourceEntryID
|
this.Model.SetValue("FDayPlanWorkID", dt.Rows[i]["FID"].ToString(), i);//日计划工单FID
|
this.Model.SetValue("FResourcesId", dt.Rows[i]["FHSourceID"].ToString(), i);//生产资源
|
this.Model.SetValue("FProductWorkShopId", dt.Rows[i]["FHWorkShopID"].ToString(), i);//生产车间
|
this.Model.SetValue("FCompleteSetCount", dt.Rows[i]["FCompleteCount"].ToString(), i);//齐套数量
|
this.Model.SetValue("FOrderQuantity", dt.Rows[i]["FOrderQuantity"].ToString(), i);//生产订单数量
|
this.Model.SetValue("FCDQuantity", dt.Rows[i]["FCDQuantity"].ToString(), i);//拆单数量
|
this.Model.SetValue("FDayPlanQuantity", Convert.ToDecimal(dt.Rows[i]["FDAYPLANQUANTITY"]) - Convert.ToDecimal(dt.Rows[i]["FQTYLS"]), i);//日计划数量
|
this.Model.SetValue("FQTYLS", dt.Rows[i]["FQTYLS"].ToString(), i);//历史遗留
|
this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量
|
this.Model.SetValue("FKpQty", Convert.ToDecimal(dt.Rows[i]["FDayPlanRemainQty"]), i);//可排数量
|
this.Model.SetValue("FDelaylnUM", dt.Rows[i]["FNotProductNum"].ToString(), i);//拖期数量
|
this.Model.SetValue("FCompleteCount", dt.Rows[i]["FJITCompleteCount"].ToString(), i);//齐套数量
|
sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString();
|
DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
foreach (DataRow dr in _dt.Rows)
|
{
|
DateTime start = Convert.ToDateTime(DateNow.ToShortDateString());
|
DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString());
|
TimeSpan getDay = end.Subtract(start);
|
if (getDay.Days > 30)
|
continue;
|
this.Model.SetValue("FT" + getDay.Days.ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID
|
if (dr["FHLockedSub"].ToString() == "1")
|
this.View.GetFieldEditor("FT" + getDay.Days.ToString(), i).Enabled = false; //单据体行锁定字段
|
}
|
//this.View.InvokeFieldUpdateService("FCDQuantity", i);//GetControl
|
}
|
this.View.UpdateView();
|
for (int j = 0; j < dt.Rows.Count; j++)
|
{
|
sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[j]["FID"].ToString();
|
DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
foreach (DataRow dr in _dt.Rows)
|
{
|
DateTime start = Convert.ToDateTime(DateNow.ToShortDateString());
|
DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString());
|
TimeSpan getDay = end.Subtract(start);
|
if (getDay.Days > 30)
|
continue;
|
|
if (dr["FHLockedSub"].ToString() == "1")
|
this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
|
if (dr["FCOMPLETE"].ToString() == "未齐套")
|
{
|
this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
|
grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#FF0000", j);
|
}
|
else if (dr["FCOMPLETE"].ToString() == "齐套")
|
{
|
this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
|
grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#00FF00", j);
|
}
|
}
|
}
|
for (int m = 0; m <= 30; m++)
|
{
|
this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString();
|
}
|
//
|
LogService.Write("生产计划平台绑定数据用时:" + sw.Elapsed + "行数:" + dt.Rows.Count);
|
sw.Stop();//结束计时
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
/// <summary>
|
/// 编辑
|
/// </summary>
|
public void SearchListEdit()
|
{
|
string sqlwhere = " and 1=1";
|
var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString();
|
if (!string.IsNullOrEmpty(fPrdOrgId))
|
sqlwhere += $" and FHPRDORGID in ({fPrdOrgId})";
|
else
|
{
|
this.View.ShowMessage("请选择生产订单组织");
|
return;
|
}
|
DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection;
|
if (entryOp.Count > 0)
|
{
|
//string[] pkValues = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToArray();
|
//var aa = string.Join(",", pkValues);
|
List<string> pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList();
|
sqlwhere += $" and FHWorkShopID in ({string.Join(",", pkValueList)})";
|
}
|
else
|
{
|
this.View.ShowMessage("请选择生产车间");
|
return;
|
}
|
//物料代码
|
string FMaterialNumber = Convert.ToString((this.Model.GetValue("FMaterialNumber")));
|
if (!string.IsNullOrEmpty(FMaterialNumber))
|
sqlwhere += $" and t3.FNumber like ''%{FMaterialNumber}%''";
|
//销售订单号
|
string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder")));
|
if (!string.IsNullOrEmpty(FSalOrder))
|
sqlwhere += $" and FHSeOrderBillNo like ''%{FSalOrder}%''";
|
//生产订单号
|
string FScOrderMainNo = Convert.ToString((this.Model.GetValue("FScOrderMainNo")));
|
if (!string.IsNullOrEmpty(FScOrderMainNo))
|
sqlwhere += $" and FSCORDERNO like ''%{FScOrderMainNo}%''";
|
//物料
|
if ((this.Model.GetValue("FMatralId") as DynamicObject) != null)
|
{
|
string FMatralId = (this.Model.GetValue("FMatralId") as DynamicObject)["Number"].ToString();
|
if (!string.IsNullOrEmpty(FMatralId))
|
sqlwhere += $" and t3.FNumber=''{FMatralId}''";
|
}
|
//编制日期
|
string FBeginPreparatDate = Convert.ToString((this.Model.GetValue("FBrginPreparatDate")));
|
if (!string.IsNullOrEmpty(FBeginPreparatDate))
|
sqlwhere += $" and FPreparatDate>=''{FBeginPreparatDate}''";
|
|
//编制日期
|
string FEndPreparatDate = Convert.ToString((this.Model.GetValue("FEndPreparatDate")));
|
if (!string.IsNullOrEmpty(FEndPreparatDate))
|
sqlwhere += $" and FPreparatDate<=''{FEndPreparatDate}''";
|
|
//发货起始时间,发货截止时间
|
string FBeginDeliveryDate = Convert.ToString((this.Model.GetValue("FBeginDeliveryDate")));
|
if (!string.IsNullOrEmpty(FBeginDeliveryDate))
|
sqlwhere += $" and TD.FPlanDeliveryDate>=''{FBeginDeliveryDate}''";
|
//发货起始时间,发货截止时间
|
string FEndDeliveryDate = Convert.ToString((this.Model.GetValue("FEndDeliveryDate")));
|
if (!string.IsNullOrEmpty(FEndDeliveryDate))
|
sqlwhere += $" and TD.FPlanDeliveryDate<=''{FEndDeliveryDate}''";
|
try
|
{
|
string sql = $"/*dialect*/exec proc_jit_WorkBillPlatformDayPlanSelect '{sqlwhere}' ";
|
LogService.Write("生产计划平台查询sql:" + sql);
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 0)
|
{
|
this.View.ShowMessage("无有效数据");
|
return;
|
}
|
DateTime DateNow = DateTime.Now;//获取当前日期
|
this.Model.DeleteEntryData("FEntity");
|
EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity");
|
for (int i = 0; i < dt.Rows.Count; i++)
|
{
|
this.Model.CreateNewEntryRow("FEntity");
|
this.Model.SetValue("FSEQ", i + 1, i);//序号
|
this.Model.SetValue("FMOFBILLTYPE", Convert.ToString(dt.Rows[i]["FMOFBILLTYPE"]), i);//生产订单单据类型
|
this.Model.SetValue("FOrderType", Convert.ToString(dt.Rows[i]["FOrderType"]), i);//订单类型
|
this.Model.SetValue("FStatus", Convert.ToString(dt.Rows[i]["FStatus"]), i);//订单状态
|
this.Model.SetValue("FCompleteSetCount", "", i);//总齐套数量
|
this.Model.SetValue("FPriority", Convert.ToString(dt.Rows[i]["FPriority"]), i);//优先级
|
this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量
|
this.Model.SetValue("FNoStockInQty", dt.Rows[i]["FNoStockInQty"].ToString(), i);//未入库数量
|
this.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[i]["FSRCBILLENTRYSEQ"].ToString(), i);//
|
this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHOrderQty"].ToString(), i);//销售订单数量
|
this.Model.SetValue("FBatch", dt.Rows[i]["FBatch"].ToString(), i);//批次号
|
this.Model.SetValue("FUnit", dt.Rows[i]["FUnitId"].ToString(), i);//计量单位
|
this.Model.SetValue("FORGID", dt.Rows[i]["FHPRDORGID"].ToString(), i);//生产组织
|
this.Model.SetValue("FMatrailId", dt.Rows[i]["FHMaterID"].ToString(), i);//产品代码
|
this.Model.SetValue("FDeliverydate", dt.Rows[i]["FHOrderCommitDate"].ToString(), i);//交货日期
|
this.Model.SetValue("FPlanFinishDate", dt.Rows[i]["FPlanFinishDate"].ToString(), i);//计划完工日期
|
this.Model.SetValue("F_TEZV_Base", dt.Rows[i]["F_TEZV_Base"].ToString(), i);//包装标识
|
this.Model.SetValue("F_bsv_WYID", dt.Rows[i]["F_bsv_WYID"].ToString(), i);//唯一ID
|
this.Model.SetValue("FOrderLevel", dt.Rows[i]["FHOrderLev"].ToString(), i);//订单等级
|
this.Model.SetValue("FSCOrderNo", dt.Rows[i]["FSCOrderNo"].ToString(), i);//生产订单号
|
this.Model.SetValue("F_bsv_Integer", dt.Rows[i]["F_bsv_Integer"].ToString(), i);//计划周数
|
this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSEORDERBILLNO"].ToString(), i);//销售订单号
|
this.Model.SetValue("F_TEZV_Text6", dt.Rows[i]["F_TEZV_Text6"].ToString(), i);//源单客户代码
|
this.Model.SetValue("FCustId", dt.Rows[i]["FCustId"].ToString(), i);//客户
|
this.Model.SetValue("FPlanDeliveryDate", dt.Rows[i]["FPlanDeliveryDate"].ToString(), i);//发货时间
|
this.Model.SetValue("FBzDate", dt.Rows[i]["FPreparatDate"].ToString(), i);//预计开工日期
|
this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量
|
this.Model.SetValue("FHMainSourceInterID", dt.Rows[i]["FPRDMOMAINID"].ToString(), i);//源单主内码FHMainSourceInterID
|
this.Model.SetValue("FHMainSourceEntryID", dt.Rows[i]["FPRDMOENTYID"].ToString(), i);//源单子内码FHMainSourceEntryID
|
this.Model.SetValue("FDayPlanWorkID", dt.Rows[i]["FID"].ToString(), i);//日计划工单FID
|
this.Model.SetValue("FResourcesId", dt.Rows[i]["FHSourceID"].ToString(), i);//生产资源
|
this.Model.SetValue("FProductWorkShopId", dt.Rows[i]["FHWorkShopID"].ToString(), i);//生产车间
|
this.Model.SetValue("FCompleteSetCount", dt.Rows[i]["FCompleteCount"].ToString(), i);//齐套数量
|
this.Model.SetValue("FOrderQuantity", dt.Rows[i]["FOrderQuantity"].ToString(), i);//生产订单数量
|
this.Model.SetValue("FDayPlanQuantity", Convert.ToDecimal(dt.Rows[i]["FDayPlanQuantity"]) - Convert.ToDecimal(dt.Rows[i]["FQTYLS"]), i);//日计划数量
|
this.Model.SetValue("FQTYLS", dt.Rows[i]["FQTYLS"].ToString(), i);//历史遗留
|
this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量
|
this.Model.SetValue("FKpQty", Convert.ToDecimal(dt.Rows[i]["FDayPlanRemainQty"]), i);//可排数量
|
this.Model.SetValue("FCDQuantity", dt.Rows[i]["FCDQuantity"].ToString(), i);//拆单数量
|
this.Model.SetValue("FDelaylnUM", dt.Rows[i]["FNotProductNum"].ToString(), i);//拖期数量
|
this.Model.SetValue("FCompleteCount", dt.Rows[i]["FJITCompleteCount"].ToString(), i);//齐套数量
|
sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString();
|
DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
foreach (DataRow dr in _dt.Rows)
|
{
|
DateTime start = Convert.ToDateTime(DateNow.ToShortDateString());
|
DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString());
|
TimeSpan getDay = end.Subtract(start);
|
if (getDay.Days > 30)
|
continue;
|
this.Model.SetValue("FT" + getDay.Days.ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID
|
if (dr["FHLockedSub"].ToString() == "1")
|
this.View.GetFieldEditor("FT" + getDay.Days.ToString(), i).Enabled = false; //单据体行锁定字段
|
}
|
this.View.InvokeFieldUpdateService("FMatrailId", i);//调用数量值更新
|
}
|
this.View.UpdateView();
|
for (int j = 0; j < dt.Rows.Count; j++)
|
{
|
sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[j]["FID"].ToString();
|
DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
foreach (DataRow dr in _dt.Rows)
|
{
|
DateTime start = Convert.ToDateTime(DateNow.ToShortDateString());
|
DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString());
|
TimeSpan getDay = end.Subtract(start);
|
if (getDay.Days > 30)
|
continue;
|
if (dr["FHLockedSub"].ToString() == "1")
|
this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
|
}
|
}
|
for (int m = 0; m <= 30; m++)
|
{
|
this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString();
|
}
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 日计划用料清单进度条
|
/// </summary>
|
[Obsolete]
|
private void DayPlanPPBomBill()
|
{
|
// 显示一个进度显示界面:显示一个不停滚动的模拟进度
|
// bUseTruePro参数:是否显示真实的进度。
|
// bUseTruePro = false :
|
// 显示一个不停滚动的模拟进度,与实际处理进度没有关联。
|
// 此方案优点:实际处理代码无需计算进度
|
// 此方案缺点:进度不准确,且进度页面不会自动关闭。
|
// bUseTruePro = true: 进度界面显示真实进度
|
// 此方案优点:进度真实
|
// 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句
|
// this.View.Session["ProcessRateValue"] = 100;
|
// 特别说明,当进度更新到100时,进度界面会自动关闭
|
// 本案例选用此方案
|
var processForm = this.View.ShowProcessForm(
|
new Action<FormResult>(t => { }),
|
true,
|
"正在生成,请稍候...");
|
|
// 开启一个异步线程,处理引入功能
|
// using Kingdee.BOS.KDThread;
|
MainWorker.QuequeTask(() =>
|
{
|
var result = "操作成功";
|
try
|
{
|
// 需要捕获错误,以确保处理结束时,关闭进度滚动界面
|
// 引入功能实际处理函数
|
result = this.DayPlanPPBomBillBatch();
|
}
|
finally
|
{
|
// 确保标记进度已经到达100%
|
this.View.Session["ProcessRateValue"] = 100;
|
// 引入完毕,关闭进度显示页面
|
var processView = this.View.GetView(processForm.PageId);
|
if (processView != null)
|
{
|
processView.Close();
|
this.View.SendDynamicFormAction(processView);
|
}
|
this.View.ShowMessage(result);
|
}
|
},
|
(t) => { });
|
|
//this.View.ShowMessage("操作成功");
|
}
|
/// <summary>
|
/// 日计划用料清单生成
|
/// </summary>
|
public string DayPlanPPBomBillBatch()
|
{
|
//查找到的同批项次
|
int day = Convert.ToInt32(this.Model.GetValue("FLockDays"));
|
try
|
{
|
string sql = string.Format(@"/*dialect*/
|
SELECT * FROM (
|
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,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
|
JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID
|
JOIN T_PRD_PPBOMENTRY T4 ON T3.FID=T4.FID
|
left join
|
(
|
select FREPLACEGROUP,COUNT(*) FrowCount,FID from T_PRD_PPBOMENTRY
|
GROUP BY FREPLACEGROUP,FID
|
having count(*) >1
|
) ttt on t4.FID = ttt.FID and t4.FREPLACEGROUP =ttt.FREPLACEGROUP
|
JOIN T_PRD_PPBOMENTRY_C Tc ON T4.FENTRYID=Tc.FENTRYID
|
join T_ORG_Organizations torg ON tc.FOWNERID = torg.FORGID
|
JOIN T_BD_MATERIAL T5 ON T3.FMATERIALID=T5.FMATERIALID
|
JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID
|
LEFT JOIN T_BD_UNIT T7 ON T3.FUNITID = T7.FUNITID
|
LEFT JOIN T_BD_UNIT T8 ON T4.FUNITID = T8.FUNITID
|
LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID
|
LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID
|
LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID
|
left join T_BD_DEPARTMENT td on t3.FWORKSHOPID=td.FDEPTID
|
WHERE t2.FORDERTYPE = '生产订单'
|
) tt
|
", day);
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
DataTable dt = ds.Tables[0];
|
List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
|
int jdt = 1;
|
if (dt.Rows.Count > 0)
|
{
|
foreach (DataRow dr in dt.Rows)
|
{
|
this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(75) / dt.Rows.Count) * jdt);
|
DayPlanMaterial.Add(new Demo.Model.Model.DayPlanMaterial
|
{
|
FID = dr["DayPlanFID"].ToString(),
|
FEntryID = dr["FEntryID"].ToString(),
|
FHDate = DateTime.Now.ToString(),
|
FOrgId = dr["FORGNUMBER"].ToString(),
|
FHMaterID = dr["FNUMBER"].ToString(),
|
FHWorkDate = dr["FHMASTERDATE"].ToString(),
|
FHQty = dr["FHQTY"].ToString(),
|
FHUnitID = dr["FUNITNUMBER"].ToString(),
|
FDayPlanFID = dr["FEntryID"].ToString(),
|
FHMaterSubID = dr["FNUMBER2"].ToString(),
|
FHUnitSubID = dr["FUNITNUMBER2"].ToString(),
|
FHQtyMust = dr["FHQtyMust"].ToString(),
|
FHQtySub = dr["FHQtyMust"].ToString(),
|
FHPPBomInterID = dr["FPPBOM"].ToString(),
|
FHPPBomEntryID = dr["FPPBOMENTRYID"].ToString(),
|
FHSourceID = dr["FHSOURCENUMBER"].ToString(),
|
FNumerator = dr["FNumerator"].ToString(),
|
FDenominator = dr["FDenominator"].ToString(),
|
FFIXSCRAPQTY = dr["FFIXSCRAPQTY"].ToString(),
|
FHQtyScrap = dr["FSCRAPRATE"].ToString(),
|
FMOBILLNO = dr["FSCORDERNO"].ToString(),
|
FMOENTRYID = dr["FMOENTRYID"].ToString(),
|
FPPBOMBILLNO = dr["FPPBOMBILLNO"].ToString(),
|
FPPBOMFSEQ = dr["FSEQ"].ToString(),
|
FOwnerTypeId = dr["FOWNERTYPEID"].ToString(),
|
FOwnerID = dr["FORGNUMBER"].ToString(),
|
FEntrustPickOrgId = dr["FORGNUMBER"].ToString(),
|
FMOID = dr["FMOID"].ToString(),
|
FIssueType = dr["FIssueType"].ToString(),
|
FMaterialType = dr["FMaterialType"].ToString(),
|
FDayPlanFSEQ = dr["FDayPlanFSEQ"].ToString(),
|
FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString(),
|
FWORKSHOPID = dr["FWORKSHOPID"].ToString(),
|
FReplaceGroup = dr["FReplaceGroup"].ToString(),
|
FUseRate = dr["FUseRate"].ToString(),
|
FIsTDL = dr["FIsTDL"].ToString(),
|
FMoSeq = dr["FMoSeq"].ToString(),
|
});
|
}
|
LogService.Write($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:");
|
var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
|
int i = 1;
|
int jdtmmm = 1;
|
JArray Fentity = new JArray();
|
foreach (var item in fidList)
|
{
|
this.View.Session["ProcessRateValue"] = 75 + Convert.ToInt32((Convert.ToDecimal(23) / dt.Rows.Count) * jdtmmm);
|
var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).OrderBy(x => Convert.ToInt32(x.FReplaceGroup)).ToList();
|
JObject model = new JObject();
|
|
if (!string.IsNullOrEmpty(_DayPlanMaterial[0].FID))
|
model.Add("FID", _DayPlanMaterial[0].FID);
|
model.Add("FHDate", DateTime.Now);
|
model.Add("FOrgId", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FOrgId });//发料组织
|
model.Add("FHMaterID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHMaterID });//物料
|
model.Add("FHWorkDate", _DayPlanMaterial[0].FHWorkDate);//日工单日期 FHWorkDate
|
model.Add("FHQty", _DayPlanMaterial[0].FHQty);//主产品数量:FHQty
|
model.Add("FHUnitID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHUnitID });//单位:FHUnitID
|
model.Add("FDayPlanFID", _DayPlanMaterial[0].FDayPlanFID);//日计划工单内码
|
model.Add("FDayPlanFSEQ", _DayPlanMaterial[0].FDayPlanFSEQ);//日计划工单明细行号
|
model.Add("FDayPlanFBillNo", _DayPlanMaterial[0].FDayPlanFBILLNO);//日计划工单单据编号
|
JArray Entry = new JArray();
|
int FSEQ = 1;
|
foreach (var _item in _DayPlanMaterial)
|
{
|
JObject ModelEnty = new JObject();
|
ModelEnty.Add("FHMaterSubID", new JObject() { ["Fnumber"] = _item.FHMaterSubID });//子物料FHMaterSubID
|
ModelEnty.Add("FHUnitSubID", new JObject() { ["Fnumber"] = _item.FHUnitSubID });//单位FHUnitSubID
|
ModelEnty.Add("FHQtyMust", _item.FHQtyMust);//应发数量FHQtyMust
|
ModelEnty.Add("FHQtySub", _item.FHQtySub);//数量FHQtySub
|
ModelEnty.Add("FHPPBomInterID", _item.FHPPBomInterID);//用料清单主内码FHPPBomInterID
|
ModelEnty.Add("FHPPBomEntryID", _item.FHPPBomEntryID);//用料清单子内码FHPPBomEntryID
|
ModelEnty.Add("FHSourceID", new JObject() { ["Fnumber"] = _item.FHSourceID });//生产资源FHSourceID
|
ModelEnty.Add("FNumerator", _item.FNumerator);//分母
|
ModelEnty.Add("FDenominator", _item.FDenominator);//分子
|
ModelEnty.Add("FDwyl", Convert.ToDecimal(_item.FNumerator) / Convert.ToDecimal(_item.FDenominator));//单位用料
|
ModelEnty.Add("FFIXSCRAPQTY", _item.FFIXSCRAPQTY);//固定损耗
|
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);//
|
ModelEnty.Add("FOwnerID", new JObject() { ["Fnumber"] = _item.FOwnerID });//
|
ModelEnty.Add("FEntrustPickOrgId", new JObject() { ["Fnumber"] = _item.FEntrustPickOrgId });//
|
ModelEnty.Add("FMOID", _item.FMOID);//
|
ModelEnty.Add("FISSUETYPE", _item.FIssueType);//
|
ModelEnty.Add("FMaterialType", _item.FMaterialType);//
|
ModelEnty.Add("FWORKSHOPID", new JObject() { ["Fnumber"] = _item.FWORKSHOPID });//
|
ModelEnty.Add("FReplaceGroup", _item.FReplaceGroup);//
|
ModelEnty.Add("FUseRate", _item.FUseRate);//
|
ModelEnty.Add("FIsTDL", Convert.ToInt32(_item.FIsTDL) > 0 ? 1 : 0);//
|
Entry.Add(ModelEnty);
|
FSEQ++;
|
}
|
model.Add("FEntity", Entry);
|
|
Fentity.Add(model);
|
if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count))
|
{
|
//LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
|
JObject jsonRoot = new JObject()
|
{
|
["Creator"] = "",
|
["NeedUpDateFields"] = new JArray(),
|
["NeedReturnFields"] = new JArray(),
|
["IsDeleteEntry"] = "true",
|
["SubSystemId"] = "",
|
["IsVerifyBaseDataField"] = "false",
|
//["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
|
["Model"] = Fentity
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.BatchSave("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString());
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc == "TRUE")
|
{
|
var Success = saveObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToString().TrimStart('{').TrimEnd('}');
|
var allList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(Success);
|
List<string> ls = new List<string>();
|
foreach (var it in allList)
|
{
|
it.TryGetValue("Id", out string value);
|
ls.Add(value);
|
}
|
var resultAA = String.Join(",", ls.ToArray());
|
string resSql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set Sc_WorkBillSortBillSub.FDAYPLANPPBOMBILLNO = Sc_DayPlanPPBomBillMain.FBILLNO from Sc_WorkBillSortBillSub join Sc_DayPlanPPBomBillMain on Sc_WorkBillSortBillSub.FEntryID = Sc_DayPlanPPBomBillMain.FDayPlanFID where Sc_DayPlanPPBomBillMain.FID in ({0})", resultAA);
|
DBServiceHelper.Execute(Context, resSql);
|
}
|
if (saveIsSuc != "TRUE")
|
{
|
LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
|
//LogHelper.Error(saveObj.ToString());
|
return "操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
|
//this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
}
|
Fentity = new JArray();
|
}
|
i++;
|
|
this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / fidList.Count) * jdtmmm);
|
//Thread.Sleep(6000);
|
jdtmmm++;
|
}
|
}
|
//sw.Stop();//结束计时
|
////LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
|
return "操作成功";
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
|
return "操作失败," + ex.Message.ToString();
|
//this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 提料计划
|
/// </summary>
|
public void Extraction()
|
{
|
//LogHelper.Info("[提料计划准备阶段]:测试测试测试测试测试测试测试测试");
|
try
|
{
|
//Stopwatch sw = new Stopwatch();
|
//sw.Start();//开始计时
|
string sql = string.Format(@"/*dialect*/ select distinct FHICMOINTERID FID from JIT_MOMaterReadysBill ");
|
DataTable fidDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
string FDayPlanWorkID = "";
|
foreach (DataRow dr in fidDt.Rows)
|
{
|
FDayPlanWorkID += Convert.ToString(dr["FID"]) + ",";
|
}
|
FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1);
|
//提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量
|
sql = string.Format(@"
|
/*dialect*/
|
exec [提料计划预处理] '{0}'
|
", FDayPlanWorkID.Replace(",", "-"));
|
DBServiceHelper.Execute(Context, sql);
|
//LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
|
//采购订单数据
|
sql = @"
|
/*dialect*/
|
select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t2.FQTY-t2.FPODemandPlanCount)FQTY,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FSTOCKINQTY,FReceiveQty,FCloseStatus,FMRPCLOSESTATUS from t_PUR_POOrder t1
|
join t_PUR_POOrderEntry t2 on t1.FID = t2.FID
|
join t_BD_Supplier t3 on t1.FSUPPLIERID = t3.FSUPPLIERID
|
join T_PUR_POORDERENTRY_R t4 on t2.FENTRYID = t4.FENTRYID
|
join T_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID
|
where t2.FQTY-t2.FPODemandPlanCount>0
|
and FCloseStatus in('A') and FMRPCLOSESTATUS in('A')
|
and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142')
|
";
|
List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
|
//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
|
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
|
group by T1.FMATERIALID, T1.FID) T3 on T1.FPRDMOMAINID = t3.FMoId and T1.FHMATERID = t3.FMATERIALIDMAIN
|
JOIN T_BD_MATERIAL T6 ON T3.FMATERIALID = T6.FMATERIALID
|
join t_BD_MaterialBase t4 on t3.FMATERIALID = t4.FMATERIALID
|
join t_BD_MaterialPlan t5 on t3.FMATERIALID = t5.FMATERIALID
|
WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0
|
AND FComplete ='未齐套'
|
AND FERPCLSID=1
|
AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0}))
|
AND T1.FID in ({0})
|
order by FHMASTERDATE
|
", FDayPlanWorkID);
|
sql = string.Format(@"
|
/*dialect*/
|
SELECT T1.FID,FHMASTERDATE,t1.FEntryID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t1.FMATERIALID,t6.FNumber,NeedQty, FStockOrgId ,FErpClsID
|
FROM (
|
select FHICMOINTERID FID,FHICMOENTRYID FEntryID,FPlanDate FHMASTERDATE,FLackCount NeedQty,FHMATERID FMATERIALID,FHStockOrgID FStockOrgId,FPRDBILLNO FBillNo,FSumPlanCount FNeedQty from JIT_MOMaterReadysBill a
|
right join (select max(FID)FID from JIT_MOMaterReadysBill GROUP BY FHICMOENTRYID,FHMATERID) b on a.FID = b.FID
|
)T1
|
JOIN T_BD_MATERIAL T6 ON T1.FMATERIALID = T6.FMATERIALID
|
join t_BD_MaterialBase t4 on T1.FMATERIALID = t4.FMATERIALID
|
join t_BD_MaterialPlan t5 on T1.FMATERIALID = t5.FMATERIALID
|
WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0
|
AND FERPCLSID in ('1','3')
|
AND T1.NeedQty>0
|
AND T1.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0}))
|
AND T1.FID in ({0})
|
order by FHMASTERDATE
|
", FDayPlanWorkID);
|
//LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql);
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>();
|
//物料+库存组织分类
|
var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList();
|
var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "163165").ToList();
|
//LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
|
//提料计划数据集临时存储集合
|
List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
|
//sql集合 更新采购订单占用的提料计划数量
|
List<string> sqlList = new List<string>();
|
//MaterialIDList = new List<string> { "105773" };
|
foreach (var item in MaterialIDList)
|
{
|
//当前物料没有采购订单时 直接跳出
|
List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
|
if (_PurchaseInventory.Count == 0)
|
{
|
//LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
|
continue;
|
}
|
////LogHelper.Info(item.FMATERIALID.ToString());
|
//当前物料和库存组织对应的需进行提料计划的数据
|
List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList();
|
decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量
|
double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期
|
string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类
|
string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期
|
string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存
|
decimal NeedQty = 0;
|
DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期
|
int i = 0;
|
//记录在最小采购量需求下的日计划明细FentyrID
|
List<int> FEntryIdList = new List<int>();
|
foreach (var _item in _DayPlanPpbom)
|
{
|
i++;
|
_PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
|
if (_PurchaseInventory.Count == 0)
|
{
|
////LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
|
break;
|
}
|
|
if (NeedQty == 0)
|
DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME);
|
FEntryIdList.Add(_item.FENTRYID);
|
NeedQty += _item.NeedQty;
|
|
////LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
|
////LogHelper.Info("总需求量:" + NeedQty + "");
|
////LogHelper.Info("最小起订量:" + FMINPOQTY + "");
|
if (NeedQty <= FMINPOQTY)
|
{
|
//LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
|
}
|
|
if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类
|
continue;
|
|
//if (NeedQty >= FMINPOQTY)
|
//{
|
foreach (var Purchase in _PurchaseInventory)
|
{
|
////LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
|
////LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
|
if (Purchase.FQTY >= NeedQty)
|
{
|
foreach (int id in FEntryIdList)
|
{
|
var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
|
PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
|
{
|
FID = DayPlanPpbomls.FID,
|
FHMASTERDATE = DATE,
|
FQty = DayPlanPpbomls.NeedQty,
|
FBILLNO = DayPlanPpbomls.FBILLNO,
|
FENTRYID = DayPlanPpbomls.FENTRYID,
|
FMATERIALID = DayPlanPpbomls.FMATERIALID,
|
FNumber = DayPlanPpbomls.FNumber,
|
OLDDATE = DayPlanPpbomls.FHMASTERDATE,
|
FFIXLEADTIME = FFIXLEADTIME,
|
FErpClsID = DayPlanPpbomls.FErpClsID,
|
|
PurchseFID = Purchase.FID,
|
PurchseFentryID = Purchase.FENTRYID,
|
FSUPPLIERID = Purchase.FSUPPLIERID,
|
PurchseFNUMBER = Purchase.FNUMBER,
|
PurchseFBillNo = Purchase.FBillNo,
|
PurchseFqty = Purchase.FQTY,
|
FStockOrgId = Purchase.FStockOrgId, //采购组织
|
FORGNumber = Purchase.FORGNumber
|
});
|
//扣除日计划明细已被分配的数量
|
DayPlanPpbomls.NeedQty = 0;
|
}
|
FEntryIdList.Clear();
|
//更新采购订单
|
sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount =isnull(FPODemandPlanCount,0)+ '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
|
//扣除当前行对应采购订单数量
|
var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
|
ls.FQTY -= NeedQty;
|
break;
|
}
|
else
|
{
|
//更新总需求数量
|
NeedQty = NeedQty - Purchase.FQTY;
|
//采购订单数量
|
decimal _NeedQty = Purchase.FQTY;
|
List<int> mmm = new List<int>();
|
foreach (int id in FEntryIdList)
|
{
|
var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
|
decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
|
//if (Qty == 0)
|
// //LogHelper.Info("订单数量为0");
|
if (Qty > _NeedQty)
|
Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
|
|
//if (_NeedQty == 0)
|
// //LogHelper.Info("订单数量为0");
|
|
_NeedQty = _NeedQty - Qty;
|
PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
|
{
|
FID = DayPlanPpbomls.FID,
|
FHMASTERDATE = DATE,
|
FQty = Qty,
|
FBILLNO = DayPlanPpbomls.FBILLNO,
|
FENTRYID = DayPlanPpbomls.FENTRYID,
|
FMATERIALID = DayPlanPpbomls.FMATERIALID,
|
FNumber = DayPlanPpbomls.FNumber,
|
OLDDATE = DayPlanPpbomls.FHMASTERDATE,
|
FFIXLEADTIME = FFIXLEADTIME,
|
FErpClsID = DayPlanPpbomls.FErpClsID,
|
|
PurchseFID = Purchase.FID,
|
PurchseFentryID = Purchase.FENTRYID,
|
FSUPPLIERID = Purchase.FSUPPLIERID,
|
PurchseFNUMBER = Purchase.FNUMBER,
|
PurchseFBillNo = Purchase.FBillNo,
|
PurchseFqty = Purchase.FQTY,
|
FStockOrgId = Purchase.FStockOrgId, //采购组织
|
FORGNumber = Purchase.FORGNumber
|
});
|
//更新计划数量(剩余需要排的) 继续去计算下一个采购订单
|
DayPlanPpbomls.NeedQty -= Qty;
|
//更新采购订单
|
sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}");
|
//更新Model
|
var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
|
ls.FQTY -= Qty;
|
if (_NeedQty <= 0)
|
{
|
foreach (var mm in mmm)
|
{
|
FEntryIdList.Remove(mm);
|
}
|
break;
|
}
|
mmm.Add(id);
|
}
|
//foreach (var mm in mmm)
|
//{
|
// FEntryIdList.Remove(mm);
|
//}
|
}
|
}
|
NeedQty = 0;
|
//}
|
#region 剩下不足时按最小采购批次生成
|
//剩下不足时按最小采购批次生成
|
//else if (i == _DayPlanPpbom.Count && NeedQty > 0)
|
//{
|
// NeedQty = FMINPOQTY;
|
// List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList();
|
// if (_PurchaseInventory.Count == 0)
|
// {
|
// NeedQty = 0;
|
// break;
|
// }
|
// foreach (var Purchase in _PurchaseInventory)
|
// {
|
// if (Purchase.FQTY >= NeedQty)
|
// {
|
// List<int> mmm = new List<int>();
|
// foreach (int id in FEntryIdList)
|
// {
|
// mmm.Add(id);
|
// var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
|
// PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
|
// {
|
// FID = DayPlanPpbomls.FID,
|
// FHMASTERDATE = DATE,
|
// FQty = DayPlanPpbomls.NeedQty,
|
// FBILLNO = DayPlanPpbomls.FBILLNO,
|
// FENTRYID = DayPlanPpbomls.FENTRYID,
|
// FMATERIALID = DayPlanPpbomls.FMATERIALID,
|
// FNumber = DayPlanPpbomls.FNumber,
|
// OLDDATE = DayPlanPpbomls.FHMASTERDATE,
|
// FFIXLEADTIME = FFIXLEADTIME,
|
// PurchseFID = Purchase.FID,
|
// PurchseFentryID = Purchase.FENTRYID,
|
// FSUPPLIERID = Purchase.FSUPPLIERID,
|
// PurchseFNUMBER = Purchase.FNUMBER,
|
// PurchseFBillNo = Purchase.FBillNo,
|
// PurchseFqty = Purchase.FQTY
|
// });
|
// //扣除日计划明细已被分配的数量
|
// DayPlanPpbomls.NeedQty = 0;
|
// }
|
// FEntryIdList.Clear();
|
// //更新采购订单
|
// sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount =isnull(FPODemandPlanCount,0)+ '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
|
// //扣除当前行对应采购订单数量
|
// var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
|
// ls.FQTY -= NeedQty;
|
// break;
|
// }
|
// else
|
// {
|
// NeedQty = NeedQty - Purchase.FQTY;
|
// decimal _NeedQty = Purchase.FQTY;//采购订单数量
|
// List<int> mmm = new List<int>();
|
// foreach (int id in FEntryIdList)
|
// {
|
// var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
|
// decimal Qty = DayPlanPpbomls.NeedQty;
|
// if (Qty > _NeedQty)
|
// Qty = _NeedQty;
|
// _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty;
|
// PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
|
// {
|
// FID = DayPlanPpbomls.FID,
|
// FHMASTERDATE = DATE,
|
// FQty = Qty,
|
// FBILLNO = DayPlanPpbomls.FBILLNO,
|
// FENTRYID = DayPlanPpbomls.FENTRYID,
|
// FMATERIALID = DayPlanPpbomls.FMATERIALID,
|
// FNumber = DayPlanPpbomls.FNumber,
|
// OLDDATE = DayPlanPpbomls.FHMASTERDATE,
|
// FFIXLEADTIME = FFIXLEADTIME,
|
// PurchseFID = Purchase.FID,
|
// PurchseFentryID = Purchase.FENTRYID,
|
// FSUPPLIERID = Purchase.FSUPPLIERID,
|
// PurchseFNUMBER = Purchase.FNUMBER,
|
// PurchseFBillNo = Purchase.FBillNo,
|
// PurchseFqty = Purchase.FQTY
|
// });
|
// DayPlanPpbomls.NeedQty -= Qty;
|
// //更新采购订单
|
// sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}");
|
// //更新Model
|
// var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
|
// ls.FQTY -= Qty;
|
// if (_NeedQty < 0)
|
// {
|
// foreach (var mm in mmm)
|
// {
|
// FEntryIdList.Remove(mm);
|
// }
|
// break;
|
// }
|
// mmm.Add(id);
|
// }
|
// foreach (var mm in mmm)
|
// {
|
// FEntryIdList.Remove(mm);
|
// }
|
// }
|
// }
|
// NeedQty = 0;
|
//}
|
#endregion
|
|
}
|
}
|
var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
|
var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
|
////LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count},耗时:" + sw.Elapsed);
|
int tlmmm = 1;
|
JArray FinalyResult = new JArray();
|
foreach (var item in PODemandPlanList)
|
{
|
DateTime date = item.FHMASTERDATE;
|
string PurchseFNUMBER = item.PurchseFNUMBER;
|
JObject model = new JObject();
|
model.Add("FHDate", date);
|
model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
|
model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER });
|
|
JArray Fentity = new JArray();
|
List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList();
|
int FSEQ = 1;
|
foreach (var _item in _PODemandPlanList)
|
{
|
JObject FentityModel = new JObject();
|
FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织
|
FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料
|
FentityModel.Add("FHQty", _item.FQty);//数量
|
FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID
|
FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID
|
FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号
|
FentityModel.Add("FHSourceBillType", "");//日计划工单类型
|
FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型
|
FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量
|
FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期
|
FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织
|
FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID
|
FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID
|
FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo
|
FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式
|
//FentityModel.Add("FSEQ", FSEQ); //发料方式
|
FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式
|
|
Fentity.Add(FentityModel);
|
FSEQ++;
|
}
|
model.Add("FEntity", Fentity);
|
FinalyResult.Add(model);
|
if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count))
|
{
|
//LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
|
JObject jsonRoot = new JObject()
|
{
|
["Creator"] = "",
|
["NeedUpDateFields"] = new JArray(),
|
["NeedReturnFields"] = new JArray(),
|
["IsDeleteEntry"] = "false",
|
["SubSystemId"] = "",
|
["IsVerifyBaseDataField"] = "false",
|
["Model"] = FinalyResult
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.BatchSave("paez_PODemandPlan", jsonRoot.ToString());
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc != "TRUE")
|
{
|
//LogHelper.Error(jsonRoot.ToString());
|
}
|
FinalyResult = new JArray();
|
}
|
tlmmm++;
|
}
|
//sw.Stop();//结束计时
|
////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
|
DBServiceHelper.ExecuteBatch(Context, sqlList);
|
}
|
catch (Exception ex)
|
{
|
//LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
|
}
|
// var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new {p.FSUPPLIERID, p.FHMASTERDATE }).ToList();
|
}
|
/// <summary>
|
/// 1.锁库,具体字段根据业务单据决定,‘Inv’表示即时库存,‘FInvDetailID’为即时库存ID
|
/// </summary>
|
public void Reserve()
|
{
|
try
|
{
|
decimal ReserveCount = Convert.ToDecimal((this.Model.GetValue("FReservedCount")));
|
if (ReserveCount == 0)
|
{
|
this.View.ShowMessage("请输入预留数量");
|
return;
|
}
|
//获取单据体信息
|
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));
|
if (filterResult.Count == 0)
|
{
|
this.View.ShowMessage("请选择需要预留的单据!");
|
return;
|
}
|
//总库存 物料+库存组织+库存数量
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @"
|
/*dialect*/
|
select sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from
|
(
|
select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a
|
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
|
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
|
LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY
|
group by FMATERIALID,FID) T2 on T1.FID = t2.FID
|
group by a.FHPRDORGID,T2.FMATERIALID
|
) T1
|
LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID
|
LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID
|
--where T1.FMATERIALID in (105773)
|
group by T1.FStockOrgId,T1.FMATERIALID
|
");
|
ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>();
|
foreach (DynamicObject current in entityDataObjoct)
|
{
|
if (Convert.ToString(current["FFOCUS"]) == "False")
|
continue;
|
string sql = string.Format(@"
|
/*dialect*/
|
--生产用料清单列表
|
SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId,
|
T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/FQty ) as dwyl
|
--,isnull(t3.FBASEQTY,0)FBASEQTY
|
FROM T_PRD_PPBOM T1
|
LEFT JOIN (select FID,MAX(FENTRYID)FENTRYID,SUM(FNeedQty)FNeedQty,FMATERIALID from T_PRD_PPBOMENTRY where FMoId='{0}'
|
group by FMATERIALID,FID ) T2 on T1.FID=t2.FID
|
--LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID
|
LEFT JOIN T_BD_MATERIAL T4 on T2.FMATERIALID=T4.FMATERIALID
|
where t1.FMoId='{0}' and T1.FMaterialID='{1}'
|
", current["FHMainSourceInterID"].ToString(), current["FMatrailId_Id"].ToString());
|
ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
var PpbomList = ds.ToModelList<PRD_PPBOM>();
|
//当前最大齐套数 下层需求数量/父级需求数量=单位用料
|
//var SumGetComplete = Math.Floor(PpbomList.Min(t => t.FBASEQTY / (t.FNeedQty / t.FQty)));
|
//最大齐套数
|
var result = (from a in PpbomList
|
join b in ListInventoryByStockOrgId
|
on new { materialId = a.FMATERIALID2, stockOrgId = a.FStockOrgId }
|
equals new { materialId = b.FMATERIALID, stockOrgId = b.FStockOrgId }
|
into g
|
from b in g.DefaultIfEmpty()
|
select new
|
{
|
value = (b?.FBASEQTY / a.dwyl) ?? 0
|
}).ToList().Min(x => x.value);
|
if (result < ReserveCount)
|
{
|
this.View.ShowErrMessage("当前库存超出可预留最大数:" + result + "");
|
return;
|
};
|
//将预留数量分配到日计划工单
|
sql = string.Format(@"/*dialect*/select FEntryID,FHQTY from Sc_WorkBillSortBillSub
|
where FID='{0}' and isnull(FCOMPLETE,'未齐套')='未齐套'", current["FDayPlanWorkID"].ToString());
|
DataTable dayPlanDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
var count = ReserveCount;
|
List<string> sqlList = new List<string>();
|
if (dayPlanDt.Rows.Count > 0)
|
{
|
foreach (DataRow dr in dayPlanDt.Rows)
|
{
|
if (count > 0)
|
{
|
sql = string.Format("/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = {0} where FEntryID = {1}", count >= Convert.ToDecimal(dr["FHQTY"]) ? Convert.ToDecimal(dr["FHQTY"]) : count, dr["FEntryID"].ToString());
|
sqlList.Add(sql);
|
count = count - Convert.ToDecimal(dr["FHQTY"]);
|
}
|
else
|
break;
|
}
|
DBServiceHelper.ExecuteBatch(Context, sqlList);
|
}
|
sql = string.Format(@"/*dialect*/
|
--生产用料清单列表
|
SELECT T1.FID,T1.FBillNo,T2.FENTRYID,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId,
|
T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/T1.FQty ) as dwyl,
|
t5.FBASEUNITID,t6.FSTOREUNITID,t7.FID FSTKID,t7.FOwnerID,t7.FOwnerTypeID,t7.FSTOCKID,t7.FBASEQTY
|
--,isnull(t3.FBASEQTY,0)FBASEQTY
|
FROM T_PRD_PPBOM T1
|
LEFT JOIN (select FID,MAX(FENTRYID)FENTRYID,SUM(FNeedQty)FNeedQty,FMATERIALID from T_PRD_PPBOMENTRY where FMoId='{0}'
|
group by FMATERIALID,FID ) T2 on T1.FID=t2.FID
|
--LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID
|
LEFT JOIN T_BD_MATERIAL T4 on T2.FMATERIALID=T4.FMATERIALID
|
join t_BD_MaterialBase t5 on t4.FMATERIALID = t5.FMATERIALID
|
join t_BD_MaterialStock t6 on t4.FMATERIALID = t6.FMATERIALID
|
join T_STK_INVENTORY t7 on t4.FMATERIALID = t7.FMATERIALID and t1.FPRDORGID=t7.FSTOCKORGID
|
where t1.FMoId='{0}' and T1.FMaterialID='{1}'
|
", current["FHMainSourceInterID"].ToString(), current["FMatrailId_Id"].ToString());
|
DataTable skDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
//锁库
|
List<LockStockArgs> list = new List<LockStockArgs>();
|
foreach (DataRow dr in skDt.Rows)
|
{
|
LockStockArgs lockStockArgs = new LockStockArgs();
|
lockStockArgs.ObjectId = "PRD_PPBOM"; //字段 FDEMANDFORMID = 'PRD_PPBOM'
|
lockStockArgs.BillId = dr["FID"].ToString(); //生产用料清单主表ID
|
lockStockArgs.BillDetailID = dr["FENTRYID"].ToString();//生产用料清单明细表ID
|
lockStockArgs.BillNo = dr["FBillNo"].ToString();//生产用料清单单据号
|
lockStockArgs.FEntryID = Convert.ToInt32(current["FHMainSourceEntryID"]); ;
|
lockStockArgs.FID = Convert.ToInt32(current["FHMainSourceInterID"]); //生产订单行ID
|
lockStockArgs.BaseQty = decimal.Parse(dr["FBASEQTY"].ToString());//基本单位数量
|
lockStockArgs.BaseUnitID = int.Parse(dr["FBASEUNITID"].ToString());//基本单位
|
//lockStockArgs.Lot = Convert.ToString(current["FBatch"]); ;//批次 FBatch
|
lockStockArgs.MaterialID = long.Parse(dr["FMATERIALID2"].ToString());
|
lockStockArgs.OwnerID = long.Parse(dr["FOwnerID"].ToString());
|
lockStockArgs.OwnerTypeID = dr["FOwnerTypeID"].ToString();
|
lockStockArgs.Qty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;//数量
|
lockStockArgs.STOCKID = long.Parse(dr["FSTOCKID"].ToString());//仓库
|
lockStockArgs.StockOrgID = long.Parse(dr["FStockOrgId"].ToString());//库存组织
|
lockStockArgs.UnitID = long.Parse(dr["FSTOREUNITID"].ToString());//单位
|
lockStockArgs.LockBaseQty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;
|
lockStockArgs.LockQty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;//基本单位数量
|
lockStockArgs.FInvDetailID = Convert.ToString(dr["FSTKID"].ToString());
|
list.Add(lockStockArgs);
|
}
|
var sa = StockServiceHelper.SaveLockInfo(Context, list, "Inv", false);
|
sql = @"/*dialect*/
|
update a set
|
FPARENTFORMID ='PRD_MO',
|
FPARENTINTERID =b.FMOID,
|
FPARENTENTRYID =b.FMOENTRYID,
|
FPARENTBILLNO = b.FMOBILLNO,
|
FSRCFORMID = 'PRD_MO',
|
FSRCINTERID = b.FMOID,
|
FSRCENTRYID = b.FMOENTRYID,
|
FSRCBILLNO = b.FMOBILLNO
|
from T_PLN_RESERVELINK a
|
join T_PRD_PPBOM b on a.FDEMANDINTERID = b.FID
|
where a.FPARENTINTERID = '' and a.FPARENTENTRYID =''";
|
DBServiceHelper.Execute(Context, sql);
|
this.View.ShowMessage("操作成功!");
|
}
|
}
|
catch (Exception ex)
|
{
|
//LogHelper.Error(ex.Message.ToString());
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
/// <summary>
|
/// 释放
|
/// </summary>
|
public void Release()
|
{
|
try
|
{
|
//获取单据体信息
|
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));
|
if (filterResult.Count == 0)
|
{
|
this.View.ShowMessage("请选择需要预留的单据!");
|
return;
|
}
|
foreach (DynamicObject current in filterResult)
|
{
|
if (Convert.ToString(current["FFOCUS"]) == "False")
|
continue;
|
string sql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = 0 where FID='{0}'", current["FDayPlanWorkID"].ToString());
|
DBServiceHelper.Execute(Context, sql);
|
|
//删除锁库表(不用更新库存 库存表没有更)
|
sql = string.Format(@"/*dialect*/
|
delete T_PLN_RESERVELINKENTRY where FID IN (SELECT FID FROM T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}')
|
delete T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}'", Convert.ToString(current["FHMainSourceInterID"]), Convert.ToString(current["FHMainSourceEntryID"]));
|
}
|
this.View.ShowMessage("操作成功!");
|
}
|
catch (Exception ex)
|
{
|
//LogHelper.Error(ex.Message.ToString());
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 生产计划平台选单 生产订单数据
|
/// </summary>
|
/// <param name="FBarItemKey"></param>
|
public void SelectMenu(string FBarItemKey)
|
{
|
try
|
{
|
//获取单据体信息
|
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
|
//单据体信息转换为列表集合
|
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
|
int Fseq = entityDataObjoct.Count();
|
ListShowParameter showParameter = new ListShowParameter();
|
IRegularFilterParameter filterParameter = new ListRegularFilterParameter();
|
filterParameter.Filter = string.Format(" FPickMtrlStatus in (1,2) ");//部分领料 或者 未领料
|
filterParameter.SelectEntitys = new List<string>() { "FTreeEntity" };
|
string pageId = Guid.NewGuid().ToString();
|
showParameter.PageId = pageId;
|
showParameter.ListFilterParameter = filterParameter;
|
showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID;
|
showParameter.IsLookUp = true;
|
if (FBarItemKey == "tbSelectMenuSC")
|
{
|
showParameter.FormId = "PRD_MO";
|
this.View.ShowForm(showParameter, delegate (FormResult result)
|
{
|
object returnData = result.ReturnData;
|
if (returnData is ListSelectedRowCollection)
|
{
|
ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
|
//LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString());
|
if (listSelectedRowCollection != null)
|
{
|
var ret = "";
|
foreach (var listSelectedRow in listSelectedRowCollection)
|
{
|
//if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0)
|
//{
|
// //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选");
|
// ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n";
|
// continue;
|
//}
|
//string sql = $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS NOT IN ('E') and FPRDMOENTYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}";
|
//int day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
|
//if (day > 0)
|
//{
|
// ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已存在日计划\n";
|
// continue;
|
//}
|
////今天以前的数据是显示不出来的
|
//sql = $"select DATEDIFF(d,getdate(),FPlanStartDate)days from T_PRD_MOENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}";
|
//day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
|
//if (day < 0)
|
//{
|
// ret += "计划开工日期在今天之前,生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n";
|
// continue;
|
|
string sql = @"
|
SELECT T2.FBILLNO,T2.FPRDORGID,T1.FSEQ,T1.FMATERIALID,TA.FSTATUS,T1.FUNITID,T1.FQTY,T1.FWORKSHOPID,T1.FPLANSTARTDATE
|
,T1.FSALEORDERNO,T3.FPLANDELIVERYDATE,T3.FQTY AS FSALEORDERQTY,TQ.FNoStockInQty,t5.FSCZY,t6.FORDERLEVEL,t1.FDayPlanRemainQty
|
FROM T_PRD_MOENTRY T1
|
JOIN T_PRD_MOENTRY_A TA ON T1.FENTRYID =TA.FENTRYID
|
JOIN T_PRD_MOENTRY_Q TQ on t1.FENTRYID = TQ.FENTRYID
|
JOIN T_PRD_MO T2 ON T1.FID =T2.FID
|
LEFT JOIN T_SAL_ORDERENTRY T3 ON T1.FSALEORDERENTRYID =T3.FENTRYID
|
LEFT JOIN T_SAL_ORDER T4 ON T3.FID =T4.FID
|
LEFT JOIN T_BD_MATERIAL T5 ON T1.FMATERIALID =T5.FMATERIALID
|
LEFT JOIN T_BAS_PREBDONE T6 ON T3.F_TEZV_Base =T6.FID
|
WHERE T1.FENTRYID = " + listSelectedRow.DataRow["t1_FENTRYID"].ToString() + " ";
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count > 0)
|
{
|
this.Model.CreateNewEntryRow("FEntity");
|
this.View.Model.SetValue("FOrderType", "生产订单", Fseq);
|
this.View.Model.SetValue("FStatus", dt.Rows[0]["FSTATUS"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FORGID", dt.Rows[0]["FPRDORGID"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FSCOrderNo", dt.Rows[0]["FBILLNO"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[0]["FSEQ"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FMatrailId", dt.Rows[0]["FMATERIALID"]?.ToString(), Fseq);//2129900005
|
this.View.Model.SetValue("FUnit", dt.Rows[0]["FUNITID"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FOrderQuantity", dt.Rows[0]["FQTY"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FProductWorkShopId", dt.Rows[0]["FWORKSHOPID"]?.ToString(), Fseq);
|
//this.View.Model.SetValue("FOrderLevel", "3", Fseq);
|
this.View.Model.SetValue("FBzDate", dt.Rows[0]["FPLANSTARTDATE"]?.ToString(), Fseq);//预计开工日期
|
this.View.Model.SetValue("FBzDate", dt.Rows[0]["FPLANSTARTDATE"]?.ToString(), Fseq);//预计开工日期
|
this.View.Model.SetValue("FSalOrderNo", dt.Rows[0]["FSALEORDERNO"]?.ToString(), Fseq);//销售订单号
|
this.View.Model.SetValue("FSalOrderCount", dt.Rows[0]["FSALEORDERQTY"]?.ToString(), Fseq);//销售订单数量
|
this.View.Model.SetValue("FNoStockInQty", dt.Rows[0]["FNoStockInQty"].ToString(), Fseq);//未入库数量
|
this.View.Model.SetValue("FDeliveryDate", dt.Rows[0]["FPLANDELIVERYDATE"]?.ToString(), Fseq);//交货日期
|
this.View.Model.SetValue("FResourcesId", dt.Rows[0]["FSczy"]?.ToString(), Fseq);//生产资源
|
this.View.Model.SetValue("FT0", dt.Rows[0]["FDayPlanRemainQty"]?.ToString(), Fseq);//剩下可排数量
|
this.View.Model.SetValue("FCDQuantity", dt.Rows[0]["FQTY"]?.ToString(), Fseq);//拆单数量 默认 生产订单数量
|
this.View.Model.SetValue("FOrderLevel", dt.Rows[0]["FOrderLevel"].ToString(), Fseq);//订单等级
|
this.View.Model.SetValue("FKpQty", 0, Fseq);//可排数量
|
|
Fseq++;
|
}
|
else
|
{
|
this.View.ShowMessage("联系管理员");
|
}
|
}
|
if (ret != "")
|
{
|
this.View.ShowMessage(ret);
|
}
|
}
|
}
|
});
|
}
|
else if (FBarItemKey == "tbSelectMenuWW")
|
{
|
showParameter.FormId = "SUB_SUBREQORDER";
|
this.View.ShowForm(showParameter, delegate (FormResult result)
|
{
|
object returnData = result.ReturnData;
|
if (returnData is ListSelectedRowCollection)
|
{
|
ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
|
//LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString());
|
if (listSelectedRowCollection != null)
|
{
|
var ret = "";
|
foreach (var listSelectedRow in listSelectedRowCollection)
|
{
|
//if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0)
|
//{
|
// //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选");
|
// ret += "委外订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n";
|
// continue;
|
//}
|
//string sql = $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS NOT IN ('E') and FPRDMOENTYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}";
|
//int day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
|
//if (day > 0)
|
//{
|
// //LogHelper.Info("生产计划平台选单:日期太靠后," + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号, " + listSelectedRow.DataRow["t1_FSeq"].ToString() + ", day= " + day.ToString());
|
// ret += "委外订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已存在日计划\n";
|
// continue;
|
//}
|
////今天以前的数据是显示不出来的
|
//sql = $"select DATEDIFF(d,getdate(),FPlanStartDate)days from T_SUB_REQORDERENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}";
|
//day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
|
//if (day < 0)
|
//{
|
// //LogHelper.Info("生产计划平台选单:日期太靠后," + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号, " + listSelectedRow.DataRow["t1_FSeq"].ToString() + ", day= " + day.ToString());
|
// ret += "计划开工日期在今天之前,委外订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n";
|
// continue;
|
//}
|
this.Model.CreateNewEntryRow("FEntity");
|
this.View.Model.SetItemValueByNumber("FORGID", "100", Fseq);
|
this.View.Model.SetValue("FOrderType", "委外订单", Fseq);
|
this.View.Model.SetValue("FSCOrderNo", listSelectedRow.DataRow["FBillNo"].ToString(), Fseq);
|
this.View.Model.SetValue("FSRCBILLENTRYSEQ", listSelectedRow.DataRow["t1_FSeq"].ToString(), Fseq);
|
this.View.Model.SetValue("FMatrailId", listSelectedRow.DataRow["FMaterialId_Id"].ToString(), Fseq);//2129900005
|
this.View.Model.SetValue("FUnit", listSelectedRow.DataRow["FUnitId_Id"].ToString(), Fseq);
|
this.View.Model.SetValue("FOrderQuantity", listSelectedRow.DataRow["FQty"].ToString(), Fseq);
|
this.View.Model.SetValue("FProductWorkShopId", 0, Fseq);
|
this.View.Model.SetValue("FOrderLevel", "3", Fseq);
|
//this.View.Model.SetValue("FBzDate", DateTime.Now.AddDays(day).ToShortDateString(), Fseq);//预计开工日期
|
//this.View.Model.SetValue("FT" + day.ToString(), listSelectedRow.DataRow["FQty"].ToString(), Fseq);
|
Fseq++;
|
}
|
if (ret != "")
|
{
|
this.View.ShowMessage(ret);
|
}
|
}
|
}
|
});
|
}
|
else if (FBarItemKey == "tbSelectMenuMonth")
|
{
|
showParameter = new ListShowParameter();
|
showParameter.PageId = pageId;
|
showParameter.FormId = "bsv_Sc_WorkBillAutoSortBillMonth";
|
showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID;
|
showParameter.IsLookUp = true;
|
this.View.ShowForm(showParameter, delegate (FormResult result)
|
{
|
object returnData = result.ReturnData;
|
if (returnData is ListSelectedRowCollection)
|
{
|
ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
|
//LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString());
|
if (listSelectedRowCollection != null)
|
{
|
var ret = "";
|
foreach (var listSelectedRow in listSelectedRowCollection)
|
{
|
//if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0)
|
//{
|
// //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选");
|
// ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n";
|
// continue;
|
//}
|
//string sql = $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS NOT IN ('E') and FPRDMOENTYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}";
|
//int day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
|
//if (day > 0)
|
//{
|
// ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已存在日计划\n";
|
// continue;
|
//}
|
////今天以前的数据是显示不出来的
|
//sql = $"select DATEDIFF(d,getdate(),FPlanStartDate)days from T_PRD_MOENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}";
|
//day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
|
//if (day < 0)
|
//{
|
// ret += "计划开工日期在今天之前,生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n";
|
// continue;
|
//}
|
string sql = @"SELECT T2.FBILLNO,T2.FPRDORGID,T1.FSEQ,T1.FMATERIALID,TA.FSTATUS,T1.FUNITID,T1.FQTY,T1.FWORKSHOPID,T1.FPLANSTARTDATE
|
,T1.FSALEORDERNO,T3.FPLANDELIVERYDATE,T3.FQTY AS FSALEORDERQTY,TQ.FNoStockInQty FROM T_PRD_MOENTRY T1
|
JOIN T_PRD_MOENTRY_A TA ON T1.FENTRYID =TA.FENTRYID
|
JOIN T_PRD_MOENTRY_Q TQ on t1.FENTRYID = TQ.FENTRYID
|
JOIN T_PRD_MO T2 ON T1.FID =T2.FID
|
LEFT JOIN T_SAL_ORDERENTRY T3 ON T1.FSALEORDERENTRYID =T3.FENTRYID
|
LEFT JOIN T_SAL_ORDER T4 ON T3.FID =T4.FID WHERE T1.FENTRYID = " + listSelectedRow.DataRow["FMoFentryId"].ToString() + " ";
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count > 0)
|
{
|
this.Model.CreateNewEntryRow("FEntity");
|
this.View.Model.SetValue("FOrderType", "生产订单", Fseq);
|
this.View.Model.SetValue("FStatus", dt.Rows[0]["FSTATUS"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FORGID", dt.Rows[0]["FPRDORGID"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FSCOrderNo", dt.Rows[0]["FBILLNO"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[0]["FSEQ"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FMatrailId", dt.Rows[0]["FMATERIALID"]?.ToString(), Fseq);//2129900005
|
this.View.Model.SetValue("FUnit", dt.Rows[0]["FUNITID"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FOrderQuantity", dt.Rows[0]["FQTY"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FProductWorkShopId", dt.Rows[0]["FWORKSHOPID"]?.ToString(), Fseq);
|
this.View.Model.SetValue("FOrderLevel", "3", Fseq);
|
this.View.Model.SetValue("FBzDate", dt.Rows[0]["FPLANSTARTDATE"]?.ToString(), Fseq);//预计开工日期
|
this.View.Model.SetValue("FSalOrderNo", dt.Rows[0]["FSALEORDERNO"]?.ToString(), Fseq);//销售订单号
|
this.View.Model.SetValue("FSalOrderCount", dt.Rows[0]["FSALEORDERQTY"]?.ToString(), Fseq);//销售订单数量
|
this.View.Model.SetValue("FNoStockInQty", dt.Rows[0]["FNoStockInQty"].ToString(), Fseq);//未入库数量
|
this.View.Model.SetValue("FDeliveryDate", dt.Rows[0]["FPLANDELIVERYDATE"]?.ToString(), Fseq);//交货日期
|
//this.View.Model.SetValue("FT" + day.ToString(), dt.Rows[0]["FQTY"]?.ToString(), Fseq);
|
Fseq++;
|
}
|
else
|
{
|
this.View.ShowMessage("联系管理员");
|
}
|
}
|
if (ret != "")
|
{
|
this.View.ShowMessage(ret);
|
}
|
}
|
}
|
});
|
}
|
}
|
catch (Exception ex)
|
{
|
//LogHelper.Error("选单失败:" + ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// 下达
|
/// </summary>
|
public void ReleaseForLMes()
|
{
|
try
|
{
|
//获取单据体信息
|
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));
|
if (filterResult.Count == 0)
|
{
|
this.View.ShowMessage("请选择需要操作的数据");
|
return;
|
}
|
//List<string> _BomList = BomList.Select(x => x.FID.ToString()).Distinct().ToList();
|
//fDayPlanFids = string.Join(",", _BomList);
|
List<string> fidList = filterResult.Select(x => x["FDayPlanWorkID"].ToString()).Distinct().ToList();
|
var fDayPlanFids = string.Join(",", fidList);
|
string sql = $"/*DIALECT*/ update Sc_WorkBillSortBillSub set FIsSGXG = 1 where fid in ({fDayPlanFids})";
|
DBServiceHelper.Execute(Context, sql);
|
this.View.ShowMessage("操作成功");
|
}
|
catch (Exception e)
|
{
|
this.View.ShowErrMessage("请联系管理员:" + e.Message.ToString());
|
}
|
|
}
|
/// <summary>
|
/// 同步
|
/// </summary>
|
public void TongBu()
|
{
|
try
|
{
|
//获取单据体信息
|
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));
|
if (filterResult.Count == 0)
|
{
|
this.View.ShowMessage("请选择需要操作的数据");
|
return;
|
}
|
foreach (var item in entityDataObjoct)
|
{
|
this.View.Model.SetValue("FT0", item["FCompleteCount"].ToString(), Convert.ToInt32(item["SEQ"]) - 1); ;
|
}
|
this.View.UpdateView();
|
this.View.ShowMessage("操作成功");
|
}
|
catch (Exception e)
|
{
|
this.View.ShowErrMessage("请联系管理员:" + e.Message.ToString());
|
}
|
}
|
/// <summary>
|
/// 日计划删除功能
|
/// </summary>
|
public void DayPlanDelete()
|
{
|
try
|
{
|
//单据体信息转换为列表集合
|
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
|
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
|
DynamicObjectCollection filterResult = entityDataObjoct.Clone();
|
filterResult.Clear();
|
List<string> fidList = new List<string>();
|
List<string> fseqList = new List<string>();
|
entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) > 0).ToList().ForEach(x => fidList.Add(x["FDayPlanWorkID"].ToString()));
|
entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) == 0).ToList().ForEach(x => fseqList.Add(x["SEQ"].ToString()));
|
entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) == 0).ToList().ForEach(x => filterResult.Add(x));
|
if (fidList.Count() == 0 && fseqList.Count() == 0)
|
{
|
this.View.ShowMessage("请勾选需要操作的数据");
|
return;
|
}
|
foreach (var filter in filterResult)
|
{
|
this.View.Model.DeleteEntryRow("FEntity", Convert.ToInt32(filter["SEQ"]) - 1);
|
}
|
if (fidList.Count() > 0)
|
{
|
var FDayPlanWorkID = string.Join(",", fidList);
|
var sJson = new
|
{
|
Numbers = "",
|
Ids = FDayPlanWorkID
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.Delete("Paez_Sc_WorkBillAutoSortBill", JsonConvert.SerializeObject(sJson));
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc != "TRUE")
|
{
|
this.View.ShowErrMessage("操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
return;
|
}
|
}
|
SearchList();
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 日计划提交功能
|
/// </summary>
|
public void DayPlanSubmit()
|
{
|
try
|
{
|
//单据体信息转换为列表集合
|
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
|
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
|
List<string> fidList = new List<string>();
|
entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) > 0).ToList().ForEach(x => fidList.Add(x["FDayPlanWorkID"].ToString()));
|
if (fidList.Count() == 0)
|
{
|
this.View.ShowMessage("请勾选需要操作的数据");
|
return;
|
}
|
var FDayPlanWorkID = string.Join(",", fidList);
|
var sJson = new
|
{
|
Numbers = "",
|
Ids = FDayPlanWorkID
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.Submit("Paez_Sc_WorkBillAutoSortBill", JsonConvert.SerializeObject(sJson));
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc != "TRUE")
|
{
|
this.View.ShowErrMessage("操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
return;
|
}
|
SearchList();
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 日计划审核功能
|
/// </summary>
|
public void DayPlanAduit()
|
{
|
try
|
{
|
//单据体信息转换为列表集合
|
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
|
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
|
List<string> fidList = new List<string>();
|
entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) > 0).ToList().ForEach(x => fidList.Add(x["FDayPlanWorkID"].ToString()));
|
if (fidList.Count() == 0)
|
{
|
this.View.ShowMessage("请勾选需要操作的数据");
|
return;
|
}
|
var FDayPlanWorkID = string.Join(",", fidList);
|
var sJson = new
|
{
|
Numbers = "",
|
Ids = FDayPlanWorkID
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.Audit("Paez_Sc_WorkBillAutoSortBill", JsonConvert.SerializeObject(sJson));
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc != "TRUE")
|
{
|
this.View.ShowErrMessage("操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
return;
|
}
|
SearchList();
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 复制行功能
|
/// </summary>
|
public void RowCopy()
|
{
|
//单据体信息转换为列表集合
|
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));
|
if (filterResult.Count() > 1)
|
{
|
this.View.ShowErrMessage("请选择单行数据进行复制");
|
return;
|
}
|
if (filterResult.Count() > 0)
|
{
|
foreach (var item in filterResult)
|
{
|
this.Model.CreateNewEntryRow(entity, Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FOrderType", "生产订单", Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FStatus", Convert.ToString(item["FStatus"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FORGID", Convert.ToString(item["FORGID_Id"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FSCOrderNo", Convert.ToString(item["FSCOrderNo"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FSRCBILLENTRYSEQ", Convert.ToString(item["FSRCBILLENTRYSEQ"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FMatrailId", Convert.ToString(item["FMatrailId_Id"]), Convert.ToInt32(item["SEQ"]));//2129900005
|
this.View.Model.SetValue("FUnit", Convert.ToString(item["FUnit_Id"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FOrderQuantity", Convert.ToString(item["FOrderQuantity"]), Convert.ToInt32(item["SEQ"]));//生产订单数量
|
this.View.Model.SetValue("FNoStockInQty", Convert.ToString(item["FNoStockInQty"]), Convert.ToInt32(item["SEQ"]));//未入库数量
|
this.View.Model.SetValue("FProductWorkShopId", Convert.ToString(item["FProductWorkShopId_Id"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FOrderLevel", Convert.ToString(item["FOrderLevel"]), Convert.ToInt32(item["SEQ"]));
|
this.View.Model.SetValue("FBzDate", Convert.ToString(item["FBzDate"]), Convert.ToInt32(item["SEQ"]));//预计开工日期
|
this.View.Model.SetValue("FSalOrderNo", Convert.ToString(item["FSalOrderNo"]), Convert.ToInt32(item["SEQ"]));//销售订单号
|
this.View.Model.SetValue("FSalOrderCount", Convert.ToString(item["FSalOrderCount"]), Convert.ToInt32(item["SEQ"]));//销售订单数量
|
this.View.Model.SetValue("FDeliveryDate", Convert.ToString(item["FDeliveryDate"]), Convert.ToInt32(item["SEQ"]));//交货日期
|
this.View.Model.SetValue("FKpQty", Convert.ToString(item["FKpQty"]), Convert.ToInt32(item["SEQ"]));//可排数量
|
this.View.Model.SetValue("FResourcesId", Convert.ToString(item["FResourcesId_Id"]), Convert.ToInt32(item["SEQ"]));//生产资源
|
}
|
}
|
else
|
{
|
this.View.ShowMessage("请勾选数据");
|
}
|
}
|
}
|
}
|