chenhaozhe
2025-10-15 494200d6b31e173216ff3abf3028105e13652fda
添加 生产入库单-审核同步 插件
1个文件已添加
2个文件已修改
159 ■■■■■ 已修改文件
zymes/OperationService/zymes_RealessPrdInStock.cs 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessPrdReceive.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/zymes_Project.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessPrdInStock.cs
New file
@@ -0,0 +1,156 @@
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_RealessPrdInStock : 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 sql = $"exec zymes_RealessPurPoorder {billObj["Id"]} ";
                var id = billObj["Id"].ToString();
                string sql = string.Empty;
                sql = $@"
                /*dialect*/
                SELECT
                a.FID HInterID,a.FENTRYID HEntryID, a.FMATERIALID HMaterID,a.FUNITID HUnitID,
                0 HQtyMust, a.FREALQTY HQty, ISNULL(a.FPrice, 0) HPrice, 0 HMoney, a.FSTOCKID HWHID,
                0 HSPID, 'CLOUD导入' HRemark, a.FSRCINTERID HSourceInterID, a.FSRCENTRYID HSourceEntryID,
                a.FSRCBILLNO HSourceBillNo, a.FSRCBILLTYPE HSourceBillType,0 HPOOrderInterID,0 HPOOrderEntryID,
                '' HPOOrderBillNo,0 HSecUnitID,0 HSeOrderInterID, 0 HSeOrderEntryID, '' HSeOrderBillNo, 0 HRelationQty,
                0 HSecUnitRate, a.FAUXPROPID HPropertyID
                from T_PRD_INSTOCKENTRY  a with(nolock)
                Where a.FID={id}
                select a.FID as HInterID,1202 as HBillType,1202 as HBillSubType,
                a.FBILLNO as HBillNo,case when a.FAPPROVERID=0 then 1 else 2 end HBillStatus,
                a.FDATE as HDate,YEAR(a.FDATE) as HYear,MONTH(a.FDATE) as HPeriod,'CLOUD导入' as HRemark,
                a.FCREATORID as HMaker,a.FCREATEDATE as HMakeDate,0 as HSupID,a.FSTOCKERID as HWHID,  -- 补充表别名a.,与其他字段保持一致
                a.FSTOCKERID as HEmpID,0 as HManagerID,0 as HSecManagerID,a.FSTOCKERID as HKeeperID,
                'CLOUD导入' as HExplanation,a.FBILLNO as HInnerBillNo,a.FCurrID as HCurID,0 as HExRate,
                a.FApproverID as HChecker, a.FApproveDate as HCheckDate,
                (select top 1 b.FWORKSHOPID
                        from T_PRD_INSTOCKEntry b with(nolock)
                        where b.FID = a.FID
                        order by b.FID) as HDeptID
                from T_PRD_INSTOCK a with(nolock)
                inner join T_ORG_Organizations o with (nolock) on a.FSTOCKORGID = o.FORGID
                Where a.FID={id}
                ";
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable maindt = ds.Tables[1];
                DataTable subdt = ds.Tables[0];
                if (maindt.Rows.Count == 0 || subdt.Rows.Count == 0)
                {
                    LogService.Write("生产入库单同步异常:" + sql);
                    continue;
                }
                //获取创建生产领料单的使用组织
                DataTable dataTable = LogService.Get_DisPlayOrg(Context, maindt.Rows[0]["HOrganNumber"].ToString());
                if (dataTable.Rows.Count == 0)
                    continue;
                if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0")
                    continue;
                string http = dataTable.Rows[0]["F_RCZU_MesIp"].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);
                }
                JObject model = new JObject();//主表
                DataRow maindr = maindt.Rows[0];
                foreach (DataColumn column in maindt.Columns)
                {
                    model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
                }
                model.Add("HENTRY", array);
                JObject jsonRoot = new JObject()
                {
                    ["model"] = model
                };
                var client = new RestSharp.RestClient(http);
                //新增
                var requestPost = new RestRequest("Kf_ProductInBill/Kf_ProductInBillSaveApi", 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," + "Kf_ProductInBill/Kf_ProductInBillSaveApi");
                    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;
            }
        }
    }
}
zymes/OperationService/zymes_RealessPrdReceive.cs
@@ -67,7 +67,7 @@
                , a.FDATE as HDate, YEAR(a.FDATE) as HYear, MONTH(a.FDATE) as HPeriod, 'CLOUD导入' as HRemark
                , a.FCREATORID as HMaker, a.FCREATEDATE as HMakeDate, 0 as HSupID, FSTOCKERID as HWHID, 0 as HSCWHID
                , a.FPICKERID as HEmpID, 0 as HManagerID, a.FPICKERID as HSecManagerID, a.FSTOCKERID as HKeeperID
                , 0 as HDeptID, 'CLOUD导入' as HExplanation, a.FBILLNO as HInnerBillNo, 1 as HRedBlueFlag
                , 'CLOUD导入' as HExplanation, a.FBILLNO as HInnerBillNo, 0 as HRedBlueFlag
                ,o.FNUMBER as HOrganNumber,a.FAPPROVERID as HChecker,a.FAPPROVEDATE as HCheckDate,
                (select top 1 b.FWORKSHOPID 
                     from T_PRD_PICKMTRLDATA b with(nolock) 
zymes/zymes_Project.csproj
@@ -129,6 +129,7 @@
    <Compile Include="OperationService\zymes_MOCHANGE.cs" />
    <Compile Include="OperationService\zymes_RealessCurrency.cs" />
    <Compile Include="OperationService\zymes_RealessOperator.cs" />
    <Compile Include="OperationService\zymes_RealessPrdInStock.cs" />
    <Compile Include="OperationService\zymes_RealessPrdReceive.cs" />
    <Compile Include="OperationService\zymes_RealessRateType.cs" />
    <Compile Include="OperationService\zymes_RealessDepartment.cs" />