| | |
| | | [HotUpdate] |
| | | public class ProductScheduleButtonClick : AbstractDynamicFormPlugIn |
| | | { |
| | | /// <summary> |
| | | /// 定义工作日历班组List<Model> |
| | | /// </summary> |
| | | public List<ENG_WORKCALFULLDATA> ENG_WORKCALFULLDATA = new List<ENG_WORKCALFULLDATA>(); |
| | | /// <summary> |
| | | /// 初始加载事件 |
| | | /// </summary> |
| | | /// <param name="e"></param> |
| | | public override void OnLoad(EventArgs e) |
| | | { |
| | | base.OnLoad(e); |
| | | SearchList(); |
| | | } |
| | | /// <summary> |
| | | /// 页面按钮点击事件 |
| | | /// </summary> |
| | | /// <param name="e"></param> |
| | | public override void ButtonClick(ButtonClickEventArgs e) |
| | | { |
| | | base.OnLoad(e); |
| | | base.ButtonClick(e); |
| | | try |
| | | { |
| | | //选择 |
| | |
| | | { |
| | | 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")) |
| | | { |
| | | this.View.ShowErrMessage("生产订单嘿嘿!"); |
| | | 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()); |
| | | |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 页面按钮工具栏事件 |
| | | /// </summary> |
| | | /// <param name="e"></param> |
| | | public override void BarItemClick(BarItemClickEventArgs e) |
| | | { |
| | | base.OnLoad(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) |
| | |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 窗体页面加载 及 查询 |
| | | /// </summary> |
| | | public void SearchList() |
| | | { |
| | | DprwSearcrList("", ""); |
| | | ScddSearchList("", ""); |
| | | } |
| | | /// <summary> |
| | | /// 界面上方“待排任务”的页签 |
| | | /// </summary> |
| | | /// <param name="FDepartId"></param> |
| | | /// <param name="FDate"></param> |
| | | 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()); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 界面下方“生产订单”的页签 |
| | | /// </summary> |
| | | /// <param name="FMaterialId">物料</param> |
| | | /// <param name="FProOrderNo">生产订单号</param> |
| | | 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()); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 生产订单数据推到待排任务栏 |
| | | /// </summary> |
| | |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 产能计算 |
| | | /// </summary> |
| | |
| | | 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<ENG_WORKCALFULLDATA>(); |
| | | |
| | |
| | | } |
| | | FSCOrderCount = FSCOrderCount - fqty; |
| | | } |
| | | |
| | | //continue; |
| | | |
| | | //根据生产订单号和物料查询是否存在明细 +生产订单明细行号 |
| | | string sql = string.Format(@" |
| | | /*dialect*/ |
| | |
| | | |
| | | JObject jsonModel = new JObject(); |
| | | jsonModel.Add("FPreparatDate", DateTime.Now.ToString());//编制日期 |
| | | jsonModel.Add("FHPlanBeginDate", Convert.ToString(order["FPlanBeginDate"]));//计划开始日期 |
| | | jsonModel.Add("FHPlanEndDate", Convert.ToString(order["FPlanEndDate"]));//计划完工日期 |
| | | jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(order["FSRCBILLENTRYSEQ"]));//生产订单明细行号 |
| | | jsonModel.Add("FSCOrderNo", Convert.ToString(order["FProOrderNo"])); //生产订单号FSCOrderNo |
| | | jsonModel.Add("FHSeOrderBillNo", Convert.ToString(order["FSalOrderNo"]));//销售订单号 |
| | |
| | | jsonModel.Add("FHMaterID", new JObject() { ["Fnumber"] = Convert.ToString(((order["FMATERIALID"]) as DynamicObject)?["Number"].ToString()) });//物料 |
| | | jsonModel.Add("FHSourceID", new JObject() { ["Fnumber"] = Convert.ToString(((order["FSczy"]) as DynamicObject)?["Number"].ToString()) });//生产资源 |
| | | jsonModel.Add("FHWorkQty", Convert.ToString(order["FCapacity"])); ;//产能 |
| | | jsonModel.Add("FHYX", Convert.ToString(order["FPriority"])); ;//优先级 |
| | | jsonModel.Add("FHYX", seq++); ;//优先级 |
| | | if (Convert.ToInt32(order["FID"]) > 0) |
| | | jsonModel.Add("FID", Convert.ToString(order["FID"])); ;//日计划工单ID |
| | | JArray Entry = new JArray(); |
| | |
| | | LogHelper.Error("生产排程单动态表单 排程按钮点击功能" + ex.Message.ToString()); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 自动排程保存功能 |
| | | /// </summary> |
| | | public void ZdpcSave() |
| | | { |
| | | List<string> sqlList = new List<string>(); |
| | | string sql; |
| | | //获取单据体信息 |
| | | Entity entity = this.View.BillBusinessInfo.GetEntity("FZdpcEntity"); |
| | | //单据体信息转换为列表集合 |
| | | DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); |
| | | DateTime date = Convert.ToDateTime(DateTime.Now.ToString("d")); |
| | | string _result = ""; |
| | | //foreach (DynamicObject current in entityDataObjoct) |
| | | //{ |
| | | // if (Convert.ToInt32(current["FNoScheduled"]) < 0) |
| | | // _result += "序号:" + Convert.ToString(current["SEQ"]) + ",日计划总数量超出生产订单数量"; |
| | | //} |
| | | if (_result != "") |
| | | { |
| | | this.View.ShowErrMessage(_result); |
| | | return; |
| | | } |
| | | foreach (DynamicObject current in entityDataObjoct) |
| | | { |
| | | 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["FIDZD"])); |
| | | //jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"])); |
| | | //jsonModel.Add("FDayPlanQuantity", Convert.ToString(current["FDayPlanQuantity"])); |
| | | //jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"])); |
| | | sql = $" /*dialect*/ select FEntryID, FHMASTERDATE from SC_WORKBILLSORTBILLSub where FID={Convert.ToString(current["FIDZD"])} "; |
| | | List<DayPlanModel> dayPlanModel = new List<DayPlanModel>(); |
| | | dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<DayPlanModel>(); |
| | | JArray Entry = new JArray(); |
| | | for (int i = 0; i <= 60; i++) |
| | | { |
| | | if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0") |
| | | continue; |
| | | JObject jsonFPOOrderEntry = new JObject(); |
| | | jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期 |
| | | jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量 |
| | | List<DayPlanModel> _dayPlanModel = dayPlanModel.Where(x => x.FHMASTERDATE == date.AddDays(i)).ToList(); |
| | | if (_dayPlanModel.Count > 0) |
| | | { |
| | | jsonFPOOrderEntry.Add("FEntryID", _dayPlanModel.FirstOrDefault().FEntryID); ;//序号 |
| | | } |
| | | 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("生产计划平台保存失败:" + jsonRoot.ToString()); |
| | | this.View.ShowMessage("数据储存失败!请联系管理员!"); |
| | | } |
| | | } |
| | | |
| | | this.View.ShowMessage("操作成功"); |
| | | } |
| | | |
| | | } |
| | | } |