| | |
| | | { |
| | | btnReFarshJDT(); |
| | | } |
| | | //自动排程(数据引入) |
| | | if (e.BarItemKey.ToUpper() == "TB_ZDPC") |
| | | { |
| | | btnZdpc(); |
| | | } |
| | | if (e.BarItemKey.ToUpper() == "TB_OPERCOMPLETEREPORT") |
| | | { |
| | | // 打开简单系统账表 |
| | |
| | | |
| | | } |
| | | } |
| | | |
| | | public void btnZdpc() |
| | | { |
| | | string errMessege = string.Empty;//错误信息提示 |
| | | var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString();//组织 |
| | | string fProWorkShopId = ""; |
| | | DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection;//生产车间 |
| | | if (entryOp.Count == 1) |
| | | { |
| | | List<string> pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList(); |
| | | fProWorkShopId = string.Join(",", pkValueList); |
| | | } |
| | | if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId)) |
| | | { |
| | | errMessege = "请选择组织和单个生产车间"; |
| | | this.View.ShowErrMessage(errMessege); |
| | | return; |
| | | } |
| | | int fLockDays = Convert.ToInt32(this.Model.GetValue("FLockDays"));//引入天数 |
| | | string sql = $"/*dialect*/ exec proc_jit_zdpc {fPrdOrgId},{fProWorkShopId},{fLockDays}"; |
| | | LogService.Write("自动排产sql:"+sql); |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | if (ds.Tables[0].Rows[0][0].ToString().Contains("失败_生产订单没有维护生产资源")) |
| | | { |
| | | foreach (DataRow dr in ds.Tables[1].Rows) |
| | | { |
| | | errMessege += $"{dr["FBILLNO"]}\r\n"; |
| | | this.View.ShowErrMessage("操作失败,生产订单没有维护生产资源,生产订单编号\r\n" + errMessege); |
| | | return; |
| | | } |
| | | } |
| | | if (ds.Tables[0].Rows[0][0].ToString().Contains("失败_生产资源没有维护工作日历")) |
| | | { |
| | | foreach (DataRow dr in ds.Tables[1].Rows) |
| | | { |
| | | errMessege += $"{dr["FNUMBER"]}\r\n"; |
| | | this.View.ShowErrMessage("操作失败,生产资源没有维护工作日历,生产资源(重复生产线)编码:\r\n" + errMessege); |
| | | return; |
| | | } |
| | | } |
| | | if (ds.Tables[0].Rows[0][0].ToString().Contains("失败_没有维护产能")) |
| | | { |
| | | foreach (DataRow dr in ds.Tables[1].Rows) |
| | | { |
| | | errMessege += $"生产资源:{dr["FWORKCENTERNUMBER"]},物料编码:{dr["FMATERIALNUMBER"]}\r\n"; |
| | | this.View.ShowErrMessage("操作失败,没有维护产能\r\n" + errMessege); |
| | | return; |
| | | } |
| | | } |
| | | DataTable dt = ds.Tables[0];//生产订单信息结果集 |
| | | List<string> fsczyidList = dt.AsEnumerable().Select(r => r["FSCZYID"].ToString()).Distinct().ToList();//生产资源集合 |
| | | foreach (var item in fsczyidList)//循环生产资源 |
| | | { |
| | | DataRow[] drs = dt.Select("FSCZYID =" + item);//筛选出当前生产资源生产订单数据 |
| | | string _sql = string.Format(@" |
| | | /*dialect*/ |
| | | select FCalUserId,FCalUserType,FShiftId,FIsWorkTime,FDay,FDateStyle,c.FALLHOURS ,c.FALLHOURS FALLHOURSCONST,b.FENTRYID from T_ENG_WORKCAL a |
| | | left join T_ENG_WORKCALFULLDATA b on a.FID=b.FID |
| | | left join T_ENG_SHIFT c on b.FShiftId =c.FID --班制表 |
| | | where FCalUserType ='ENG_RepetitiveProductLine' |
| | | and FDateStyle = 1 --是否工作日 |
| | | and FIsWorkTime = 1 --是否生产 |
| | | and DATEDIFF(D,getdate(),FDAY)>=0 |
| | | and c.FALLHOURS >0 |
| | | and FCalUserId = {0}", item); |
| | | LogService.Write("产能sql:" + _sql); |
| | | var engWorkcalfulldataList = DBServiceHelper.ExecuteDataSet(Context, _sql).ToModelList<ENG_WORKCALFULLDATA>();//所有可以用于排产的日期 |
| | | foreach (var dr in drs) //循环生产订单 |
| | | { |
| | | List<ENG_WORKCALFULLDATA> finalyResult = new List<ENG_WORKCALFULLDATA>();//用于记录每个订单排产状况 |
| | | decimal fqty = Convert.ToDecimal(dr["FQTY"]);//生产订单数量 |
| | | decimal fcapacity = Convert.ToDecimal(dr["FCAPACITY"]);//小时产能 |
| | | var _engWorkcalfulldataList = engWorkcalfulldataList.Where(x => x.FALLHOURS > 0).ToList(); |
| | | foreach (var model in _engWorkcalfulldataList) //循环工作日历 |
| | | { |
| | | if (fqty == 0) |
| | | break; |
| | | var dayFCapacity = fcapacity * model.FALLHOURS;//今天可以生产总数量 |
| | | var dayFqty = dayFCapacity > fqty ? fqty : dayFCapacity;//今天实际排产数量 |
| | | finalyResult.Add(new Demo.Model.Model.ENG_WORKCALFULLDATA |
| | | { |
| | | FDay = model.FDay, |
| | | FQTY = dayFqty, |
| | | FCAPACITY = fcapacity, |
| | | FHOURS = dayFqty / fcapacity, |
| | | FGZRLENTRYID = model.FENTRYID |
| | | }); |
| | | //当日剩余产量大于剩余生产订单数量时 按小时产量去计算需要时间 list<>去扣除相应的工时 |
| | | if (dayFCapacity > fqty) |
| | | { |
| | | //改变list中某个元素值 |
| | | var engWorkcalfulldataModel = engWorkcalfulldataList.Where(c => c.FENTRYID == model.FENTRYID).FirstOrDefault(); |
| | | //model.FALLHOURS -= Math.Ceiling(fqty / FCapacity); |
| | | engWorkcalfulldataModel.FALLHOURS -= dayFqty / fcapacity; // 生产数 / 小时产能 = 消耗的小时 (数值类型为decimal) |
| | | } |
| | | else |
| | | { |
| | | var engWorkcalfulldataModel = engWorkcalfulldataList.Where(c => c.FENTRYID == model.FENTRYID).FirstOrDefault(); |
| | | engWorkcalfulldataModel.FALLHOURS = 0; |
| | | } |
| | | fqty -= dayFqty;//生产订单数量扣除掉今天生产数量 |
| | | } |
| | | JObject jsonRoot = new JObject(); |
| | | jsonRoot.Add("Creator", ""); |
| | | jsonRoot.Add("NeedUpDateFields", new JArray()); |
| | | jsonRoot.Add("NeedReturnFields", new JArray()); |
| | | jsonRoot.Add("IsDeleteEntry", "false"); |
| | | jsonRoot.Add("SubSystemId", ""); |
| | | jsonRoot.Add("IsVerifyBaseDataField", ""); |
| | | JObject jsonModel = new JObject(); |
| | | jsonModel.Add("FMoFBillType", dr["FMoFBillType"].ToString()); |
| | | jsonModel.Add("FOrderType", "生产订单");// |
| | | jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(dr["FSEQ"]));//生产订单明细行号 |
| | | jsonModel.Add("FSCOrderNo", Convert.ToString(dr["FBILLNO"])); //生产订单号FSCOrderNo |
| | | jsonModel.Add("FHSeOrderBillNo", Convert.ToString(dr["FSaleOrderNo"]));//销售订单号 |
| | | jsonModel.Add("FHOrderQty", Convert.ToString(dr["FSalOrderCount"]));//销售订单数量 |
| | | jsonModel.Add("FHOrderLev", "3");//订单等级 |
| | | jsonModel.Add("FHOrderCommitDate", Convert.ToString(dr["FPLANDELIVERYDATE"]));//销售订单交货日期 |
| | | |
| | | jsonModel.Add("FHPlanBeginDate", Convert.ToString(dr["FPLANSTARTDATE"])); //计划开始日期 |
| | | jsonModel.Add("FHPlanEndDate", Convert.ToString(dr["FPLANFINISHDATE"])); //计划完工日期 |
| | | jsonModel.Add("FPriority", Convert.ToInt32(dr["FROWId"]) * 10);//优先级 |
| | | jsonModel.Add("FHOrderNeedQty", Convert.ToString(dr["FQTY"]));// 订单需求数量 |
| | | jsonModel.Add("FPrdBillNo", Convert.ToString(dr["FBILLNO"])); ;//源单编号 |
| | | jsonModel.Add("FPRDMOMAINID", Convert.ToString(dr["FID"])); ;//源单主内码 |
| | | jsonModel.Add("FPRDMOENTYID", Convert.ToString(dr["FENTRYID"])); ;//源单子内码 |
| | | jsonModel.Add("FMoFID", Convert.ToString(dr["FID"])); ;//源单主内码 |
| | | jsonModel.Add("FMoFentryId", Convert.ToString(dr["FENTRYID"])); ;//源单子内码 |
| | | jsonModel.Add("FOrderQuantity", Convert.ToString(dr["FQTY"])); ;//生产订单数量 |
| | | jsonModel.Add("FDayPlanQuantity", Convert.ToString(dr["FQTY"])); ;//日计划数量 |
| | | jsonModel.Add("FHMaker ", new JObject() { ["FUserID"] = Context.UserId }); //创建人 |
| | | jsonModel.Add("FHUpDater ", new JObject() { ["FUserID"] = Context.UserId }); //修改人 |
| | | jsonModel.Add("FHPRDORGID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FORGNUMBER"]) });//生产组织 |
| | | jsonModel.Add("FHUnitID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FUNITNUMBER"]) });//单位 |
| | | jsonModel.Add("FBOMID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FBOMNUMBER"]) });//BOM版本 |
| | | jsonModel.Add("FHMaterID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FMATERIALNUMBER"]) });//物料 |
| | | jsonModel.Add("FHWorkShopID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FDEPTNUMBER"]) });//生产车间 |
| | | jsonModel.Add("FHSourceID", new JObject() { ["Fnumber"] = Convert.ToString(dr["FSCZYNUMBER"]) });//生产资源 |
| | | JArray Entry = new JArray(); |
| | | foreach (var entry in finalyResult) |
| | | { |
| | | JObject jsonFPOOrderEntry = new JObject(); |
| | | jsonFPOOrderEntry.Add("FHMasterDate", entry.FDay); |
| | | jsonFPOOrderEntry.Add("FHQty ", entry.FQTY); |
| | | jsonFPOOrderEntry.Add("FCAPACITY ", entry.FCAPACITY);//小时产能 |
| | | jsonFPOOrderEntry.Add("FHOURS ", entry.FHOURS);//工时 |
| | | jsonFPOOrderEntry.Add("FGZRLENTRYID ", entry.FGZRLENTRYID);// |
| | | Entry.Add(jsonFPOOrderEntry); |
| | | } |
| | | jsonModel.Add("FEntity", Entry); |
| | | jsonRoot.Add("Model", jsonModel); |
| | | CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); |
| | | var result = cloudClient.Save("Paez_Sc_WorkBillAutoSortBill", jsonRoot.ToString()); |
| | | JObject saveObj = JObject.Parse(result); |
| | | string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); |
| | | if (saveIsSuc != "TRUE") |
| | | { |
| | | errMessege += saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString() + " \r\n"; |
| | | //this.View.ShowErrMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); |
| | | //return; |
| | | } |
| | | } |
| | | } |
| | | if (errMessege.Length > 0) |
| | | { |
| | | this.View.ShowMessage(errMessege); |
| | | } |
| | | else { |
| | | this.View.ShowMessage("操作成功"); |
| | | } |
| | | } |
| | | } |
| | | } |