using System; using System.Collections.Generic; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using System.ComponentModel; using Kingdee.BOS.ServiceHelper; using System.Data; using Newtonsoft.Json.Linq; using ZD.Cloud.WebApi; using Newtonsoft.Json; using Kingdee.BOS.Core.DynamicForm; using System.Linq; namespace Demo.BillView.PRD { [Description("[日计划工单-审核]服务插件]")] [HotUpdate] public class Pro_DayPlanAduit : AbstractOperationServicePlugIn { Dictionary dictionary = new Dictionary(); public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e) { base.OnPrepareOperationServiceOption(e); //为了在BeginOperationTransaction里检查数据抛出异常时 //只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会 //循环为每一张单据创建事务调用操作 e.SupportTransaction = true; e.SurportBatchTransaction = false; } public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FEntity"); e.FieldKeys.Add("FEntity_FEntryID"); e.FieldKeys.Add("FHQty"); } public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { base.BeginOperationTransaction(e); //foreach (var item in e.DataEntitys) //{ // DynamicObjectCollection entryRows = item["FEntity"] as DynamicObjectCollection; //} Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息 foreach (var billObj in e.DataEntitys) { //DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) // as DynamicObjectCollection; DynamicObjectCollection entryRows = billObj["FEntity"] as DynamicObjectCollection; foreach (var entryRow in entryRows) { var fentryId = entryRow["Id"].ToString(); //生成生产订单 string sql = $"/*dialect*/ exec proc_jit_DayPlanAduitAddNemMoOrder {fentryId}"; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows[0][0].ToString().Contains("成功")) continue; foreach (DataRow dr in dt.Rows) { JObject model = new JObject(); model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = dr["FBillTypeNumber"].ToString() }); //单据类型 model.Add("FCreatorId", new JObject() { ["FUserID"] = Context.UserId }); //创建人 model.Add("FModifierId", new JObject() { ["FUserID"] = Context.UserId }); //修改人 model.Add("FDate", dr["FDate"].ToString()); model.Add("FBILLNO", dr["FSpreadBillNo"].ToString()); model.Add("FPrdOrgId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); model.Add("FWorkShopID0", new JObject() { ["Fnumber"] = dr["FWorkShopNumber"].ToString() }); model.Add("FOwnerTypeId", dr["FOwnerTypeId"].ToString()); model.Add("FIsRework", dr["FIsRework"].ToString()); model.Add("FBusinessType", dr["FBusinessType"].ToString()); model.Add("FTrustteed", dr["FTrustteed"].ToString()); model.Add("FIsEntrust", dr["FIsEntrust"].ToString()); model.Add("FPPBOMType", dr["FPPBOMType"].ToString()); model.Add("FIssueMtrl", dr["FIssueMtrl"].ToString()); JArray Fentity = new JArray(); JObject FentityModel = new JObject(); FentityModel.Add("FProductType", dr["FProductType"].ToString()); FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = dr["FMATERIALNUMBER"].ToString() }); FentityModel.Add("FWorkShopID", new JObject() { ["Fnumber"] = dr["FWorkShopNumber"].ToString() }); FentityModel.Add("FUnitId", new JObject() { ["Fnumber"] = dr["FUnitNumber"].ToString() }); FentityModel.Add("FQty", dr["FQty"].ToString()); FentityModel.Add("FYieldQty", dr["FYieldQty"].ToString()); FentityModel.Add("FPlanStartDate", dr["FPlanStartDate"].ToString()); FentityModel.Add("FPlanFinishDate", dr["FPlanFinishDate"].ToString()); FentityModel.Add("FRequestOrgId", new JObject() { ["Fnumber"] = dr["FRequestOrgNumber"].ToString() }); FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = dr["FBomNumber"].ToString() }); FentityModel.Add("FISBACKFLUSH", dr["FISBACKFLUSH"].ToString()); FentityModel.Add("FStockInOrgId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); FentityModel.Add("FBaseYieldQty", dr["FBaseYieldQty"].ToString()); FentityModel.Add("FReqType", dr["FReqType"].ToString()); FentityModel.Add("FInStockOwnerTypeId", dr["FInStockOwnerTypeId"].ToString()); FentityModel.Add("FBaseStockInLimitH", dr["FBaseStockInLimitH"].ToString()); FentityModel.Add("FInStockOwnerId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); FentityModel.Add("FCheckProduct", dr["FCheckProduct"].ToString()); FentityModel.Add("FBaseStockInLimitL", dr["FBaseStockInLimitL"].ToString()); FentityModel.Add("FBaseUnitQty", dr["FBaseUnitQty"].ToString()); FentityModel.Add("FRoutingId", new JObject() { ["Fnumber"] = dr["FRoutingNumber"].ToString() }); FentityModel.Add("FBaseUnitId", new JObject() { ["Fnumber"] = dr["FUnitNumber"].ToString() }); FentityModel.Add("FStockId", new JObject() { ["Fnumber"] = dr["FStockNumber"].ToString() }); FentityModel.Add("FStockInLimitH", dr["FStockInLimitH"].ToString()); FentityModel.Add("FStockInLimitL", dr["FStockInLimitL"].ToString()); FentityModel.Add("FCostRate", dr["FCostRate"].ToString()); FentityModel.Add("FCreateType", dr["FCreateType"].ToString()); FentityModel.Add("FYieldRate", dr["FYieldRate"].ToString()); FentityModel.Add("FGroup", dr["FGroup"].ToString()); FentityModel.Add("FNoStockInQty", dr["FNoStockInQty"].ToString()); FentityModel.Add("FBaseNoStockInQty", dr["FBaseNoStockInQty"].ToString()); FentityModel.Add("FRowId", dr["FRowId"].ToString()); FentityModel.Add("FPickMtrlStatus", dr["FPickMtrlStatus"].ToString()); FentityModel.Add("FMOChangeFlag", dr["FMOChangeFlag"].ToString()); FentityModel.Add("FDAYPLANBILLNO", dr["FDAYPLANBILLNO"].ToString()); FentityModel.Add("FDayPlanFseq", dr["FDayPlanFseq"].ToString()); FentityModel.Add("FDayPlanFentryId", dr["FDayPlanFentryId"].ToString()); FentityModel.Add("FDayPlanFid", dr["FDayPlanFid"].ToString()); FentityModel.Add("FDayPlanRemainQty", 0); FentityModel.Add("FDayPlanQty", dr["FQty"].ToString()); FentityModel.Add("F_TEZV_Base", new JObject() { ["Fnumber"] = dr["FPREBDONENUMBER"].ToString() });//包装标识 FentityModel.Add("F_bsv_Text1", dr["F_bsv_Text1"].ToString());//源单客户代码 FentityModel.Add("F_bsv_Date", dr["F_bsv_Date"].ToString());//要求交期 FentityModel.Add("F_bsv_KH", new JObject() { ["Fnumber"] = dr["FCUSTOMERNUMBER"].ToString() });//客户 //////////////生产订单源单信息//////////////////// //FSRCBILLTYPE,FSRCBILLID,FSRCBILLNO,FSRCBILLENTRYID,FSRCBILLENTRYSEQ,FSALEORDERID,FSALEORDERNO,FSALEORDERENTRYID,FSALEORDERENTRYSEQ FentityModel.Add("FSRCBILLTYPE", dr["FSRCBILLTYPE"].ToString()); FentityModel.Add("FSRCBILLID", dr["FSRCBILLID"].ToString()); FentityModel.Add("FSRCBILLNO", dr["FSRCBILLNO"].ToString()); FentityModel.Add("FSRCBILLENTRYID", dr["FSRCBILLENTRYID"].ToString()); FentityModel.Add("FSRCBILLENTRYSEQ", dr["FSRCBILLENTRYSEQ"].ToString()); FentityModel.Add("FSALEORDERID", dr["FSALEORDERID"].ToString()); FentityModel.Add("FSALEORDERNO", dr["FSALEORDERNO"].ToString()); FentityModel.Add("FSALEORDERENTRYID", dr["FSALEORDERENTRYID"].ToString()); FentityModel.Add("FSALEORDERENTRYSEQ", dr["FSALEORDERENTRYSEQ"].ToString()); FentityModel.Add("FReqSrc", dr["FReqSrc"].ToString());//需求来源 1销售订单 if (dr["FSRCBILLTYPE"].ToString() == "PLN_PLANORDER") { JArray _Fentity2 = new JArray(); JObject _FentityModel2 = new JObject(); _FentityModel2.Add("FTREEENTITY_Link_FFlowId", "");//业务流程图:FTREEENTITY_Link_FFlowId _FentityModel2.Add("FTREEENTITY_Link_FFlowLineId", "0");//推进路线:FTREEENTITY_Link_FFlowLineId _FentityModel2.Add("FTREEENTITY_Link_FRuleId", "PlanOrder_MO");//转换规则:FTREEENTITY_Link_FRuleId _FentityModel2.Add("FTREEENTITY_Link_FSTableId", "0");//源单表内码:FTREEENTITY_Link_FSTableId _FentityModel2.Add("FTREEENTITY_Link_FSTableName", "T_PLN_PLANORDER");//源单表:FTREEENTITY_Link_FSTableName _FentityModel2.Add("FTREEENTITY_Link_FSBillId", dr["FSBILLID"].ToString());//源单内码:FTREEENTITY_Link_FSBillId _FentityModel2.Add("FTREEENTITY_Link_FSId", dr["FSID"].ToString()); //源单分录内码:FTREEENTITY_Link_FSId _FentityModel2.Add("FTREEENTITY_Link_FBaseUnitQtyOld", dr["FQty"].ToString());//原始携带量:FTREEENTITY_Link_FBaseUnitQtyOld _FentityModel2.Add("FTREEENTITY_Link_FBaseUnitQty", dr["FQty"].ToString());//修改携带量:FTREEENTITY_Link_FBaseUnitQty _Fentity2.Add(_FentityModel2); FentityModel.Add("FTREEENTITY_Link", _Fentity2); } ////////////////////////////////////////////////// Fentity.Add(FentityModel); model.Add("FTreeEntity", Fentity); JObject jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["IsDeleteEntry"] = "false", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["Model"] = model }; CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var _result = cloudClient.Save("PRD_MO", jsonRoot.ToString()); var _saveObj = JObject.Parse(_result); var saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { e.CancelOperation = true; dictionary.Add(dr["FDAYPLANBILLNO"].ToString(), "生产订单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); LogService.Write("生产订单生成失败json" + jsonRoot.ToString()); //this.View.ShowErrMessage("生产订单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); continue; } var fBillNo = _saveObj["Result"]["Number"].ToString(); var fID = _saveObj["Result"]["Id"].ToString(); //this.View.ShowMessage("生产订单生成成功,单号:" + fBillNo); //生成一张生产订单变更单 model = new JObject(); model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = "SCDDBGD01_SYS" }); //单据类型 model.Add("FCreatorId", new JObject() { ["FUserID"] = Context.UserId }); //创建人 model.Add("FModifierId", new JObject() { ["FUserID"] = Context.UserId }); //修改人 model.Add("FDate", Convert.ToString(DateTime.Now)); model.Add("FPrdOrgId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); model.Add("FWorkShopID", new JObject() { ["Fnumber"] = dr["FWorkShopNumber"].ToString() }); Fentity = new JArray(); FentityModel = new JObject(); FentityModel.Add("FChangeType", 2);////变更前 FentityModel.Add("FProductType", dr["FProductType"].ToString()); FentityModel.Add("FMoNo", dr["FBILLNO"].ToString()); FentityModel.Add("FMoId", dr["FID"].ToString()); FentityModel.Add("FMOENTRYID", dr["FENTRYID"].ToString()); FentityModel.Add("FMOENTRYSEQ", dr["FSEQ"].ToString()); FentityModel.Add("FStatus", "1"); FentityModel.Add("FPlanStartDate", dr["FPlanStartDate"].ToString()); FentityModel.Add("FPlanFinishDate", dr["FPlanFinishDate"].ToString()); FentityModel.Add("FRequestOrgId", new JObject() { ["Fnumber"] = dr["FRequestOrgNumber"].ToString() }); FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = dr["FBomNumber"].ToString() }); FentityModel.Add("FReqType", dr["FReqType"].ToString()); FentityModel.Add("FStockInOrgId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = dr["FMATERIALNUMBER"].ToString() }); FentityModel.Add("FUnitId", new JObject() { ["Fnumber"] = dr["FUnitNumber"].ToString() }); FentityModel.Add("FWorkShopId1", new JObject() { ["Fnumber"] = dr["FWorkShopNumber"].ToString() }); FentityModel.Add("FQty", dr["FMoFentryQty"].ToString()); FentityModel.Add("FSrcBillNo", dr["FBILLNO"].ToString());//源单编号 FentityModel.Add("FSrcBillId", dr["FID"].ToString());//源单内码 FentityModel.Add("FSrcBillEntryId", dr["FENTRYID"].ToString());//源单分录内码 FentityModel.Add("FSrcBillEntrySeq", dr["FSEQ"].ToString());//源单行号 FentityModel.Add("FCostRate", dr["FCostRate"].ToString()); FentityModel.Add("FInStockOwnerTypeId", dr["FInStockOwnerTypeId"].ToString()); FentityModel.Add("FInStockOwnerId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); FentityModel.Add("FYieldRate", dr["FYieldRate"].ToString()); FentityModel.Add("FGroup", dr["FGroup"].ToString()); FentityModel.Add("FDAYPLANBILLNO", dr["FDAYPLANBILLNO"].ToString()); FentityModel.Add("FDayPlanFentryId", dr["FDayPlanFentryId"].ToString()); FentityModel.Add("FDayPlanFid", dr["FDayPlanFid"].ToString()); //建立关联关系 JArray Fentity2 = new JArray(); JObject FentityModel2 = new JObject(); FentityModel2.Add("FEntity_Link_FFlowId", "f11b462a-8733-40bd-8f29-0906afc6a201"); FentityModel2.Add("FEntity_Link_FFlowLineId", "7"); FentityModel2.Add("FEntity_Link_FRuleId", "PRD_MO2MOCHANGE"); FentityModel2.Add("FEntity_Link_FSTableName", "T_PRD_MOENTRY"); FentityModel2.Add("FEntity_Link_FSBillId", dr["FID"].ToString()); FentityModel2.Add("FEntity_Link_FSId", dr["FENTRYID"].ToString()); FentityModel2.Add("FEntity_Link_FBaseQtyOld", dr["FMoFentryQty"].ToString()); FentityModel2.Add("FEntity_Link_FBaseQty", dr["FMoFentryQty"].ToString()); Fentity2.Add(FentityModel2); FentityModel.Add("FEntity_Link", Fentity2); FentityModel.Add("FBFLowId", new JObject() { ["FID"] = "f11b462a-8733-40bd-8f29-0906afc6a201" });//业务流程:FBFLowId Fentity.Add(FentityModel); FentityModel = new JObject(); FentityModel.Add("FChangeType", 3);////变更后 FentityModel.Add("FProductType", dr["FProductType"].ToString()); FentityModel.Add("FMoNo", dr["FBILLNO"].ToString()); FentityModel.Add("FMoId", dr["FID"].ToString()); FentityModel.Add("FMOENTRYID", dr["FENTRYID"].ToString()); FentityModel.Add("FMOENTRYSEQ", dr["FSEQ"].ToString()); FentityModel.Add("FStatus", "1"); FentityModel.Add("FPlanStartDate", dr["FPlanStartDate"].ToString()); FentityModel.Add("FPlanFinishDate", dr["FNewPlanFinishDate"].ToString()); FentityModel.Add("FRequestOrgId", new JObject() { ["Fnumber"] = dr["FRequestOrgNumber"].ToString() }); FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = dr["FBomNumber"].ToString() }); FentityModel.Add("FReqType", dr["FReqType"].ToString()); FentityModel.Add("FStockInOrgId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = dr["FMATERIALNUMBER"].ToString() }); FentityModel.Add("FUnitId", new JObject() { ["Fnumber"] = dr["FUnitNumber"].ToString() }); FentityModel.Add("FWorkShopId1", new JObject() { ["Fnumber"] = dr["FWorkShopNumber"].ToString() }); FentityModel.Add("FQty", dr["FBgQty"].ToString()); FentityModel.Add("FSrcBillNo", dr["FBILLNO"].ToString());//源单编号 FentityModel.Add("FSrcBillId", dr["FID"].ToString());//源单内码 FentityModel.Add("FSrcBillEntryId", dr["FENTRYID"].ToString());//源单分录内码 FentityModel.Add("FSrcBillEntrySeq", dr["FSEQ"].ToString());//源单行号 FentityModel.Add("FCostRate", dr["FCostRate"].ToString()); FentityModel.Add("FInStockOwnerTypeId", dr["FInStockOwnerTypeId"].ToString()); FentityModel.Add("FInStockOwnerId", new JObject() { ["Fnumber"] = dr["FPrdOrgNumber"].ToString() }); FentityModel.Add("FYieldRate", dr["FYieldRate"].ToString()); FentityModel.Add("FGroup", dr["FGroup"].ToString()); FentityModel.Add("FDAYPLANBILLNO", dr["FDAYPLANBILLNO"].ToString()); FentityModel.Add("FDayPlanFentryId", dr["FDayPlanFentryId"].ToString()); FentityModel.Add("FDayPlanFid", dr["FDayPlanFid"].ToString()); //建立关联关系 Fentity2 = new JArray(); FentityModel2 = new JObject(); FentityModel2.Add("FEntity_Link_FFlowId", "f11b462a-8733-40bd-8f29-0906afc6a201"); FentityModel2.Add("FEntity_Link_FFlowLineId", "7"); FentityModel2.Add("FEntity_Link_FRuleId", "PRD_MO2MOCHANGE"); FentityModel2.Add("FEntity_Link_FSTableName", "T_PRD_MOENTRY"); FentityModel2.Add("FEntity_Link_FSBillId", dr["FID"].ToString()); FentityModel2.Add("FEntity_Link_FSId", dr["FENTRYID"].ToString()); FentityModel2.Add("FEntity_Link_FBaseQtyOld", dr["FBgQty"].ToString()); FentityModel2.Add("FEntity_Link_FBaseQty", dr["FBgQty"].ToString()); Fentity2.Add(FentityModel2); FentityModel.Add("FEntity_Link", Fentity2); FentityModel.Add("FBFLowId", new JObject() { ["FID"] = "f11b462a-8733-40bd-8f29-0906afc6a201" });//业务流程:FBFLowId Fentity.Add(FentityModel); model.Add("FEntity", Fentity); jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["IsDeleteEntry"] = "false", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能 ["Model"] = model }; _result = cloudClient.Save("PRD_MOChange", jsonRoot.ToString()); _saveObj = JObject.Parse(_result); saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); //生产订单审核提交以及删除 json格式 var json = new { Ids = fID }; if (saveIsSuc != "TRUE") { //删除生产订单 LogService.Write("json:" + json); cloudClient.Delete("PRD_MO", JsonConvert.SerializeObject(json)); LogService.Write("JsonConvert.SerializeObject(json):" + JsonConvert.SerializeObject(jsonRoot)); LogService.Write("生产订单变更单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); e.CancelOperation = true; dictionary.Add(dr["FDAYPLANBILLNO"].ToString(), "生产订单变更单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); continue; } //提交生产订单 _result = cloudClient.Submit("PRD_MO", JsonConvert.SerializeObject(json)); _saveObj = JObject.Parse(_result); if (_saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE") { dictionary.Add(dr["FDAYPLANBILLNO"].ToString(), _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); continue; } LogService.Write("提交完成"); //审核生产订单 _result = cloudClient.Audit("PRD_MO", JsonConvert.SerializeObject(json)); _saveObj = JObject.Parse(_result); if (_saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE") { dictionary.Add(dr["FDAYPLANBILLNO"].ToString(), _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); continue; } LogService.Write("审核完成"); //更新单据信息 string _sql = $"exec proc_jit_DayPlanAduitAddNemMoOrderUpdate {fentryId},{fID},'{fBillNo}'"; LogService.Write("更新单据信息_sql" + _sql); DBServiceHelper.Execute(Context, _sql); LogService.Write("更新单据信息_sql执行完成"); } } } } public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); foreach (var item in dictionary) { ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value); } } public static class ResultMessage {/// /// 修改提示信息 /// /// /// public static void dataError(OperateResultCollection operateResult, string billno, string message) { OperateResult operate = operateResult.Where(n => n.Number == billno).First(); operate.Message = message; operate.SuccessStatus = false; operate.MessageType = MessageType.FatalError; } } } }