美文网首页
BIP出差申请生成钉钉出差单

BIP出差申请生成钉钉出差单

作者: 更真实 | 来源:发表于2025-01-31 23:44 被阅读0次

业务场景:BIP出差申请单审批通过后钉钉才可以打外勤
实现:BIP出差申请审批通过后生成钉钉出差单,在钉钉上配置存在出差单后才可以打外勤

1.新增事件订阅

2.创建API发布函数

let AbstractAPIHandler = require('AbstractAPIHandler');
class MyAPIHandler extends AbstractAPIHandler {
  execute(request) {
    const content = JSON.parse(request.params.content);
    const bill = content.data[0];
    // 判断出差申请的状态如果不是已审核不生成钉钉出差单
    if (bill.verifystate == 0 || bill.verifystate == 0) {
      return {};
    }
    /*
    * todo 出差申请单、出差申请变更单审核通过、取消审批修改钉钉出差单
    */ 


    // 获取出差申请的申请人手机号
    let mobileSql = 'select mobile from bd.staff.StaffNew where id=' + bill.pk_handlepsn;
    var mobileDatas = ObjectStore.queryByYonQL(mobileSql, 'ucf-staff-center');
    let mobile = mobileDatas[0].mobile;
    if (mobile.startsWith('+86-')) {
      mobile = mobile.substring(4);
    }

    // 获取钉钉token
    const tokenBody = { appKey: 'ding0d4y5ezha8ghiezu', appSecret: '54G2-_1gmq3WuxULCq4DkM1GrfxZJd6cB5R3JJ1gWJumKAZz6R8qqPEuPaMST8OR' };
    const header = { 'Content-Type': 'application/json;utf-8' };
    const tokenUrl = 'https://api.dingtalk.com/v1.0/oauth2/accessToken';
    const tokenStr = postman('post', tokenUrl, JSON.stringify(header), JSON.stringify(tokenBody));
    const accessToken = JSON.parse(tokenStr).accessToken;

    // 根据手机号获取钉钉userId
    const userIdUrl = `https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token=${accessToken}`;
    const userIdBody = { mobile: mobile };
    const userIdStr = postman('post', userIdUrl, JSON.stringify(header), JSON.stringify(userIdBody));
    const userData = JSON.parse(userIdStr);
    let userId;
    if (userData && userData.errcode == 0) {
      userId = userData.result.userid;
    }

    // 生成出差单,只支持出差单表体一行
    const attendanceBody = {
      topCalculateApproveDurationParam: {
        bizType: 2,
        fromTime: bill.MemoapplyBVO[0].dbegindate,
        toTime: bill.MemoapplyBVO[0].denddate,
        durationUnit: 'day',
        calculateModel: 0,
      },
      tagName: '出差',
      subType: bill.vapplyname,
      approveId: '' + bill.id,
      jumpUrl: 'https://open.dingtalk.com/',
    };
    const attendanceUrl = `https://api.dingtalk.com/v1.0/attendance/approvals/finish?userId=${userId}`;
    header['x-acs-dingtalk-access-token'] = accessToken;
    const attendanceStr = postman('post', attendanceUrl, JSON.stringify(header), JSON.stringify(attendanceBody));
    return { userIdStr };
  }
}
exports({ entryPoint: MyAPIHandler });

相关文章

  • 移动考勤解决方案

    本方案来自于帆软公司实际应用的考勤系统,我们用它替换成了钉钉! 满足内勤打卡、外勤签到、请假出差申请,个性化设置打...

  • 微应用使用

    1、登陆手机版钉钉,点击微应用 2、点击申请,申请完毕,加入微应用 3,登陆钉钉管理后台https://oa.di...

  • 阿里巴巴钉钉智慧校园研讨

    钉钉:考勤 物品领取 印刷 报修 家校沟通 学生成长档案

  • 钉钉流程如何生成报表

    财务流程你们是怎么汇总数据的? 以前搞钉钉的流程数据,基本上都是后台筛选,导出数据,手动汇总,现在有了财务套件,可...

  • 钉钉内测“工作圈”,国内职场社交迎来新变

    近日,钉钉官方在钉钉社区发布消息称:“工作圈可以申请内测了!”截至3月31日前,认真回复内测邀请帖的同学,将可能优...

  • 出差单

    Could you print out your business trip bill for me.I need...

  • 钉钉,钉钉

    由于疫情的发展,学生们的开学时间推迟,为了保证学生“停课不停学”,我开始跟着学用“钉钉这个软件”。 从接触钉钉后,...

  • 2021年Q2打工人最新有效【远程打卡】办法经验分享!

    一、背景概述 之前写了一篇直接按照虚拟机完成钉钉穿越打卡的文章,之后就出差一个月了,最近又想用穿越打卡了发现之前的...

  • python GUI作业:tkinter grid布局

    要求 使用tkinter生成如下窗口: 参考资料 讨论 钉钉群21745728 qq群144081101 5673...

  • 钉钉钉

    恶蛟抬头望, 烛火噬镜心, 身心皆沦陷, 从此完无人; 以身说试法, 白头告衰鬓, 自摧长生路, 放眼望人间! 亦...

网友评论

      本文标题:BIP出差申请生成钉钉出差单

      本文链接:https://www.haomeiwen.com/subject/vjouujtx.html