热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

执行计划_K3/cloud执行计划插件示例

本文由编程笔记#小编为大家整理,主要介绍了K3/cloud执行计划插件示例相关的知识,希望对你有一定的参考价值。publicclassAutoCheckInventory
本文由编程笔记#小编为大家整理,主要介绍了K3/cloud执行计划插件示例相关的知识,希望对你有一定的参考价值。


public class AutoCheckInventory : IScheduleService

{

        ///


        /// 实际运行的Run 方法
        ///

        ///
        ///
        public void Run(Context ctx, Schedule schedule)
        {
             //string clientPath = ConfigurationManager.AppSettings["clienpath"].ToString().Trim();
            //ApiClient client;
            //库存小于预警值发送消息
            //GetPositionInventory(ctx);
            CustomerFeeNote(ctx);
        }

public void CustomerFeeNote(Context ctx)
        {
            //获取客户缴费通知书的数据(提前10天)
            string Sql = "";
            Sql = "select a.FBILLNO,a.F_DEV_SINER,a.F_DEV_SIGNDATE,a.F_DEV_CUSTOMER,a.F_DEV_ADDR,a.F_DEV_CONTACTS,a.F_DEV_PHONE," +
            "a.F_DEV_HOUSE,a.F_DEV_STARTDATE,a.F_DEV_STOPDATE,a.F_DEV_LEASE,a.F_DEV_YEARRENT,a.F_DEV_MONTHRENT,a.F_DEV_TOTALRENT," +
            "a.F_DEV_PURPOSE,a.F_DEV_PROPERTYFEE,a.F_DEV_DEPOSIT,a.F_DEV_HOUSEAREA,a.F_DEV_CONTRACT," +
            "b.F_DEV_RENTSTARTDATE,b.F_DEV_RENTSTOPDATE,b.F_DEV_RENTPAYABLE,b.F_DEV_PAYDATE,b.F_DEV_EXPLAIN,b.FEntryID   " +
            "from Dev_t_Cust_Entry105108 a left join Dev_t_Cust_Entry105110 b on a.FID = b.FID   "+
            "where DATEDIFF(DAY,GETDATE(),b.F_DEV_PAYDATE) = 10 and a.F_DEV_CONTRACTCANCEL <> ‘是‘  ";
            DataSet ds = new DataSet();
            ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(ctx, Sql);
            ds.Tables[0].TableName = "RentInfo";
            //string sqlhouse = "";
            //sqlhouse =
            //自动生成客户缴费通知书
            Customer_Payment_Notice(ds, ctx);
            //发送消息至签订人消息列表
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                SendMessage(ctx, "客户缴费通知书生成提醒", "客户缴费通知书:" + dr["FBILLNO"].ToString()+"已经生成!", DateTime.Now,Convert.ToInt64(dr["F_DEV_SINER"].ToString()));
                
            }
            //获取客户缴费通知书的数据(提前5天)发送消息
            string Sql1 = "";
            Sql1 = "select a.FBILLNO,a.F_DEV_SINER,a.F_DEV_SIGNDATE,a.F_DEV_CUSTOMER,a.F_DEV_ADDR,a.F_DEV_CONTACTS,a.F_DEV_PHONE," +
            "a.F_DEV_HOUSE,a.F_DEV_STARTDATE,a.F_DEV_STOPDATE,a.F_DEV_LEASE,a.F_DEV_YEARRENT,a.F_DEV_MONTHRENT,a.F_DEV_TOTALRENT," +
            "a.F_DEV_PURPOSE,a.F_DEV_PROPERTYFEE,a.F_DEV_DEPOSIT," +
            "b.F_DEV_RENTSTARTDATE,b.F_DEV_RENTSTOPDATE,b.F_DEV_RENTPAYABLE,b.F_DEV_PAYDATE,b.F_DEV_EXPLAIN,b.FEntryID   " +
            "from Dev_t_Cust_Entry105108 a left join Dev_t_Cust_Entry105110 b on a.FID = b.FID   " +
            "where DATEDIFF(DAY,GETDATE(),b.F_DEV_PAYDATE) = 5 and a.F_DEV_CONTRACTCANCEL <> ‘是‘  ";
            DataSet ds1 = new DataSet();
            ds1 = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(ctx, Sql1);
            foreach (DataRow dr1 in ds1.Tables[0].Rows)
            {
                SendMessage(ctx, "客户缴费通知书生成提醒", "客户缴费通知书:" + dr1["FBILLNO"].ToString()+"已经生成,请确认!", DateTime.Now, Convert.ToInt64(dr1["F_DEV_SINER"].ToString()));
            }
        }

public void Customer_Payment_Notice(DataSet ds, Context ctx)
        {
            DataSet dstemp = new DataSet();
            DataTable dtTemp = new DataTable();
            string result = "";
            //自动生成客户缴费通知书
            if (ds != null && ds.Tables["RentInfo"].Rows.Count > 0)
            {
                for (int i = 0; i                 {
                    try
                    {
                        //获取房源数据
                        string sqlhouse = "select b.fentryid,b.F_DEV_HOUSEBASE from Dev_t_Cust_Entry105108 a left join Dev_t_Cust_Entry100007 b on a.fid = b.fid where a.fbillno = ‘" + ds.Tables["RentInfo"].Rows[i]["FBILLNO"].ToString() + "‘";
                        DataSet dshouse = new DataSet();
                        dshouse = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(ctx, sqlhouse);
                        dshouse.Tables[0].TableName = "HouseInfo";
                        // 开始构建Web API参数对象
                        // 参数根对象:包含Creator、NeedUpDateFields、Model这三个子参数
                        // using Newtonsoft.Json.Linq;  // (需引用Newtonsoft.Json.dll)
                        JObject jsOnRoot= new JObject();
                        // Creator: 创建用户
                        jsonRoot.Add("CREATOR", "administrator");
                        // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新
                        jsonRoot.Add("NEEDUPDATEFIELDS", new JArray(""));
                        jsonRoot.Add("NEEDRETURNFIELDS", new JArray(""));
                        jsonRoot.Add("ISDELETEENTRY", "TRUE");
                        jsonRoot.Add("SUBSYSTEMID", "");
                        // Model: 单据详细数据参数
                        JObject model = new JObject();
                        jsonRoot.Add("Model", model);
                        // 开始设置单据字段值
                        // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段
                        // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来
                        // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0
                        model.Add("FID", "0");
                        model.Add("FDATE", DateTime.Now.ToString("yyyy-MM-dd"));
                        // 采购组织:必须填写,是基础资料字段
                        JObject basedata = new JObject();
                        //basedata.Add("FNumber", "100");
                        //model.Add("FSTOCKORGID", basedata);
                        // 单据类型:必须填写,是基础资料字段
                        // 基础资料类型字段填值,必须再构建一个JObject对象,设置基础资料编码
                        // 单据编号:可以忽略,由系统根据编码规则自动生成
                        
                        //签订人
                        if (ds.Tables["RentInfo"].Rows[i]["F_DEV_SINER"].ToString() != "" && ds.Tables["RentInfo"].Rows[i]["F_DEV_SINER"].ToString() != "0" && ds.Tables["RentInfo"].Rows[i]["F_DEV_SINER"].ToString() != null)
                        {
                            dtTemp = GetSignerInfor(ds.Tables["RentInfo"].Rows[i]["F_DEV_SINER"].ToString(), ctx);
                            basedata = new JObject();
                            basedata.Add("FName", dtTemp.Rows[0]["FNAME"].ToString());
                            model.Add("F_DEV_BASE2", basedata);
                        }
                        
                        //签订日期
                        model.Add("F_DEV_DATE", ds.Tables["RentInfo"].Rows[i]["F_DEV_SIGNDATE"].ToString());
                        //客源
                        if (ds.Tables["RentInfo"].Rows[i]["F_DEV_CUSTOMER"].ToString() != "" && ds.Tables["RentInfo"].Rows[i]["F_DEV_CUSTOMER"].ToString() != "0" && ds.Tables["RentInfo"].Rows[i]["F_DEV_CUSTOMER"].ToString() != null)
                        {
                            dtTemp = GetCustomerInfor(ds.Tables["RentInfo"].Rows[i]["F_DEV_CUSTOMER"].ToString(), ctx);
                            basedata = new JObject();
                            basedata.Add("FNumber", dtTemp.Rows[0]["FNUMBER"].ToString());
                            model.Add("F_DEV_BASE", basedata);
                        }
                        
                        //联系地址
                        model.Add("F_DEV_TEXT7", ds.Tables["RentInfo"].Rows[i]["F_DEV_ADDR"].ToString());
                        //联系人
                        model.Add("F_DEV_TEXT71", ds.Tables["RentInfo"].Rows[i]["F_DEV_CONTACTS"].ToString());
                        //联系电话
                        model.Add("F_DEV_TEXT711", ds.Tables["RentInfo"].Rows[i]["F_DEV_PHONE"].ToString());
                        //房源
                        //if (ds.Tables[0].Rows[i]["F_DEV_HOUSE"].ToString() != "" && ds.Tables[0].Rows[i]["F_DEV_HOUSE"].ToString() != "0" && ds.Tables[0].Rows[i]["F_DEV_HOUSE"].ToString() != null)
                        //{
                        //    dtTemp = GetHouseInfor(ds.Tables[0].Rows[i]["F_DEV_HOUSE"].ToString(), ctx);
                        //    basedata = new JObject();
                        //    basedata.Add("FNumber", dtTemp.Rows[0]["FNUMBER"].ToString());
                        //    model.Add("F_DEV_BASE1", basedata);
                        //}
                        //合同号
                        model.Add("F_DEV_CONTRACTNO", ds.Tables["RentInfo"].Rows[i]["F_DEV_CONTRACT"].ToString());
                        //总面积
                        model.Add("F_DEV_HOUSEAREA", ds.Tables["RentInfo"].Rows[i]["F_DEV_HOUSEAREA"].ToString());
                        // 开始构建单据体参数:集合参数JArray
                        JArray entryRows = new JArray();
                        // 把单据体行集合,添加到model中,以单据体Key为标识
                        string entityKey = "FEntity1";
                        model.Add(entityKey, entryRows);
                        // 通过循环创建单据体行:此处只创建一行,根据具体情况修改
                        for (int j = 0; j <1; j++)
                        {
                            // 添加新行,把新行加入到单据体行集合
                            JObject entryRow = new JObject();
                            entryRows.Add(entryRow);
                            // 给新行,设置关键字段值
                            // 单据体主键:必须填写,系统据此判断是新增还是修改行
                            entryRow.Add("FEntryID", "0");
                            //开始日期
                            entryRow.Add("F_DEV_DATE9", ds.Tables["RentInfo"].Rows[i]["F_DEV_RENTSTARTDATE"].ToString());
                            //结束日期
                            entryRow.Add("F_DEV_DATE10", ds.Tables["RentInfo"].Rows[i]["F_DEV_RENTSTOPDATE"].ToString());
                            //说明
                            entryRow.Add("F_DEV_TEXT2", ds.Tables["RentInfo"].Rows[i]["F_DEV_EXPLAIN"].ToString());
                            //应付租金
                            entryRow.Add("F_DEV_DECIMAL9", ds.Tables["RentInfo"].Rows[i]["F_DEV_RENTPAYABLE"].ToString());
                            //应付日期
                            entryRow.Add("F_DEV_DATE11", ds.Tables["RentInfo"].Rows[i]["F_DEV_PAYDATE"].ToString());
                            // 创建Link行集合
                            JArray linkRows = new JArray();
                            // 添加到单据体行中:Link子单据体标识 = 关联主单据体标识(POOrderEntry) + _Link
                            string linkEntityKey = string.Format("{0}_Link", entityKey);
                            entryRow.Add(linkEntityKey, linkRows);
                            // 创建Link行:
                            // 如有多条源单行,则分别创建Link行记录各条源单行信息
                            JObject linkRow = new JObject();
                            linkRows.Add(linkRow);
                            // 填写Link行上的字段值
                            // 特别说明:Link子单据体上字段的标识,必须在前面增加子单据体标识
                            // FFlowId : 业务流程图,可选
                            string fldFlowIdKey = string.Format("{0}_FFlowId", linkEntityKey);
                            linkRow.Add(fldFlowIdKey, "");
                            // FFlowLineId :业务流程图路线,可选
                            string fldFlowLineIdKey = string.Format("{0}_FFlowLineId", linkEntityKey);
                            linkRow.Add(fldFlowLineIdKey, "");
                            // FRuleId :两单之间的转换规则内码,必填
                            // 可以通过如下SQL语句到数据库获取
                            // select FID, *
                            //   from T_META_CONVERTRULE
                            //  where FSOURCEFORMID = ‘Dev_RentContract‘
                            //    and FTARGETFORMID = ‘Dev_RentPaymentNotice‘
                            //    and FDEVTYPE = 0;
                            string fldRuleIdKey = string.Format("{0}_FRuleId", linkEntityKey);
                            linkRow.Add(fldRuleIdKey, "16e9262b-d238-4c7b-b487-3154e44a74e9");
                            // FSTableName :必填,源单单据体表格编码,通过如下语句获取:
                            // SELECT FTableNumber
                            //   FROM t_bf_tabledefine
                            //  WHERE fformid = ‘PUR_Requisition‘
                            //    AND fentitykey = ‘FEntity‘
                            // 如果如上语句未返回结果,请到K/3 Cloud中,手工选单一次,后台会自动产生表格编码
                            string fldSTableNameKey = string.Format("{0}_FSTableName", linkEntityKey);
                            linkRow.Add(fldSTableNameKey, "Dev_t_Cust_Entry105109");
                            //通过收料单号获取收料单内码和单据体分录内码
                            //string BillNo = ds.Tables[0].Rows[i]["F_DEV_SOURCEBILLNO"].ToString();
                            //string MatId = ds.Tables["InStockMatInfo"].Rows[i]["F_DEV_MATID"].ToString();
                            //string StockId = ds.Tables["InStockMatInfo"].Rows[i]["F_Dev_StockID"].ToString();
                            //string Position = ds.Tables["InStockMatInfo"].Rows[i]["F_Dev_Position"].ToString();
                            //dtTemp = GetData.GetReceiveInfo(BillNo, MatId, StockId, Position);
                            //// FSBillId :必填,源单单据内码
                            //string fldSBillIdKey = string.Format("{0}_FSBillId", linkEntityKey);
                            //linkRow.Add(fldSBillIdKey, dtTemp.Rows[0]["FID"].ToString());
                            // FSId : 必填,源单单据体行内码。如果源单主关联实体是单据头,则此属性也填写源单单据内码
                            string fldSIdKey = string.Format("{0}_FSId", linkEntityKey);
                            linkRow.Add(fldSIdKey, ds.Tables["RentInfo"].Rows[i]["FEntryID"].ToString());
                            //// FEntity_Link_FBaseQty :数量实际携带值,下推后,用户可以手工修改数量值;此字段存储最终的数量值
                            //// 可选字段:
                            //// 在保存时,系统会自动把单据体上数量值,更新到此字段;因此,这个字段可以不用填写(即使填写了,也会被覆盖)
                            //string fldBaseQtyKey = string.Format("{0}_FBaseUnitQty", linkEntityKey);
                            //linkRow.Add(fldBaseQtyKey, 10);
                        }
                        //生成房源信息
                        entryRows = new JArray();
                        // 把单据体行集合,添加到model中,以单据体Key为标识
                        entityKey = "F_Dev_Entity";
                        model.Add(entityKey, entryRows);
                        // 通过循环创建单据体行:此处只创建一行,根据具体情况修改
                        string F_DEV_HOUSEBASE;
                        for (int k = 0; k                         {
                            // 添加新行,把新行加入到单据体行集合
                            JObject entryRow = new JObject();
                            entryRows.Add(entryRow);
                            // 给新行,设置关键字段值
                            // 单据体主键:必须填写,系统据此判断是新增还是修改行
                            entryRow.Add("FEntryID", "0");
                            //房源
                            basedata = new JObject();
                            //basedata.Add("FNumber", "GTA0K1T");
                            F_DEV_HOUSEBASE = dshouse.Tables[0].Rows[k]["F_DEV_HOUSEBASE"].ToString();
                            dtTemp = GetHouseInfor(F_DEV_HOUSEBASE, ctx);
                            basedata.Add("FNumber", dtTemp.Rows[0]["FNUMBER"].ToString());
                            entryRow.Add("F_DEV_HOUSE", basedata);
                        }
                        // 调用Web API接口服务,保存客户缴费通知书
                        result = Save("Dev_RentPaymentNotice", jsonRoot.ToString());
                        //result = client.Execute(
                        //    "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save",
                        //    new object[] { "Dev_STK_InStock", jsonRoot.ToString() });
                        try
                        {
                            JObject jo = (JObject)JsonConvert.DeserializeObject(result);
                            string number = jo["Result"]["Number"].ToString();
                            if (number != "")
                            {
                                string autrjson = "{"CreateOrgId":0,"Numbers":["" + number + ""]}";
                                result = Audit("Dev_RentPaymentNotice", autrjson);
                            }
                        }
                        catch (Exception exp)
                        {
                            StringBuilder sb = new StringBuilder();
                            sb.AppendLine("程序运行遇到了未知的错误:");
                            sb.Append("错误提示:").AppendLine(exp.Message);
                            sb.Append("错误堆栈:").AppendLine(exp.StackTrace);
                            throw new Exception(sb.ToString() + result.ToString());
                        }
                    }
                    catch (Exception exp)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine("程序运行遇到了未知的错误:");
                        sb.Append("错误提示:").AppendLine(exp.Message);
                        sb.Append("错误堆栈:").AppendLine(exp.StackTrace);
                        throw new Exception(sb.ToString() + result.ToString());
                    }
                }
            }
        }

}

插件注册截图:

红框部分为:

K3.DEV.XZGT.PlanedTask.AutoCheckInventory,K3.DEV.XZGT.PlanedTask

技术分享图片

 


















































































































































































































































































































推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本视频教程将带你快速了解 Android 开发的基础知识,并详细讲解如何在 Android 应用中使用 SQLite 数据库进行数据存储和管理。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本文介绍了如何使用 Spark SQL 生成基于起始与终止时间的时序数据表。通过 `SELECT DISTINCT goods_id, get_dt_date(start_time, i) as new_dt` 语句,根据不同的时间间隔 `i` 动态填充日期,从而构建出完整的时序数据记录。该方法能够高效地处理大规模数据集,并确保生成的数据表准确反映商品在不同时间段的状态变化。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
author-avatar
zg18156zg你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有