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;
|
using RestSharp;
|
using zymes_Project.Utility;
|
|
namespace zymes_Project.OperationService
|
{
|
[Description("[生产订单变更单-审核]服务插件]")]
|
[HotUpdate]
|
public class zymes_MOCHANGE : AbstractOperationServicePlugIn
|
{
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
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");
|
}
|
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
|
{
|
base.AfterExecuteOperationTransaction(e);
|
Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息
|
foreach (var billObj in e.DataEntitys)
|
{
|
var forgName = Context.CurrentOrganizationInfo.Name;
|
if (!forgName.Contains("杭州斯莫尔磁性材料有限公司"))
|
continue;
|
var id = billObj["Id"].ToString();
|
|
var sqls= string.Empty;
|
sqls = $@"select FMONO,FSRCBILLID from T_PRD_MOCHANGE a
|
inner join T_PRD_MOCHANGEENTRY b on a.FID = b.FID
|
where a.FID ={id} group by FMONO, FSRCBILLID";
|
|
LogService.Write("1:" + sqls);
|
DataSet dataSet = DBServiceHelper.ExecuteDataSet(Context, sqls);
|
|
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
|
{
|
var ids = dataSet.Tables[0].Rows[i]["FSRCBILLID"].ToString();
|
string sql = string.Empty;
|
|
sql = $@"
|
/*dialect*/
|
select a.FID AS HInterID,a.FENTRYID as HENTRYID,a.FSEQ as HSEQ,a.FQTY as HQty,a.FQTY as HQTYMUST,aa.FSTOCKINQUASELAUXQTY as HRelationQty,0 as HRelationMoney,a.FPLANSTARTDATE as HPlanBeginDate,a.FPLANFINISHDATE as HPlanEndDate
|
,a.FPLANSTARTDATE as HBeginDate,a.FPLANFINISHDATE as HEndDate,a.FMATERIALID as HMaterID,a.FUNITID as HUnitID,a.FSTOCKID as HWHID,isnull(a.FSTOCKLOCID,0) as HSPID,0 as HPROCID,isnull(a.FWORKSHOPID,0) as HDEPTID,a.FBOMID as HBomID,a.FLOT_TEXT as HBatchNo,'CLOUD导入' as HRemark
|
,a.FSRCBILLID as HSourceInterID,a.FSRCBILLENTRYID as HSourceEntryID,a.FSRCBILLNO as HSourceBillNo,a.FSRCBILLTYPE as HSourceBillType,a.FSALEORDERID as HSeOrderInterID,a.FSALEORDERENTRYID as HSeOrderEntryID,a.FSALEORDERNO as HSeOrderBillNo
|
,FSTOCKINORGID as HSTOCKINORGID,FINSTOCKOWNERID as HINSTOCKOWNERID,FINSTOCKOWNERTYPEID as HINSTOCKOWNERTYPEID,FREQUESTORGID as HREQUESTORGID
|
,0 as HPlanMode,a.FMTONO as HMTONo,a.FID as HERPInterID,a.FENTRYID as HERPEntryID,aa.FSTATUS as HSTATUS
|
,isnull(orm.FCUSTID,0) as HEntryCusID,aa.FREPQUASELAUXQTY as HICMOReportRelationQty,a.FAUXPROPID as HAuxPropID
|
,'' as HProdMaterCode,'' as HCusShortName,'' as HCusNeedMaterial,'' as HPlanSendGoodsDate
|
,'' as HProdMaterName,'' as HWorkRemark,'' as HImportNote,'' as HCusName
|
,0 as HInstockQty_Max,0 as HInstockQty_Min,FCOSTRATE as HCOSTRATE,FISBACKFLUSH as HISBACKFLUSH,FCHECKPRODUCT as HCHECKPRODUCT
|
--,a.FMX_CPCODE,a.FMX_KHNOTE,a.FMX_KHCLCF,a.FMX_CHDATE--江丰戎创金蝶自定义字段
|
--,a.FMX_CPNAME,a.FMX_SCNOTE,a.FMX_ZYNOTE,a.FMX_KHNAME--江丰戎创金蝶自定义字段
|
,'' as HPickLabel,a.FSTOCKINLIMITH as HPickLabelNumber,a.FSTOCKINLIMITL as HCusNumber
|
from T_PRD_MOENTRY a with(nolock)
|
inner join T_PRD_MOENTRY_A aa with(nolock) on a.FENTRYID=aa.FENTRYID
|
left join T_SAL_ORDERENTRY ore with(nolock) on a.FSALEORDERID=ore.FID and a.FSALEORDERENTRYID=ore.FEntryID
|
left join T_SAL_ORDER orm with(nolock) on ore.FID=orm.FID
|
Where a.FID={ids}
|
select a.FID HInterID ,2000 HYear,1 HPeriod,'3710' HBillType,a.FDATE HDate,a.FbillNo HBillNo,'2' HBillStatus,0 HEMPID,0 HRoutingInterID
|
,1 HPlanQty,0 HRelationQty,a.FDATE HPlanBeginDate ,getdate() HPlanEndDate ,a.FDATE HBeginDate,getdate() HEndDate,0 HMaterID,0 HUnitID,0 HBomID,'' HBatchNo
|
,0 HSourceInterID,0 HSourceEntryID,'' HSourceBillNo,'' HSourceBillType,0 HSeOrderInterID,0 HSeOrderEntryID,'' HSeOrderBillNo
|
,FPRDORGID HPRDORGID,FENTRUSTORGID HENTRUSTORGID,FOWNERID HOWNERID,FOWNERTYPEID HOWNERTYPEID
|
,0 HCusID,isnull(a.FWORKSHOPID,0) HDeptID,'CLOUD导入' HRemark,a.FCREATORID HMaker,getdate() HMakeDate,a.FAPPROVERID HChecker,a.FAPPROVEDATE HCheckDate,'' HMTONo,a.FID HERPInterID,a.FBILLTYPE HERPBillType
|
,case when a.FISREWORK=1 then '返工' else '普通' end HBillSubType
|
from T_PRD_MO a with(nolock)
|
Where a.FID={ids}
|
select a.FID AS HInterID,a.FEntryID HEntryID,isnull(a.FMATERIALID,0) HMaterID,a.FUnitID HUnitID,a.FNEEDQTY HQty,a.FNEEDQTY HQtyMust,isnull(C.FStockID,0) HWHID,'CLOUD导入' HRemark
|
,isnull(a.FMOID,0) HSourceInterID,isnull(a.FMOENTRYID,0) HSourceEntryID,isnull(a.FMOBILLNO,'') HSourceBillNo,'3710' HSourceBillType,isnull(a.FMOID,0) HICMOInterID,isnull(a.FMOENTRYID,0) HICMOEntryID,isnull(a.FMOBILLNO,'') HICMOBillNo
|
,isnull(c.FCHILDSUPPLYORGID,0) HCHILDSUPPLYORGID,isnull(c.FSUPPLYORG,0) HSUPPLYORGID,isnull(c.FENTRUSTPICKORGID,0) HENTRUSTPICKORGID,isnull(c.FSRCTRANSORGID,0) HSRCTRANSORGID,isnull(c.FGROUPBYOWNERID,0) HGROUPBYOWNERID,isnull(c.FOWNERID,0) HOWNERID,isnull(c.FOWNERTYPEID,'') HOWNERTYPEID
|
,(q.FSELPICKEDQTY - q.FSELPRCDRETURNQTY) HRelationQty,q.FSELTRANSLATEQTY HMoveStockQty,isnull(a.FAUXPROPID,0) HAuxPropID,isnull(c.FLOT_TEXT,'') HBatchNO,isnull(a.FMTONo,'') HMTONo,a.FBASENUMERATOR/a.FBASEDENOMINATOR HQtyScrap,isnull(a.FID,0) HERPInterID,a.FEntryID HERPEntryID
|
,q.FWIPQTY HBackRelationQty,a.FNumerator HNumerator,a.FDenominator HDenominator
|
,isnull(a.FBASEUNITID,0) HBASEUNITID,isnull(a.FProcessID,0) HProcessID,isnull(a.FMOENTRYSEQ,0) HICMOENTRYSEQ,isnull(a.FPROJECTNO,'') HPROJECTNO,isnull(a.FOPERID,0) HOPERID,isnull(a.FSEQ,0) HSEQ,isnull(c.FSTOCKSTATUSID,0) HSTOCKSTATUSID
|
,isnull(c.FLOT,0) HLOT,c.FOPTQUEUE HOPTQUEUE,isnull(c.FRESERVETYPE,0) HRESERVETYPE,q.FSelPickedQty HSelPickedQty,q.FSELPRCDRETURNQTY HSELPRCDRETURNQTY,isnull(tp.FNAME,0) as HProcName
|
from T_PRD_PPBOMEntry a with(nolock)
|
left join T_PRD_PPBOMENTRY_LK l with(nolock) on a.FENTRYID=l.FENTRYID
|
inner join T_PRD_PPBOMENTRY_C c with(nolock) on A.FENTRYID=c.FENTRYID
|
inner join T_PRD_PPBOMENTRY_Q q with(nolock) on A.FENTRYID=q.FENTRYID
|
left join T_ENG_PROCESS_L tp with(nolock) on A.FProcessID=tp.FID
|
left join T_ENG_PROCESS_L tl on tp.FID =tl.fid and tl.FLOCALEID=2052
|
Where a.FMOID={ids}
|
select a.FID HInterID,YEAR(a.FCREATEDate) AS HYear,MONTH(a.FCREATEDate) AS HPeriod,'3720' HBillType,'3720' HBillSubType,a.FCREATEDate HDate
|
,isnull(a.FbillNo,'') HBillNo,case when isnull(a.FAPPROVERID,0)=0 then 1 else 2 end HBillStatus,isnull(a.FMOID,0) HICMOInterID,isnull(a.FMOENTRYID,0) HICMOEntryID
|
,a.FMATERIALID HMaterID,a.FUNITID HUnitID,a.FQTY HQty,isnull(a.FWORKSHOPID,0) HDeptID,isnull(a.FCREATORID,0) HMaker,getdate() HMakeDate,isnull(a.FAPPROVERID,0) HChecker,a.FAPPROVEDATE HCheckDate
|
,isnull(a.FSALEORDERNO,'') HSeOrderBillNo,isnull(a.FSALEORDERID,0) HSeOrderInterID,isnull(a.FSALEORDERENTRYID,0) HSeOrderEntryID
|
,isnull(a.FPRDORGID,0) HPRDORGID,isnull(a.FENTRUSTORGID,0) HENTRUSTORGID,isnull(a.FPARENTOWNERID,0) HPARENTOWNERID,isnull(a.FPARENTOWNERTYPEID,'') HPARENTOWNERTYPEID,isnull(a.FREQSRC,'') HREQSRC
|
,a.FID HERPInterID,'PPBOM' HERPBillType,isnull(a.FSALEORDERENTRYSEQ,0) HSeOrderEntrySEQ,isnull(a.FMOEntrySEQ,0) HICMOEntrySEQ
|
from T_PRD_PPBOM a with(nolock)
|
Where a.FMOID={ids}
|
";
|
|
LogService.Write("2.1:" + sql);
|
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
DataTable subdt = ds.Tables[0];
|
DataTable maindt = ds.Tables[1];
|
DataTable ppbomsubdt = ds.Tables[2];
|
DataTable ppbommaindt = ds.Tables[3];
|
if (maindt.Rows.Count == 0 || subdt.Rows.Count == 0)
|
{
|
LogService.Write("生产订单变更单同步异常:" + sql);
|
continue;
|
}
|
JObject model = new JObject();//主表
|
DataRow maindr = maindt.Rows[0];
|
foreach (DataColumn column in maindt.Columns)
|
{
|
model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
|
}
|
JArray array = new JArray();//明细表
|
foreach (DataRow dr in subdt.Rows)
|
{
|
JObject fentrymodel = new JObject();
|
foreach (DataColumn column in subdt.Columns)
|
{
|
fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
|
}
|
array.Add(fentrymodel);
|
}
|
model.Add("HENTRY", array);
|
|
array = new JArray();//ppbom明细表
|
foreach (DataRow dr in ppbommaindt.Rows)
|
{
|
JObject fentrymodel = new JObject();
|
foreach (DataColumn column in ppbommaindt.Columns)
|
{
|
fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
|
}
|
array.Add(fentrymodel);
|
}
|
model.Add("HPPBOMMAINENTRY", array);
|
array = new JArray();//ppbom明细表
|
foreach (DataRow dr in ppbomsubdt.Rows)
|
{
|
JObject fentrymodel = new JObject();
|
foreach (DataColumn column in ppbomsubdt.Columns)
|
{
|
fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
|
}
|
array.Add(fentrymodel);
|
}
|
model.Add("HPPBOMSUBENTRY", array);
|
|
JObject jsonRoot = new JObject()
|
{
|
["model"] = model
|
};
|
|
string clientUrl = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "ClientUrl");//K/3 Cloud 业务站点地址
|
var client = new RestSharp.RestClient(clientUrl);
|
//var client = new RestSharp.RestClient(" http://10.11.18.195:8080/simoerapi/");
|
//新增
|
var requestPost = new RestRequest("Sc_ICMOBill/ICMOBillSaveApi", Method.POST);
|
requestPost.AddParameter("application/json", JsonConvert.SerializeObject(jsonRoot), ParameterType.RequestBody);
|
IRestResponse responsePost = client.Execute(requestPost);
|
var contentPost = responsePost.Content;
|
if (!contentPost.Contains("成功"))
|
{
|
LogService.Write("生产订单变更单同步异常,POST方式获取结果," + billObj["Id"] + "," + responsePost.ErrorMessage);
|
LogService.Write("生产订单变更单同步异常,POST," + "Sc_ICMOBill/ICMOBillSaveApi");
|
LogService.Write("生产订单变更单同步异常,JsonConvert.SerializeObject(jsonRoot)," + JsonConvert.SerializeObject(jsonRoot));
|
}
|
}
|
};
|
foreach (var item in dictionary)
|
{
|
ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value);
|
}
|
}
|
public static class ResultMessage
|
{/// <summary>
|
/// 修改提示信息
|
/// </summary>
|
/// <param name="operateResult"></param>
|
/// <param name="billno"></param>
|
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;
|
}
|
}
|
|
}
|
}
|