找回密码
 立即注册

QQ登录

只需一步,快速开始

guoqp

高级会员

205

主题

782

帖子

1915

积分

高级会员

积分
1915

时代开发者征文活动

guoqp
高级会员   /  发表于:2022-11-24 23:18  /   查看:1509  /  回复:4
在此我就找一个接口来展示就行了,因为不便做DEMO,大家就凑合看下截图吧


这里我展示的场景是这样的
OA中有多个流程使用到合同编号,比如收入合同、支出合同、外协合同、框架协议等,为了规范管理,我们均使用统一的接口来生成合同编号(由活字格应用进行生成),返回给OA系统中流程使用,这里我们用的OA系统是泛微

首先我们设计好数据库
image.png752590636.png
image.png317048644.png

顺便给一个生成合同号的存储过程吧

ALTER PROCEDURE [dbo].[生成合同编号]
        @申请人 nvarchar(50) = null,
        @合同类型 nvarchar(50),
        @主合同编号 nvarchar(50) = null,
        @返回合同编号 nvarchar(50) out
AS
BEGIN
        --处理主合同编号及返回合同编号的传入值
        set @主合同编号 = ISNULL(@主合同编号,'')
        set @返回合同编号 = ISNULL(@返回合同编号,'')

        declare @已使用 bit
        declare @失败 bit = 0
        declare @主合同类型 nvarchar(50)
        declare @年份 int = YEAR(getdate())
        declare @年份连接符 nvarchar(50)
        declare @流水号 nvarchar(50)
       
        --如果传入的返回合同编号不为空,则对其进行是否使用判断,如果未使用,则不重新生成新的编号
        if len(@返回合同编号) > 12
                begin
                        select @已使用 = 已使用 from 合同编号表 where 合同编号 = @返回合同编号
                        if @已使用 = 0
                                begin
                                        --返回前先更新相关信息为最新传入值,因为未使用,所以后边传入的值会覆盖先前值
                                        update 合同编号表 set 申请人 = @申请人,年份 = @年份,合同类型 = @合同类型,主合同编号 = @主合同编号 where 合同编号 = @返回合同编号
                                        return
                                end
                end
       
        --初始化年份连接符,一般格式为(2022)
        set @年份连接符 = '(' + cast(@年份 as nvarchar(50)) + ')'

        --生成3位数流水号,后续如果只使用2位,直接使用right取右边2位即可
        select @流水号 = Replace(str(cast(isnull(max(流水号),'000') as int) + 1,3),' ',0) from 合同编号表 where 合同类型 = @合同类型 and (主合同编号 = @主合同编号) and 年份 = @年份
       
        --对生成的流水号排除4
        if right(cast(@流水号 as nvarchar(50)),1) = '4'
                set @流水号 = Replace(str(cast(@流水号 as int) + 1,3),' ',0)

        --@合同类型:SR:收入合同;WX:居间、设计外协合同;CG:设备材料采购合同;JA:工程分包合同;QT:其它支出合同;KJ:框架性协议
       
        --收入类型合同,不存在不成功
        if @合同类型 = 'SR'
                begin
                        if @主合同编号 = ''       
                                --没有主合同时直接编号
                                set @返回合同编号 = '晨光设' + @年份连接符 + @流水号 + '号'
                        else
                                --有主合同时在主合同编号后加上2位流水号
                                set @返回合同编号 = @主合同编号 + '-' + RIGHT(@流水号,2)
                end
       
        --设备材料采购、工程分包、居间、设计外协合同,如果主合同为空则失败,否则成功
        if @合同类型 = 'CG' or @合同类型 = 'JA' or @合同类型 = 'WX'
                begin
                        if @主合同编号 = ''
                                begin
                                        set @失败 = 1
                                        set @返回合同编号 = ''
                                end
                        else
                                begin
                                        select @主合同类型 = 合同类型 from 合同编号表 where 合同编号 = @主合同编号
                                        --主合同类型为收入合同,则在主合同后加上-CG之类的合同类型标识,后追加流水号,如果主合同类型为其它类型,则直接在主合同号后边追加2位流水号
                                        if @主合同类型 = 'SR'
                                                set @返回合同编号 = @主合同编号 + '-' + @合同类型 + '-' + @流水号
                                        else
                                                set @返回合同编号 = @主合同编号 + '-' + right(@流水号,2)
                                end
                end
       
        --其它支出类型合同,不存在不成功
        if @合同类型 = 'QT'
                begin
                        if @主合同编号 = ''       
                                set @返回合同编号 = '晨光设[其它]' + @年份连接符 + @流水号 + '号'
                        else
                                set @返回合同编号 = @主合同编号 + '-' + right(@流水号,2)
                end

        --框架性协议,不存在不成功
        if @合同类型 = 'KJ'
                begin
                        if @主合同编号 = ''       
                                set @返回合同编号 = '晨光设[合作]' + @年份连接符 + @流水号 + '号'
                        else
                                set @返回合同编号 = @主合同编号 + '-' + right(@流水号,2)
                end

        --------------------------------将合同号写入到表----------------------------------------------
        if @失败 = 0
                insert into 合同编号表 (申请人, 年份, 合同类型, 主合同编号, 流水号, 合同编号, 已使用)
                                                values(@申请人,@年份,@合同类型,@主合同编号,@流水号,@返回合同编号,0)
END


数据库这块就准备差不多了
然后在活字格中创建一个服务端命令
image.png148644713.png image.png702649535.png image.png793588866.png image.png600380553.png image.png204960631.png image.png359164733.png

服务端命令就这些了,注意我使用的“路飞”大神的收费插件“返回结果命令”实现的跨域。

接下来展示OA端如何调用

$.ajax({
      type:"post",
      url:"http://10.20.16.9/pm/ServerCommand/GenerateContractNo",
      data:{
        "申请人":sqr,
        "合同类型":"SR",
        "主合同编号":zhtbh,
        "原合同编号":yhtbh
      },
      success:function(result){
        console.log(result.合同编号);
        WfForm.changeFieldValue("field15113",{value:result.合同编号});
      }
    });

就一个AJAX语句就拿到自动生成的合同编号并填入到相应表单中,简直不要太简单。


这个方案中最为关键的就是如何解决跨域问题,以往活字格是没有这个功能的,在今年8.0.12以后陆续出现2位大神的跨域功能,一是“路飞”大神率先推出本功能的收费插件,二是“豪豪”大神也针对跨域推出了收费插件,大家有需要可以去购买使用。

评分

参与人数 1金币 +1000 收起 理由
Nancy.Yin + 1000 赞一个!

查看全部评分

4 个回复

正序浏览
guoqp
高级会员   /  发表于:2022-11-25 09:31:13
5#
renho 发表于 2022-11-25 09:17
插件也不贵,就是交个朋友,欢迎大家选购
https://marketplace.grapecity.com.cn/ApplicationDetails?prod ...

是的,大家确实应该需要养成消费习惯,培养活字格良好生态
回复 使用道具 举报
renho活字格认证
银牌会员   /  发表于:2022-11-25 09:17:27
地板
插件也不贵,就是交个朋友,欢迎大家选购
https://marketplace.grapecity.co ... tabName=Tabs_detail
回复 使用道具 举报
guoqp
高级会员   /  发表于:2022-11-25 08:46:29
板凳
renho 发表于 2022-11-25 08:35
我那个跨域只是附带的,主要是解决任意值返回的问题。

好用
回复 使用道具 举报
renho活字格认证
银牌会员   /  发表于:2022-11-25 08:35:44
沙发
     我那个跨域只是附带的,主要是解决任意值返回的问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部