using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using ZD.Cloud.Logger;
using Demo.Model.Model;
using System.Collections.Generic;
using ZD.Share.Common;
using System.Linq;
using Newtonsoft.Json.Linq;
using ZD.Cloud.WebApi;
namespace Demo.BillView
{
[Description("生产排程单动态表单-按钮点击事件")]
[HotUpdate]
public class ProductScheduleButtonClick : AbstractDynamicFormPlugIn
{
///
/// 定义工作日历班组List
///
public List ENG_WORKCALFULLDATA = new List();
///
/// 初始加载事件
///
///
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SearchList();
}
///
/// 页面按钮点击事件
///
///
public override void ButtonClick(ButtonClickEventArgs e)
{
base.ButtonClick(e);
try
{
//选择
if (e.Key.ToUpper().Equals("FCHOICEBUTTONSC"))
{
ShowFDprwEntity();
}
//待排任务 查询
if (e.Key.ToUpper().Equals("FSEARCHBUTTON"))
{
string FDepartId = (this.Model.GetValue("FDpDepartment") as DynamicObject)?["Id"].ToString();
string FDate = Convert.ToString(this.Model.GetValue("FNewPzDate"));
DprwSearcrList(FDepartId, FDate);
}
//生产订单 查询
if (e.Key.ToUpper().Equals("FSEARCHBUTTONSC"))
{
string FMaterialId = (this.Model.GetValue("FMATERIALIDCX") as DynamicObject)?["Id"].ToString();
string FProOrderNo = Convert.ToString(this.Model.GetValue("FOrderNoCX"));
ScddSearchList(FMaterialId, FProOrderNo);
}
}
catch (Exception ex)
{
LogHelper.Error("生产排程单动态表单-Button按钮点击事件 抛出异常:" + ex.Message.ToString());
this.View.ShowErrMessage(ex.Message.ToString());
}
}
///
/// 页面按钮工具栏事件
///
///
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
try
{
//排程
if (e.BarItemKey.ToUpper().Equals("TBPC"))
{
ProductSchedul();
}
//保存
if (e.BarItemKey.ToUpper().Equals("TBSAVE"))
{
ZdpcSave();
}
//刷新
if (e.BarItemKey.ToUpper().Equals("TBREFASH"))
{
SearchList();
}
}
catch (Exception ex)
{
LogHelper.Error("生产排程单动态表单-BarItem按钮点击事件 抛出异常:" + ex.Message.ToString());
this.View.ShowErrMessage(ex.Message.ToString());
}
}
///
/// 窗体页面加载 及 查询
///
public void SearchList()
{
DprwSearcrList("", "");
ScddSearchList("", "");
}
///
/// 界面上方“待排任务”的页签
///
///
///
public void DprwSearcrList(string FDepartId, string FDate)
{
try
{
string sqlWhere = " where 1=1 ";
if (!string.IsNullOrEmpty(FDepartId))
sqlWhere += $" and FHMATERID ={FDepartId}";
if (!string.IsNullOrEmpty(FDate))
sqlWhere += $" and dadediff(d,FDate,) =0 ";
//待排任务 初始化加载 where FNoScheduled > 0 未排产数量大于0
string sql = @"select * from Sc_WorkBillSortBillMain ";
DataTable dt = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
if (dt.Rows.Count > 0)
{
while (this.Model.GetEntryRowCount("FDprwEntity") > 0)
{
this.Model.DeleteEntryRow("FDprwEntity", 0);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
this.Model.CreateNewEntryRow("FDprwEntity");
this.Model.SetValue("FSczy", dt.Rows[i]["FHSourceID"], i);//生产资源
this.Model.SetValue("FProOrderNo", dt.Rows[i]["FSCOrderNo"], i);//生产订单号
this.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[i]["FSRCBILLENTRYSEQ"], i);//生产订单明细行号
this.Model.SetValue("FMATERIALID", dt.Rows[i]["FHMaterID"], i);//物料代码
this.Model.SetValue("FSCOrderCount", dt.Rows[i]["FOrderQuantity"], i);//生产订单数
//this.Model.SetValue("FFinishConut", dt.Rows[i]["FNOTE"], i);//完工数 (没有对应字段)
this.Model.SetValue("FStoredCount", dt.Rows[i]["FHInstockQty"], i);//已入库数
this.Model.SetValue("FPriority", dt.Rows[i]["FHYX"], i);//优先级
this.Model.SetValue("FCapacity", dt.Rows[i]["FHWorkQty"], i);//产能
this.Model.SetValue("FPlanBeginDate", dt.Rows[i]["FHPlanBeginDate"], i);//计划开始日期
this.Model.SetValue("FPlanEndDate", dt.Rows[i]["FHPlanEndDate"], i);//计划完工日期
this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHOrderQty"], i);//销售订单数量
//this.Model.SetValue("FCustormer", dt.Rows[i]["FNOTE"], i);//客户 (没有对应字段)
this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSeOrderBillNo"], i);//销售订单号
//this.Model.SetValue("FSalDeliveryDate", dt.Rows[i]["FNOTE"], i);//销售订单交货期 (没有对应字段)
//this.Model.SetValue("FOrderRemake", dt.Rows[i]["FNOTE"], i);//订单备注 (没有对应字段)
this.Model.SetValue("FID", dt.Rows[i]["FID"], i);//日计划工单ID
}
}
//自动排程 初始化加载 where FNoScheduled > 0 未排产数量大于0
if (dt.Rows.Count > 0)
{
while (this.Model.GetEntryRowCount("FZdpcEntity") > 0)
{
this.Model.DeleteEntryRow("FZdpcEntity", 0);
}
DateTime DateNow = DateTime.Now;//获取当前日期
for (int i = 0; i < dt.Rows.Count; i++)
{
this.Model.CreateNewEntryRow("FZdpcEntity");
this.Model.SetValue("FSczyZD", dt.Rows[i]["FHSourceID"], i);//生产资源
this.Model.SetValue("FProOrderNoZD", dt.Rows[i]["FSCOrderNo"], i);//生产订单号
this.Model.SetValue("FSRCBILLENTRYSEQZD", dt.Rows[i]["FSRCBILLENTRYSEQ"], i);//生产订单明细行号
this.Model.SetValue("FMATERIALIDZD", dt.Rows[i]["FHMaterID"], i);//物料代码
this.Model.SetValue("FSCOrderCountZD", dt.Rows[i]["FOrderQuantity"], i);//生产订单数
//this.Model.SetValue("FFinishConutZD", dt.Rows[i]["FNOTE"], i);//完工数 (没有对应字段)
this.Model.SetValue("FNoScheduledCount", dt.Rows[i]["FNoScheduled"], i);//待排数
this.Model.SetValue("FPriorityZD", dt.Rows[i]["FHYX"], i);//优先级
this.Model.SetValue("FCapacityZD", dt.Rows[i]["FHWorkQty"], i);//产能
this.Model.SetValue("FIDZD", dt.Rows[i]["FID"], i);//日计划工单ID
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 > 60)
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; //单据体行锁定字段
}
}
for (int m = 0; m <= 60; m++)
{
// this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString();
this.View.GetControl("FT" + "" + m + "").SetValue(DateNow.AddDays(m).ToShortDateString());
}
}
}
catch (Exception ex)
{
LogHelper.Error("生产排程单动态表单-页面展示 待排任务抛出异常:" + ex.Message.ToString());
this.View.ShowErrMessage("错误:" + ex.Message.ToString());
}
}
///
/// 界面下方“生产订单”的页签
///
/// 物料
/// 生产订单号
public void ScddSearchList(string FMaterialId, string FProOrderNo)
{
try
{
string sqlWhere = " and 1=1 ";
if (!string.IsNullOrEmpty(FMaterialId))
sqlWhere += $" and b.FMATERIALID ='{FMaterialId}'";
if (!string.IsNullOrEmpty(FProOrderNo))
sqlWhere += $" and a.FBILLNO ='{FProOrderNo}' ";
//界面下方“生产订单”的页签,加载未排程已审核的生产订单 (测试未加条件 更改后去除该标记)
string sql = @"
SELECT A.FBILLNO,B.FSEQ,B.FMATERIALID,B.FQTY,B.FPlanStartDate,b.FPlanFinishDate,b.FSaleOrderNo,c.FCustId,d.FQTY as FQTYXSDD ,d.FNOTE,d.FPLANDELIVERYDATE,e.FSCOrderNo
FROM T_PRD_MO a
LEFT JOIN T_PRD_MOENTRY b on a.FID = B.FID
left join T_SAL_ORDER c on b.FSaleOrderNo =c.FBILLNO
left join T_SAL_ORDERENTRY d on c.FID = d.FID and b.FMATERIALID = d.FMATERIALID
left join Sc_WorkBillSortBillMain e on b.FMATERIALID = e.FHMaterID and b.FSEQ = e.FSRCBILLENTRYSEQ and a.FBILLNO = e.FSCOrderNo
where ISNULL(e.FSCOrderNo,'')=''";
sql += sqlWhere;
DataTable dt = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
if (dt.Rows.Count > 0)
{
//this.Model.DeleteEntryData("FScddEntity");
while (this.Model.GetEntryRowCount("FScddEntity") > 0)
{
this.Model.DeleteEntryRow("FScddEntity", 0);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
this.Model.CreateNewEntryRow("FScddEntity");
this.Model.SetValue("FSEQ", i + 1, i);//序号
this.Model.SetValue("FProOrderNoSC", dt.Rows[i]["FBILLNO"], i);//生产订单号
this.Model.SetValue("FSRCBILLENTRYSEQSC", dt.Rows[i]["FSEQ"], i);//生产订单明细号
this.Model.SetValue("FSCOrderCountSC", dt.Rows[i]["FQTY"], i);//生产订单数
this.Model.SetValue("FPlanBeginDateSC", dt.Rows[i]["FPlanStartDate"], i);//计划开工日期
this.Model.SetValue("FPlanEndDateSC", dt.Rows[i]["FPlanFinishDate"], i);//计划完工日期
this.Model.SetValue("FSalOrderNoSC", dt.Rows[i]["FSaleOrderNo"], i);//销售订单号
this.Model.SetValue("FMATERIALIDSC", dt.Rows[i]["FMATERIALID"], i);//物料
this.Model.SetValue("FCustormerSC", dt.Rows[i]["FCustId"], i);//客户
this.Model.SetValue("FSalOrderCountSC", dt.Rows[i]["FQTYXSDD"], i);//销售订单数量
this.Model.SetValue("FSalDeliveryDateSC", dt.Rows[i]["FPLANDELIVERYDATE"], i);//销售订单交货期
this.Model.SetValue("FOrderRemakeSC", dt.Rows[i]["FNOTE"], i);//订单备注
}
}
}
catch (Exception ex)
{
LogHelper.Error("生产排程单动态表单-页面展示 生产订单抛出异常:" + ex.Message.ToString());
this.View.ShowErrMessage("错误:" + ex.Message.ToString());
}
}
///
/// 生产订单数据推到待排任务栏
///
public void ShowFDprwEntity()
{
Entity entity = this.View.BillBusinessInfo.GetEntity("FScddEntity");
//单据体信息转换为列表集合
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
int FChose = 0;
foreach (DynamicObject current in entityDataObjoct)
{
if (Convert.ToBoolean(current["FChose"]))
FChose++;
}
if (FChose == 0)
{
this.View.ShowErrMessage("请选择需要待排的生产订单数据!");
return;
}
int i = this.View.Model.GetEntryRowCount("FDprwEntity");
foreach (DynamicObject current in entityDataObjoct)
{
if (!Convert.ToBoolean(current["FChose"]))
continue;
this.Model.CreateNewEntryRow("FDprwEntity");
// this.Model.SetValue("FSEQ", i + 1, i);//序号
this.Model.SetValue("FProOrderNo", Convert.ToString(current["FProOrderNoSC"]), i);//生产订单号
this.Model.SetValue("FSRCBILLENTRYSEQ", Convert.ToString(current["FSRCBILLENTRYSEQSC"]), i);//生产订单明细号
this.Model.SetValue("FMATERIALID", Convert.ToString(current["FMATERIALIDSC_ID"]), i);//物料
this.Model.SetValue("FSCOrderCount", Convert.ToString(current["FSCOrderCountSC"]), i);//生产订单数
this.Model.SetValue("FPlanBeginDate", Convert.ToString(current["FPlanBeginDateSC"]), i);//计划开工日期
this.Model.SetValue("FPlanEndDate", Convert.ToString(current["FPlanEndDateSC"]), i);//计划完工日期
this.Model.SetValue("FSalOrderNo", Convert.ToString(current["FSalOrderNoSC"]), i);//销售订单号
this.Model.SetValue("FCustormer", Convert.ToString(current["FCustormerSC"]), i);//客户
this.Model.SetValue("FSalOrderCount", Convert.ToString(current["FSalOrderCountSC"]), i);//销售订单数量
this.Model.SetValue("FSalDeliveryDate", Convert.ToString(current["FSalDeliveryDateSC"]), i);//销售订单交货期
this.Model.SetValue("FOrderRemake", Convert.ToString(current["FOrderRemakeSC"]), i);//订单备注
i++;
}
}
///
/// 产能计算
///
public void Jscn()
{
//查询出重复生产线对应的工作日历信息
string _sql = @"
select FCalUserId,FCalUserType,FShiftId,FIsWorkTime,FDay,FDateStyle,c.FALLHOURS,b.FENTRYID from T_ENG_WORKCAL a
left join T_ENG_WORKCALFULLDATA b on a.FID=b.FID
left join T_ENG_SHIFT c on b.FShiftId =c.FID
where FDateStyle = 1 and FIsWorkTime = 1
and FCalUserType ='ENG_RepetitiveProductLine'
and DATEDIFF(D,getdate(),FDAY)>0
--条件为 工作日+是否生产 == 1 ";
ENG_WORKCALFULLDATA = DBServiceHelper.ExecuteDataSet(Context, _sql).ToModelList();
var list = new List