Commit 72608629 by zhaoxiqing

gsb

parent 206d65a0
......@@ -5,14 +5,121 @@ const moment = require("moment");
class DKcontractApi {
constructor() {
this.dkcompanySve = system.getObject("service.dkcompanySve");
this.idcardClient = system.getObject("util.idcardClient");
this.esettleSve = system.getObject("service.esettleSve");
this.dkcontractSve = system.getObject("service.dkcontractSve");
this.etemplatebusiSve = system.getObject("service.etemplatebusiSve");
}
async syncSignedFile() {
this.dkcontractSve.downloadCompleteUrl();
return "start success"
}
async autoSign(pobj) {
// 处理参数
var param = {
ecid: this.trim(pobj.ecid),
appId: this.trim(pobj.appId),
idName: this.trim(pobj.idName),
mobile: this.trim(pobj.mobile),
idNo: this.trim(pobj.idNo),
bankno: this.trim(pobj.bankno),
nonceStr: this.trim(pobj.nonceStr),
userId : this.trim(pobj.userId),
sign: this.trim(pobj.sign)
};
if (!param.ecid) {
return this.returnjson(-1, "请传入薪必果提供的ecid")
}
if (!param.appId) {
return this.returnjson(-1, "请传入薪必果提供的appId")
}
if (!param.userId) {
return this.returnjson(-1, "请提供该用户ID")
}
if (!param.idName) {
return this.returnjson(-1, "请提供该用户姓名")
}
if (!param.idNo) {
return this.returnjson(-1, "请提供该用户身份证号")
}
if (!await this.idcardClient.checkIDCard(param.idNo)) {
return this.returnjson(-1, "身份证格式不正确");
}
let busi = await this.etemplatebusiSve.busiByTemplate(param.ecid);
let num = await this.esettleSve.isValidAge(busi[0].busi_id);
if (num) {
let card = await this.idcardClient.cardInfo(param.idNo);
let age = card.age || 0;
if (!age) {
return this.returnjson(-1, "身份证号格式错误, 只支持18位身份证号码");
}
if (card.sex == 'male') {
if (age < 18 || age > 60) {
return this.returnjson(-1, "签约失败,男限制18-60岁之间")
}
} else {
if (age < 18 || age > 55) {
return this.returnjson(-1, "签约失败,女限制18-55岁之间")
}
}
}
if (!param.bankno) {
return this.returnjson(-1, "请提供该用户银行卡号")
}
if (!param.nonceStr) {
return this.returnjson(-1, "请提供随机码")
}
if (!busi[0] ||!busi[0].app_id || !busi[0].key || busi[0].app_id != param.appId) {
return this.returnjson(1001003, "配置信息错误,请联系薪必果人员进行配置");
}
// 签名
var signArr = [];
var keys = Object.keys(param).sort();
for (var i = 0; i < keys.length; i++) {
var k = keys[i];
var v = param[k];
if (!k || !v || k == 'sign') {
continue;
}
signArr.push(k + "=" + v);
}
var signStr = signArr.join("&") + "&key=" + busi[0].key;
var sign = md5(signStr).toUpperCase();
console.log(signStr, sign);
if (param.sign != sign) {
return this.returnjson(1001001, "签名错误");
}
try {
var result = await this.dkcontractSve.autoSign(param);
return result;
} catch (error) {
console.log(error);
}
}
returnjson(code, msg, data) {
return {
code: code,
msg: msg,
data: data || null
}
}
trim(o) {
if (!o) {
return "";
}
return o.toString().trim();
}
}
module.exports = DKcontractApi;
\ No newline at end of file
module.exports = DKcontractApi;
......@@ -54,7 +54,7 @@ class YZContractApi {
}
if (!await this.idcardClient.checkIDCard(param.idNo)) {
return this.returnjson(-1, "代理人身份证格式不正确");
}
}
let card = await this.idcardClient.cardInfo(param.idNo);
let age = card.age || 0;
if (!age) {
......@@ -105,7 +105,6 @@ class YZContractApi {
}
async merchantSigns(pobj) {
// 处理参数
var param = {
......@@ -121,18 +120,18 @@ class YZContractApi {
nonceStr: this.trim(pobj.nonceStr),//随机码
sign: this.trim(pobj.sign)
};
console.log("有赞商户签约接口===========", param);
if (!param.ecid) {
return this.returnjson(-1, "请传入薪必果提供的ecid")
return this.returnjson(-1, "请传入薪必果提供的ecid");
}
if (!param.appId) {
return this.returnjson(-1, "请传入薪必果提供的appId")
return this.returnjson(-1, "请传入薪必果提供的appId");
}
if (!param.idName) {
return this.returnjson(-1, "请提供代理人姓名")
return this.returnjson(-1, "请提供代理人姓名");
}
if (!param.idNo) {
return this.returnjson(-1, "请提供代理人身份证号")
return this.returnjson(-1, "请提供代理人身份证号");
}
if (!await this.idcardClient.checkIDCard(param.idNo)) {
return this.returnjson(-1, "代理人身份证格式不正确");
......@@ -144,16 +143,16 @@ class YZContractApi {
}
if (card.sex == 'male') {
if (age < 18 || age > 60) {
return this.returnjson(-1, "签约失败,男性代理人限制18-60岁之间")
return this.returnjson(-1, "签约失败,男性代理人限制18-60岁之间");
}
} else {
if (age < 18 || age > 55) {
return this.returnjson(-1, "签约失败,女性代理人限制18-55岁之间")
return this.returnjson(-1, "签约失败,女性代理人限制18-55岁之间");
}
}
if (!param.nonceStr) {
return this.returnjson(-1, "请提供随机码")
return this.returnjson(-1, "请提供随机码");
}
var enttemplate = await this.enttemplateSve.findById(param.ecid);
......@@ -179,7 +178,7 @@ class YZContractApi {
return this.returnjson(1001001, "签名错误");
}
try {
var result = await this.entcontractSve.yzMerchantAutoSigns(param);
var result = await this.entcontractSve.yzMerchantAutoSigns(param,enttemplate);
return result;
} catch (error) {
console.log(error);
......@@ -217,13 +216,13 @@ class YZContractApi {
let busiIds = await this.etemplatebusiSve.busiIdsByTemplateId(param.ecid);
let num = await this.esettleSve.isValidAge(busiIds);
if(num) {
if (num) {
let card = await this.idcardClient.cardInfo(param.idNo);
let age = card.age || 0;
if(!age) {
if (!age) {
return this.returnjson(-1, "身份证号格式错误, 只支持18位身份证号码");
}
if(card.sex == 'male') {
if (card.sex == 'male') {
if (age < 18 || age > 60) {
return this.returnjson(-1, "签约失败,男限制18-60岁之间")
}
......@@ -353,7 +352,7 @@ class YZContractApi {
if (!obj.appId) {
return this.returnjson(-1, "请传入appId")
}
var enttemplate = await this.enttemplateSve.findOne({appid : obj.appId});
var enttemplate = await this.enttemplateSve.findOne({appid: obj.appId});
if (!enttemplate || !enttemplate.key) {
return this.returnjson(1001003, "配置信息错误,请联系薪必果人员进行配置");
......@@ -367,7 +366,7 @@ class YZContractApi {
signArr.push("startId=" + startId);
signArr.push("key=" + enttemplate.key);
var sign = md5(signArr.join("&")).toUpperCase();
console.log(signArr.join("&"),sign);
console.log(signArr.join("&"), sign);
if (sign != obj.sign) {
return {
code: 1001001,
......
......@@ -445,4 +445,4 @@ class DKSignCtl {
}
}
}
module.exports = DKSignCtl;
\ No newline at end of file
module.exports = DKSignCtl;
const Dao = require("../dao.base");
class DktemplatebusiDao extends Dao {
constructor() {
super(Dao.getModelName(DktemplatebusiDao));
}
}
module.exports = DktemplatebusiDao;
module.exports = (db, DataTypes) => {
return db.define("dktemplatebusi", {
template_type:DataTypes.BIGINT,
template_id:DataTypes.BIGINT,
busi_id:DataTypes.STRING,
busi_company_name:DataTypes.STRING,
app_id : DataTypes.STRING,
key : DataTypes.STRING,
},{
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'c_dktemplate_busi',
validate: {
},
indexes:[
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
......@@ -4,6 +4,7 @@ const uiconfig = system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => {
return db.define("entcontract", {
name: DataTypes.STRING,
tenant_name: DataTypes.STRING,
edocid: DataTypes.STRING, // 合同id
eflowid: DataTypes.STRING, // 合同流程id
esignUrl: DataTypes.STRING, // 合同签署链接
......
......@@ -2,8 +2,8 @@ module.exports = (db, DataTypes) => {
return db.define("etemplatebusi", {
template_type:DataTypes.BIGINT,
template_id:DataTypes.BIGINT,
busi_id:DataTypes.BIGINT,
busi_company_name:DataTypes.BIGINT,
busi_id:DataTypes.STRING,
busi_company_name:DataTypes.STRING,
},{
paranoid: true,//假的删除
underscored: true,
......
......@@ -8,415 +8,596 @@ const cryptoJS = require("crypto-js");
const md5 = require("MD5");
class DKcontractService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(DKcontractService));
this.dkcompanyDao = system.getObject("db.dkcompanyDao");
this.usereaccountDao = system.getObject("db.usereaccountDao")
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.userDao = system.getObject("db.userDao");
this.restClient = system.getObject("util.restClient");
this.redisClient = system.getObject("util.redisClient");
}
async getInfo(id) {
var attrs = [];
return await this.dao.model.findOne({
where: { id: id }, attrs, raw: true
});
}
async findSindIds(accountId, dktemplateId) {
var sql = [];
sql.push("SELECT id");
sql.push("FROM `c_dkcontract` ");
sql.push("WHERE dktemplate_id = :dktemplate_id AND usereaccount_id = :usereaccount_id AND eflowstatus = '2' ");
var list = await this.customQuery(sql.join(" "), {usereaccount_id:Number(accountId), dktemplate_id: Number(dktemplateId)});
if(!list || list.length == 0) {
return [];
constructor() {
super(ServiceBase.getDaoName(DKcontractService));
this.dkcompanyDao = system.getObject("db.dkcompanyDao");
this.usereaccountDao = system.getObject("db.usereaccountDao")
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.userDao = system.getObject("db.userDao");
this.restClient = system.getObject("util.restClient");
this.redisClient = system.getObject("util.redisClient");
this.bankthreelogDao = system.getObject("db.bankthreelogDao");
this.dktemplateSve = system.getObject("service.dktemplateSve")
this.dkaggreementDao = system.getObject("db.dkaggreementDao")
}
var ids = [];
for(var item of list) {
ids.push(item.id);
}
return ids;
}
async findSignedList(accountId, dktemplateId) {
var sql = [];
sql.push("SELECT *");
sql.push("FROM `c_dkcontract` ");
sql.push("WHERE dktemplate_id = :dktemplate_id AND usereaccount_id = :usereaccount_id AND eflowstatus = '2' ");
var list = await this.customQuery(sql.join(" "), {usereaccount_id:Number(accountId), dktemplate_id: Number(dktemplateId)});
if(!list || list.length == 0) {
return [];
async getInfo(id) {
var attrs = [];
return await this.dao.model.findOne({
where: {id: id}, attrs, raw: true
});
}
for(var item of list) {
if(item.completed_at) {
item.completed_at = moment(item.completed_at).format("YYYY-MM-DD HH:mm");
}
}
return list;
}
async pageByCondition(params) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
async findSindIds(accountId, dktemplateId) {
var sql = [];
sql.push("SELECT id");
sql.push("FROM `c_dkcontract` ");
sql.push("WHERE dktemplate_id = :dktemplate_id AND usereaccount_id = :usereaccount_id AND eflowstatus = '2' ");
var where = {};
var list = await this.customQuery(sql.join(" "), {
usereaccount_id: Number(accountId),
dktemplate_id: Number(dktemplateId)
});
if (!list || list.length == 0) {
return [];
}
if (params.ecompanyIds) {
where.ecompany_id = {
[this.db.Op.in]: params.ecompanyIds
};
var ids = [];
for (var item of list) {
ids.push(item.id);
}
return ids;
}
if (params.ecompany_id) {
where.ecompany_id = params.ecompany_id;
}
async findSignedList(accountId, dktemplateId) {
var sql = [];
sql.push("SELECT *");
sql.push("FROM `c_dkcontract` ");
sql.push("WHERE dktemplate_id = :dktemplate_id AND usereaccount_id = :usereaccount_id AND eflowstatus = '2' ");
if (params.eflowstatusList) {
where.eflowstatus = {
[this.db.Op.in]: params.eflowstatusList
};;
var list = await this.customQuery(sql.join(" "), {
usereaccount_id: Number(accountId),
dktemplate_id: Number(dktemplateId)
});
if (!list || list.length == 0) {
return [];
}
for (var item of list) {
if (item.completed_at) {
item.completed_at = moment(item.completed_at).format("YYYY-MM-DD HH:mm");
}
}
return list;
}
if (params.accountName || params.accountMobile || params.accountIdno) {
var accountIds = await this.usereaccountDao.idsByCondition({
userName: params.accountName || "",
mobile: params.accountMobile || "",
personsSign: params.accountIdno || "",
});
async pageByCondition(params) {
var currentPage = Number(params.currentPage || 0);
var pageSize = Number(params.pageSize || 10);
if (!accountIds || accountIds.length == 0) {
return {
total: 0,
rows: []
};
}
var where = {};
where.usereaccount_id = {
[this.db.Op.in]: accountIds
};
}
this.addWhereTime(where, 'completed_at', params.signBegin, params.signEnd, true);
if (params.ecompanyIds) {
where.ecompany_id = {
[this.db.Op.in]: params.ecompanyIds
};
}
var orderby = [
["id", 'desc']
];
if (params.ecompany_id) {
where.ecompany_id = params.ecompany_id;
}
var attributes = [`id`, `fileurl`, `eflowstatus`, `eflowstatusname`, `completed_at`, `end_at`, `user_id`, `usereaccount_id`, `ecompany_id`];
if (params.eflowstatusList) {
where.eflowstatus = {
[this.db.Op.in]: params.eflowstatusList
};
;
}
var page = await this.getPageList(currentPage, pageSize, where, orderby, attributes);
if (page && page.rows) {
for (var row of page.rows) {
this.handleDate(row, ["completed_at", "end_at"], null);
}
await this.setEaccount(page.rows);
await this.setCompany(page.rows);
}
return page;
}
if (params.accountName || params.accountMobile || params.accountIdno) {
var accountIds = await this.usereaccountDao.idsByCondition({
userName: params.accountName || "",
mobile: params.accountMobile || "",
personsSign: params.accountIdno || "",
});
if (!accountIds || accountIds.length == 0) {
return {
total: 0,
rows: []
};
}
async setEaccount(list) {
if (!list || list.length == 0) {
return;
}
where.usereaccount_id = {
[this.db.Op.in]: accountIds
};
}
this.addWhereTime(where, 'completed_at', params.signBegin, params.signEnd, true);
var ids = [];
for (var item of list) {
ids.push(item.usereaccount_id);
}
var attrs = " `id`, `mobile`, `userName`, `personsSign`, `bankno` ";
var accountMap = await this.usereaccountDao.findMapByIds(ids, attrs);
var orderby = [
["id", 'desc']
];
for (var item of list) {
item.eaccount = accountMap["id_" + item.usereaccount_id];
}
}
var attributes = [`id`, `fileurl`, `eflowstatus`, `eflowstatusname`, `completed_at`, `end_at`, `user_id`, `usereaccount_id`, `ecompany_id`];
async setCompany(list) {
if (!list || list.length == 0) {
return;
var page = await this.getPageList(currentPage, pageSize, where, orderby, attributes);
if (page && page.rows) {
for (var row of page.rows) {
this.handleDate(row, ["completed_at", "end_at"], null);
}
await this.setEaccount(page.rows);
await this.setCompany(page.rows);
}
return page;
}
var companyIds = [];
for (var item of list) {
companyIds.push(item.ecompany_id || 0);
async setEaccount(list) {
if (!list || list.length == 0) {
return;
}
var ids = [];
for (var item of list) {
ids.push(item.usereaccount_id);
}
var attrs = " `id`, `mobile`, `userName`, `personsSign`, `bankno` ";
var accountMap = await this.usereaccountDao.findMapByIds(ids, attrs);
for (var item of list) {
item.eaccount = accountMap["id_" + item.usereaccount_id];
}
}
var companyMap = await this.ecompanyDao.findMapByIds(companyIds, " id, name, contractMobile ");
for (var item of list) {
item.ecompany = companyMap["id_" + (item.ecompany_id || 0)];
async setCompany(list) {
if (!list || list.length == 0) {
return;
}
var companyIds = [];
for (var item of list) {
companyIds.push(item.ecompany_id || 0);
}
var companyMap = await this.ecompanyDao.findMapByIds(companyIds, " id, name, contractMobile ");
for (var item of list) {
item.ecompany = companyMap["id_" + (item.ecompany_id || 0)];
}
}
}
async findInfo(obj) {
obj = obj || {};
let v = [{
model: this.db.models.ecompany,
attributes: ["id", "name"]
},
{
model: this.db.models.user,
attributes: ["id", "userName", "mobile"]
},
{
model: this.db.models.usereaccount,
attributes: ["id", "userName", "mobile", "personsSign"]
},
{
model: this.db.models.etemplate,
attributes: ["id", "name"]
}
];
var result = await this.dao.model.findOne({
where: obj,
include: v
});
return result;
}
async findContracts(obj) {
obj = obj || {};
let v = [{
model: this.db.models.ecompany,
attributes: ["id", "name"]
},
{
model: this.db.models.user,
attributes: ["id", "userName", "mobile"]
},
{
model: this.db.models.usereaccount,
attributes: ["id", "userName", "mobile", "personsSign"]
},
{
model: this.db.models.etemplate,
attributes: ["id", "name"]
}
];
var result = await this.dao.model.findAll({
where: obj,
include: v
});
return result;
}
async updateCallbackStatus(obj) {
obj = obj || {};
logCtl.info({
optitle: "e签宝回调修改合同信息info",
op: "app/base/service/impl/dkcontractSve/updateCallbackStatus",
content: "请求参数:" + JSON.stringify(obj),
clientIp: ""
});
let contract;
try {
let signTime = obj.signTime;
let signResult = obj.signResult || "1";
let thirdOrderNo = Number(obj.thirdOrderNo.substring(3) || 0);
contract = await this.findById(Number(thirdOrderNo));
if (!contract) {
return;
}
contract.eflowstatus = signResult.toString();
contract.completed_at = signTime;
contract.begin_at = signTime;
contract.resultDescription = obj.resultDescription || "";
var end_at = new Date(signTime);
end_at.setFullYear(end_at.getFullYear() + 1);
contract.end_at = end_at;
// 合同下载任务
this.redisClient.rpushBCD({id: contract.id, sve: "dk"});
await contract.save();
} catch (e) {
logCtl.error({
optitle: "e签宝回调修改合同信息error",
op: "app/base/service/impl/dkcontractSve/updateCallbackStatus",
content: "错误信息:" + e.stack,
clientIp: ""
});
async findInfo(obj) {
obj = obj || {};
let v = [{
model: this.db.models.ecompany,
attributes: ["id", "name"]
},
{
model: this.db.models.user,
attributes: ["id", "userName", "mobile"]
},
{
model: this.db.models.usereaccount,
attributes: ["id", "userName", "mobile", "personsSign"]
},
{
model: this.db.models.etemplate,
attributes: ["id", "name"]
}
];
var result = await this.dao.model.findOne({
where: obj,
include: v
});
return result;
}
return contract;
}
async downloadCompleteUrl(limit) {
var sql = "SELECT id FROM `c_dkcontract` WHERE eflowstatus = '2' AND (fileurl IS NULL OR fileurl = '') ORDER BY id DESC ";
if (limit) {
sql = sql + " LIMIT " + limit;
async findContracts(obj) {
obj = obj || {};
let v = [{
model: this.db.models.ecompany,
attributes: ["id", "name"]
},
{
model: this.db.models.user,
attributes: ["id", "userName", "mobile"]
},
{
model: this.db.models.usereaccount,
attributes: ["id", "userName", "mobile", "personsSign"]
},
{
model: this.db.models.etemplate,
attributes: ["id", "name"]
}
];
var result = await this.dao.model.findAll({
where: obj,
include: v
});
return result;
}
var list = await this.dao.customQuery(sql);
if (!list || list.length == 0) {
return;
async updateCallbackStatus(obj) {
obj = obj || {};
logCtl.info({
optitle: "e签宝回调修改合同信息info",
op: "app/base/service/impl/dkcontractSve/updateCallbackStatus",
content: "请求参数:" + JSON.stringify(obj),
clientIp: ""
});
let contract;
try {
let signTime = obj.signTime;
let signResult = obj.signResult || "1";
let thirdOrderNo = Number(obj.thirdOrderNo.substring(3) || 0);
contract = await this.findById(Number(thirdOrderNo));
if (!contract) {
return;
}
contract.eflowstatus = signResult.toString();
contract.completed_at = signTime;
contract.begin_at = signTime;
contract.resultDescription = obj.resultDescription || "";
var end_at = new Date(signTime);
end_at.setFullYear(end_at.getFullYear() + 1);
contract.end_at = end_at;
// 合同下载任务
this.redisClient.rpushBCD({id: contract.id, sve: "dk"});
await contract.save();
} catch (e) {
logCtl.error({
optitle: "e签宝回调修改合同信息error",
op: "app/base/service/impl/dkcontractSve/updateCallbackStatus",
content: "错误信息:" + e.stack,
clientIp: ""
});
}
return contract;
}
for (var o of list) {
var id = o.id;
try {
var contract = await this.dao.findById(id);
if (!contract) {
continue;
async downloadCompleteUrl(limit) {
var sql = "SELECT id FROM `c_dkcontract` WHERE eflowstatus = '2' AND (fileurl IS NULL OR fileurl = '') ORDER BY id DESC ";
if (limit) {
sql = sql + " LIMIT " + limit;
}
var list = await this.dao.customQuery(sql);
if (contract.eflowstatus != "2") {
continue;
if (!list || list.length == 0) {
return;
}
if (!contract.fileurl) {
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
console.log(fileRs, "===============================================================");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
} else {
await this.utilesignbaoSve.archiveProcess({flowId: contract.eflowid}, "econtractSve");
for (var o of list) {
var id = o.id;
try {
var contract = await this.dao.findById(id);
if (!contract) {
continue;
}
if (contract.eflowstatus != "2") {
continue;
}
if (!contract.fileurl) {
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
console.log(fileRs, "===============================================================");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
} else {
await this.utilesignbaoSve.archiveProcess({flowId: contract.eflowid}, "econtractSve");
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
}
}
}
} catch (e) {
console.error(e);
//日志记录
logCtl.error({
optitle: "定时下载合同任务异常, id=" + id,
op: "app/base/service/impl/econtractSve.js",
content: e.stack,
clientIp: ""
});
return {
code: -200,
message: "error",
data: {}
};
}
}
}
async downloadContract(id) {
try {
let contract = await this.dao.findById(id);
if (!contract || contract.eflowstatus != "2" || contract.fileurl) {
return;
}
//await this.syncYzSign(2134);
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
contract.save();
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
this.syncYzSign(contract.id);
} else {
await this.utilesignbaoSve.archiveProcess({flowId: contract.eflowid}, "econtractSve");
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
this.syncYzSign(contract.id);
}
}
}
}
} catch (e) {
console.error(e);
//日志记录
logCtl.error({
optitle: "定时下载合同任务异常, id=" + id,
op: "app/base/service/impl/econtractSve.js",
content: e.stack,
clientIp: ""
});
return {
code: -200,
message: "error",
data: {}
};
}
} catch (e) {
console.error(e);
return {
code: -200,
message: "error",
data: {}
};
}
}
}
async downloadContract(id) {
try {
let contract = await this.dao.findById(id);
if (!contract || contract.eflowstatus != "2" || contract.fileurl) {
return ;
}
//await this.syncYzSign(2134);
// 请求文件地址
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
this.syncYzSign(contract.id);
} else {
await this.utilesignbaoSve.archiveProcess({flowId: contract.eflowid}, "econtractSve");
async getContractUrl(id) {
var contract = await this.findById(id);
if (contract.fileurl) {
return contract.fileurl;
}
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
this.syncYzSign(contract.id);
}
}
} catch (e) {
console.error(e);
return {
code: -200,
message: "error",
data: {}
};
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
return contract.fileurl;
}
return "";
}
}
async getContractUrl(id) {
var contract = await this.findById(id);
if (contract.fileurl) {
return contract.fileurl;
async testtransfer(result) {
var date = new Date().Format("yyyy-MM-dd hh:mm:ss");
var v = JSON.stringify(result) + "---" + date;
var sql = "INSERT INTO `testtransfer` (`v`) VALUES ('" + v + "') ";
await this.dao.customExecAddOrPutSql(sql, {});
}
let fileRs = await this.utilesignbaoSve.downloadUserContractFile(contract.eflowid, "econtractSve");
if (fileRs.code == 1 && fileRs.data.selfossUrl) {
contract.fileurl = fileRs.data.selfossUrl;
await contract.save();
return contract.fileurl;
async formateTime(inputTime) {
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
}
return "";
}
async testtransfer(result) {
var date = new Date().Format("yyyy-MM-dd hh:mm:ss");
var v = JSON.stringify(result) + "---" + date;
var sql = "INSERT INTO `testtransfer` (`v`) VALUES ('" + v + "') ";
await this.dao.customExecAddOrPutSql(sql, {});
}
async formateTime(inputTime) {
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
}
async formateTime2(inputTime) {
if (!inputTime) {
return '';
async formateTime2(inputTime) {
if (!inputTime) {
return '';
}
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '' + m + '' + d + '' + h + '' + minute + '' + second;
}
var date = new Date(inputTime);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '' + m + '' + d + '' + h + '' + minute + '' + second;
}
async getUidStr(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
var uuid = [],
i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
async getUidStr(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
var uuid = [],
i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
async autoSign(params) {
var ecid = params.ecid;
var unionId = params.appId + "_" + params.userId + "_" + params.idNo;
// ecid dketemplate
var etemplate = await this.dktemplateSve.findById(ecid);
// dkecompany
var dkcompany = await this.dkcompanyDao.findById(etemplate.dkcompany_id);
// p_user
var user = await this.userDao.findOne({
unionId: unionId,
});
if (!user) {
user = await this.userDao.create({
appkey: params.appId,
unionId: unionId,
userId3rd: params.userId,
userName: params.idName,
mobile: params.mobile,
utype: 0,
});
}
// p_user_eaccount
var eaccount = await this.usereaccountDao.findOne({
user_id: user.id,
personsSign: params.idNo,
}) || {};
var isNeedCreate = !eaccount.eaccountid || eaccount.userName != params.idName || eaccount.mobile != params.mobile || eaccount.bankno != params.bankno;
eaccount.user_id = user.id;
eaccount.userName = params.idName;
eaccount.mobile = params.mobile;
eaccount.bankno = params.bankno;
eaccount.personsSign = params.idNo;
if (eaccount.id) {
await eaccount.save();
} else {
eaccount = await this.usereaccountDao.create(eaccount);
}
let banklog = await this.bankthreelogDao.findOne({
userName: eaccount.userName,
userIdNo: eaccount.personsSign,
userBankNo: eaccount.bankno,
result: 1,
});
if (!banklog) {
var bankthreeParams = {
name: eaccount.userName,
idno: eaccount.personsSign,
cardno: eaccount.bankno
};
var threeResult = await this.utilesignbaoSve.bankthree(bankthreeParams, "bankinfoAuth");
console.log("threeResult-----------------------------", threeResult);
if (!threeResult || threeResult.code == -120) {
return this.returnjson(-1, "银行三要素(姓名、身份证、银行卡号)验证失败");
}
if (threeResult.code == -110) {
return this.returnjson(-1, "银行三要素验证失败");
}
}
// c_dkecontract
var dkecontract = await this.dao.findOne({
eflowstatus: '2',
usereaccount_id: eaccount.id,
dktemplate_id: ecid,
});
if (dkecontract) {
return this.returnjson(0, "用户已经签约", {
contractId: dkecontract.id
});
}
if (isNeedCreate) {
var uidStr = await this.getUidStr(8, 36);
var thirdId = etemplate.id + "_" + eaccount.id + uidStr;
//2.创建e签宝account 5.2.1 , 创建后save()
var params = {
thirdId: thirdId,
name: eaccount.userName,
idNo: eaccount.personsSign,
idType: 19,
mobile: eaccount.mobile
};
var getAccount = await this.utilesignbaoSve.createAccountId(params, "econtractSve");
if (getAccount && getAccount.code == 1 && getAccount.data) {
eaccount.eaccountid = getAccount.data.accountId;
await eaccount.save();
} else {
return this.returnjson(-1, "账户创建失败");
}
}
dkecontract = {
name: dkcompany.name,
dktemplate_id: ecid,
user_id: user.id,
usereaccount_id: eaccount.id,
dkcompany_id: dkcompany.dkcompany,
edocid: "",
eflowid: "",
esignUrl: "",
eflowstatus: "1",
}
dkecontract = await this.create(dkecontract);
var dkaggreement = await this.dkaggreementDao.findById(etemplate.dkaggreement_id);
var params = {
templateId: dkaggreement.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: dkcompany.name, //合同模板名称 必填
simpleFormFields: {
nameA: dkcompany.name, //甲方 必填
addressA: dkcompany.addr, // 甲方地址
phoneA: dkcompany.phone, // 甲方电话
nameB: eaccount.userName, //乙方姓名 必填
phoneB: eaccount.mobile, //乙方电话 必填
nameC: eaccount.userName, // 已方姓名
phoneC: eaccount.mobile, // 乙方电话
idcardC: eaccount.personsSign, // 乙方身份证
banknoC: eaccount.bankno, // 乙方银行卡号
signdate: moment().format("YYYY/MM/DD"), // 签约日期
}
};
var ebaoAccountId = eaccount.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = "dk_" + dkecontract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = "";
var sealId = dkcompany.sealId;
let tt = await this.utilesignbaoSve.userSignContractNoTemplate2(params, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractSve", sealId);
console.log("-============= result ===========================", tt);
if (tt && tt.data && tt.code == 1) {
dkecontract.eflowid = tt.data.flowId;
dkecontract.edocid = tt.data.docId;
dkecontract.eflowstatus = '2',
dkecontract.esignUrl = tt.data.signUrl;
var signTime = new Date();
dkecontract.completed_at = signTime;
dkecontract.begin_at = signTime;
var end_at = new Date();
end_at.setFullYear(end_at.getFullYear() + 1);
dkecontract.end_at = end_at;
dkecontract.save();
}
this.redisClient.rpushBCD({id: dkecontract.id, sve: "e"});
return this.returnjson(0, "success", {
contractId: dkecontract.id
});
return this.returnjson(-1, tt.message || "签约失败", tt.code);
}
returnjson(code, msg, data) {
return {
code: code,
msg: msg,
data: data || null
}
}
return uuid.join('');
}
}
module.exports = DKcontractService;
\ No newline at end of file
module.exports = DKcontractService;
const ServiceBase = require("../sve.base");
class DktemplatebusiService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(DktemplatebusiService));
}
async getlist(id) {
var sql = "SELECT * FROM c_dktemplate_busi WHERE template_id = :template_id";
var page = await this.customQuery(sql,{template_id:id});
return page;
}
async busiIdsByTemplateId(template_id) {
var sql = "SELECT busi_id FROM c_dktemplate_busi WHERE template_id = :template_id";
var list = await this.customQuery(sql, {template_id: template_id});
let rs = [];
if (!list || list.length == 0) {
return rs;
}
for (let item of list) {
rs.push(item.busi_id);
}
return rs;
}
async getinfo(qobj) {
var sql = "SELECT * FROM c_dktemplate_busi WHERE template_id = " + qobj.template_id + " AND busi_id = " + qobj.company_id;
var page = await this.customQuery(sql);
return page;
}
async deleteTetId(qobj) {
let sql = "DELETE FROM c_dktemplate_busi WHERE id = " + qobj.id;
await this.customExecAddOrPutSql(sql);
return 1;
}
async suggest(name, ownerIds) {
return await this.dao.suggest(name, ownerIds);
}
async saveto(etebusi) {
return await this.create(etebusi);
}
}
module.exports = DktemplatebusiService;
......@@ -1295,6 +1295,7 @@ class EcontractService extends ServiceBase {
var ecompany = await this.ecompanyDao.findById(etemplate.ecompany_id);
// p_user
var user = await this.userDao.findOne({
unionId: unionId,
});
......
......@@ -236,7 +236,7 @@ class EntcontractService extends ServiceBase {
type: "0",// 类型 0 一般纳税人 1 小规模纳税人
companyName: params.merchantName,//商户名称
mobile: params.mobile,//手机号
mainId: "67731101",//代征主体 67731101 测试 67731504
mainId: "67731101",
signedName: params.merchantName, //合同名称 使用商户名称
beginTime: moment().format("YYYY-MM-DD"), //当前时间, // 签约开始时间
invalidTime: moment().add(2, 'y').format("YYYY-MM-DD"), // 签约失效时间
......@@ -400,17 +400,75 @@ class EntcontractService extends ServiceBase {
async createYzMerchant_1(params) {
async yzMerchantAutoSigns(params,enttemplate){
//判断商户是否签约
var ecid = params.ecid;
var unionId = params.appId + "_" + params.merchantId + "_" + params.idNo;
var user = await this.userDao.findOne({unionId: unionId});
if (!user) {
user = await this.userDao.create({
appkey: params.appId,
unionId: unionId,
userId3rd: params.merchantId,
userName: params.idName,
mobile: params.mobile,
utype: 0,
});
}
// p_user_eaccount
var eaccount = await this.usereaccountDao.findOne({user_id: user.id, personsSign: params.idNo,}) || {};
eaccount.user_id = user.id;
eaccount.userName = params.idName;
eaccount.mobile = params.mobile;
eaccount.bankno = "";
eaccount.personsSign = params.idNo;
if (eaccount.id) {
await eaccount.save();
} else {
eaccount = await this.usereaccountDao.create(eaccount);
}
var entcontract = await this.dao.findOne({
eflowstatus: '2',
usereaccount_id: eaccount.id,
enttemplate_id: ecid,
});
if (entcontract) {
let merchantSign = await this.yzmerchantsignedDao.findOne({
entcontract_id: entcontract.id,
});
if (!merchantSign) {
return this.returnjson(-1, "数据错误");
}
let res = {
code: 0,
msg: "签约成功",
data: {
entcontract:entcontract.id,
},
};
return res;
}
var reso = await this.createYzMerchant_1(params,enttemplate);
if(reso.code == -1){
return this.returnjson(-1, "签约失败");
}
this.toSignUp(params,eaccount,user,entcontract,reso.erchants);
return this.returnjson(0, "签约成功");
}
async createYzMerchant_1(params,enttemplate){
var data = {
// appId: "1202849621743763458",
// mchtId: "1202848945651318786",
appId: params.toAppId,
mchtId: params.toMcthid,
appId: enttemplate.appid,
mchtId: enttemplate.mcthid,
ageFlag:0,
type: "0",// 类型 0 一般纳税人 1 小规模纳税人
companyName: params.merchantName,//商户名称
mobile: params.mobile,//手机号
mainId: "67731504",//代征主体 67731101 测试 67731504
mainId: settings.apiconfig.getmainId(),//代征主体 67731101 测试 67731504
signedName: params.merchantName, //合同名称 使用商户名称
beginTime: moment().format("YYYY-MM-DD"), //当前时间, // 签约开始时间
invalidTime: moment().add(2, 'y').format("YYYY-MM-DD"), // 签约失效时间
......@@ -426,7 +484,6 @@ class EntcontractService extends ServiceBase {
nonceStr: await this.getUidStr(16, 36)
};
console.log("有赞商户创建data:", data);
var signArr = [];
var keys = Object.keys(data).sort();
for (var i = 0; i < keys.length; i++) {
......@@ -434,11 +491,8 @@ class EntcontractService extends ServiceBase {
var v = data[k];
signArr.push(k + "=" + v);
}
var signStr = signArr.join("&") + "&key=" + params.key;
console.log("有赞商户创建signStr:", signStr);
var signStr = signArr.join("&") + "&key=" + enttemplate.key;
data.sign = md5(signStr).toUpperCase();
console.log("有赞商户创建sign:", data.sign);
data.bizContent = [
{
"quickDeductionFactor": 0,
......@@ -459,7 +513,6 @@ class EntcontractService extends ServiceBase {
"maxValue": 214748364700
}
];
var rtn = null;
try {
let url = settings.apiconfig.settleApiConfig().createMerchantApi;
console.log("有赞商户创建url:", url);
......@@ -468,9 +521,11 @@ class EntcontractService extends ServiceBase {
url: url,
data: data,
});
console.log("有赞商户创建result:", rs.data);
var reso = rs.data;
if(reso.code == -1){
console.log("有赞创建商户错误===========", reso)
return reso;
}
var erchants = await this.yzmerchantsignedDao.findOne({
companyName: params.merchantName,
});
......@@ -481,51 +536,10 @@ class EntcontractService extends ServiceBase {
mchtId: reso.data.mchtId,
mainId: reso.data.mainId,
secret: reso.data.secret,
entcontract_id: params.entcontract_id,
ecid : 10287
});
}
let ecompany = await this.ecompanyDao.findOne({
"name": params.merchantName,
})
if (!ecompany) {
// 创建ecompany
ecompany = await this.ecompanyDao.create({
"name": params.merchantName,
"nameA": '',
"isEnabled": true,
"isQuiet": true,
"sealurl": "",
"encryptkey": "",
"posturl": ""
});
}
let temp = await this.etemplateDao.findById(10287);
let template = await this.etemplateDao.findOne({
ecompany_id: ecompany.id,
});
if (!template) {
template = await this.etemplateDao.create({
ecompany_id: ecompany.id,
name: ecompany.name,
templateid: temp.templateid,
ecompanyMainId: temp.ecompanyMainId,
nameA: temp.nameA,
filekey: temp.filekey,//e签宝返回文件key
filepath: temp.filepath,//需要在后台补充
placeholderkey: temp.placeholderkey,//模板占位信息
isEnabled: true,
});
}
reso.data.ecid = template.id;
if (!erchants.ecid) {
erchants.ecid = template.id;
await erchants.save();
}
var etemplatebusi = await this.etemplatebusiDao.findOne({
template_id:erchants.ecid,
busi_id:erchants.mchtId,
......@@ -538,39 +552,135 @@ class EntcontractService extends ServiceBase {
busi_company_name: erchants.companyName,
});
}
// let busi = await this.ecompanybusiDao.findOne({
// ecompany_id: ecompany.id,
// etemplate_id: template.id,
// });
// if (!busi) {
// await this.ecompanybusiDao.create({
// ecompany_id: ecompany.id,
// etemplate_id: template.id,
// postwxurl: "",
// postsignurl: "",
// appId: reso.data.appId,
// mchtId: reso.data.mchtId,
// mainId: reso.data.mainId,
// key: reso.data.secret,
// });
// } else {
// busi.appId = reso.data.appId;
// busi.mchtId = reso.data.mchtId;
// busi.mainId = reso.data.mainId;
// busi.key = reso.data.secret;
// await busi.save();
// }
reso.erchants = erchants;
return reso;
} catch (e) {
console.log(e.stack);
let result = {};
result.code = -1;
result.message = "操作异常";
return result;
return {code : -1,message:"操作异常"};
}
}
async toSignUp(params,eaccount,user,entcontract,erchants){
var ecid = params.ecid;
var unionId = params.appId + "_" + params.merchantId + "_" + params.idNo;
// enttemplate 模板查询
var enttemplate = await this.enttemplateSve.findById(ecid);
// entcompany
var entcompany = await this.entcompanyDao.findById(enttemplate.entcompany_id);
var isNeedCreate = !eaccount.eaccountid || eaccount.userName != params.idName || eaccount.mobile != params.mobile;
eaccount.user_id = user.id;
eaccount.userName = params.idName;
eaccount.mobile = params.mobile;
eaccount.bankno = "";
eaccount.personsSign = params.idNo;
if (eaccount.id) {
await eaccount.save();
} else {
eaccount = await this.usereaccountDao.create(eaccount);
}
// e签宝流程
if (isNeedCreate) {
var uidStr = await this.getUidStr(8, 36);
var thirdId = enttemplate.id + "_" + eaccount.id + uidStr;
//2.创建e签宝account 5.2.1 , 创建后save()
let createParams = {
thirdId: thirdId,
name: eaccount.userName,
idNo: eaccount.personsSign,
idType: 19,
mobile: eaccount.mobile
};
var getAccount = await this.utilesignbaoSve.createAccountId(createParams, "econtractSve");
if (getAccount && getAccount.code == 1 && getAccount.data) {
eaccount.eaccountid = getAccount.data.accountId;
await eaccount.save();
} else {
return this.returnjson(-1, "账户创建失败");
}
}
// 3.设置静默签署授权 5.2.5
if (!eaccount.isGrantAuto) {
var paramsGrant = {
grantAccountId: eaccount.eaccountid
};
var grantAuto = await this.utilesignbaoSve.grantAuthorization(paramsGrant, "econtractSve");
if (grantAuto.code != 1) {
return this.returnjson(-1, "静默签署设置失败");
}
eaccount.isGrantAuto = true;
await eaccount.save();
}
// 创建合同
entcontract = {
name: entcompany.name,
eflowstatusname: "签约中",
eflowstatus: "1",
user_id: eaccount.user_id,
usereaccount_id: eaccount.id,
enttemplate_id: enttemplate.id,
entcompany_id: entcompany.id,
};
entcontract = await this.create(entcontract);
erchants.entcontract_id = entcontract.id;
erchants.save();
var sealId = entcompany.sealId;
let today = new Date().Format("yyyy") + "年" + new Date().Format("MM") + "月" + new Date().Format("dd") + "日";
var signParams = {
templateId: enttemplate.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: enttemplate.name, //合同模板名称 必填
simpleFormFields: {
nameA: params.merchantName, //甲方 必填
addressA: params.merchantAddr, //甲方地址
representA: params.merchantLegal,//甲方法定代表人
agentA: params.idName,//甲方联系人
agentMobileA: params.mobile,//甲方 联系电话
nameB: entcompany.name, //乙方 必填
addressB: entcompany.addr, //乙方 地址
representB: entcompany.legal,//乙方 法定代表人
agentB: entcompany.contactName,//乙方 联系人
agentMobileB: entcompany.contactMobile,//乙方 联系电话
signDate: today,//签约时间
signDateA: today, //甲方签约日期 必填
signDateB: today //乙方签约日期 必填
}
};
var ebaoAccountId = eaccount.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = entcontract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = "";
var tt = await this.utilesignbaoSve.userAutoSignContractNoTemplaterEversalSeal(signParams, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractSve", sealId);
if (tt && tt.data && tt.code == 1) {
entcontract.eflowid = tt.data.flowId;
entcontract.edocid = tt.data.docId;
entcontract.eflowstatus = '2';
entcontract.eflowstatusname = "已完成";
var signTime = new Date();
entcontract.completed_at = signTime;
entcontract.begin_at = signTime;
var end_at = new Date();
end_at.setFullYear(end_at.getFullYear() + 1);
entcontract.end_at = end_at;
await entcontract.save();
params.entcontract_id = entcontract.id;
params.toAppId = enttemplate.appid;
params.toMcthid = enttemplate.mcthid;
params.key = enttemplate.key;
// 合同下载任务
this.redisClient.rpushBCD({id: entcontract.id, sve: "ent"});
console.log("===============有赞商户签约异步签约成功===============", new Date())
}
console.log(new Date(),"===============有赞商户签约异步签约失败===============",tt)
}
async syncSign(contractId) {
var contract = await this.dao.findById(contractId);
if (!contract) {
......@@ -901,194 +1011,6 @@ class EntcontractService extends ServiceBase {
}
async yzMerchantAutoSigns(params) {
var ecid = params.ecid;
var unionId = params.appId + "_" + params.merchantId + "_" + params.idNo;
// enttemplate 模板查询
var enttemplate = await this.enttemplateSve.findById(ecid);
// entcompany
var entcompany = await this.entcompanyDao.findById(enttemplate.entcompany_id);
// p_user
var user = await this.userDao.findOne({
unionId: unionId,
});
if (!user) {
user = await this.userDao.create({
appkey: params.appId,
unionId: unionId,
userId3rd: params.merchantId,
userName: params.idName,
mobile: params.mobile,
utype: 0,
});
}
// p_user_eaccount
var eaccount = await this.usereaccountDao.findOne({
user_id: user.id,
personsSign: params.idNo,
}) || {};
var isNeedCreate = !eaccount.eaccountid || eaccount.userName != params.idName || eaccount.mobile != params.mobile;
eaccount.user_id = user.id;
eaccount.userName = params.idName;
eaccount.mobile = params.mobile;
eaccount.bankno = "";
eaccount.personsSign = params.idNo;
if (eaccount.id) {
await eaccount.save();
} else {
eaccount = await this.usereaccountDao.create(eaccount);
}
// c_entcontract
var entcontract = await this.dao.findOne({
eflowstatus: '2',
usereaccount_id: eaccount.id,
enttemplate_id: ecid,
});
if (entcontract) {
// return this.returnjson(0, "该商户已签约");
let merchantSign = await this.yzmerchantsignedDao.findOne({
entcontract_id: entcontract.id,
});
if (!merchantSign) {
return this.returnjson(-1, "数据错误");
}
let res = {
code: 0,
msg: "执行成功",
data: {
ecid: merchantSign.ecid,
appId: merchantSign.appId,
mchtId: merchantSign.mchtId,
mainId: merchantSign.mainId,
secret: merchantSign.secret,
},
};
return res;
}
// e签宝流程
if (isNeedCreate) {
// 任博说有赞商户不验证银行卡三要素
// var bankthreeParams = {
// name: eaccount.userName,
// idno: eaccount.personsSign,
// cardno: eaccount.bankno
// };
// var threeResult = await this.utilesignbaoSve.bankthree(bankthreeParams, "bankinfoAuth");
// console.log("threeResult-----------------------------", threeResult);
// if (!threeResult || threeResult.code == -120) {
// return this.returnjson(-1, "银行三要素(姓名、身份证、银行卡号)验证失败");
// }
// if (threeResult.code == -110) {
// return this.returnjson(-1, "银行三要素验证失败");
// }
var uidStr = await this.getUidStr(8, 36);
var thirdId = enttemplate.id + "_" + eaccount.id + uidStr;
//2.创建e签宝account 5.2.1 , 创建后save()
let createParams = {
thirdId: thirdId,
name: eaccount.userName,
idNo: eaccount.personsSign,
idType: 19,
mobile: eaccount.mobile
};
var getAccount = await this.utilesignbaoSve.createAccountId(createParams, "econtractSve");
if (getAccount && getAccount.code == 1 && getAccount.data) {
eaccount.eaccountid = getAccount.data.accountId;
await eaccount.save();
} else {
return this.returnjson(-1, "账户创建失败");
}
}
// 3.设置静默签署授权 5.2.5
if (!eaccount.isGrantAuto) {
var paramsGrant = {
grantAccountId: eaccount.eaccountid
};
var grantAuto = await this.utilesignbaoSve.grantAuthorization(paramsGrant, "econtractSve");
if (grantAuto.code != 1) {
return this.returnjson(-1, "静默签署设置失败");
}
eaccount.isGrantAuto = true;
await eaccount.save();
}
// 创建合同
entcontract = {
name: entcompany.name,
eflowstatusname: "签约中",
eflowstatus: "1",
user_id: eaccount.user_id,
usereaccount_id: eaccount.id,
enttemplate_id: enttemplate.id,
entcompany_id: entcompany.id,
};
entcontract = await this.create(entcontract);
var sealId = entcompany.sealId;
let today = new Date().Format("yyyy") + "年" + new Date().Format("MM") + "月" + new Date().Format("dd") + "日";
var signParams = {
templateId: enttemplate.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: enttemplate.name, //合同模板名称 必填
simpleFormFields: {
nameA: params.merchantName, //甲方 必填
addressA: params.merchantAddr, //甲方地址
representA: params.merchantLegal,//甲方法定代表人
agentA: params.idName,//甲方联系人
agentMobileA: params.mobile,//甲方 联系电话
nameB: entcompany.name, //乙方 必填
addressB: entcompany.addr, //乙方 地址
representB: entcompany.legal,//乙方 法定代表人
agentB: entcompany.contactName,//乙方 联系人
agentMobileB: entcompany.contactMobile,//乙方 联系电话
signDate: today,//签约时间
signDateA: today, //甲方签约日期 必填
signDateB: today //乙方签约日期 必填
}
};
var ebaoAccountId = eaccount.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = entcontract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = "";
var tt = await this.utilesignbaoSve.userAutoSignContractNoTemplaterEversalSeal(signParams, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractSve", sealId);
if (tt && tt.data && tt.code == 1) {
entcontract.eflowid = tt.data.flowId;
entcontract.edocid = tt.data.docId;
entcontract.eflowstatus = '2';
entcontract.eflowstatusname = "已完成";
var signTime = new Date();
entcontract.completed_at = signTime;
entcontract.begin_at = signTime;
var end_at = new Date();
end_at.setFullYear(end_at.getFullYear() + 1);
entcontract.end_at = end_at;
await entcontract.save();
params.entcontract_id = entcontract.id;
params.toAppId = enttemplate.appid;
params.toMcthid = enttemplate.mcthid;
params.key = enttemplate.key;
// 合同下载任务
this.redisClient.rpushBCD({id: entcontract.id, sve: "ent"});
return await this.createYzMerchant_1(params);
}
return this.returnjson(-1, tt.message || "签约失败", tt.code);
}
returnjson(code, msg, data) {
return {
code: code,
......
......@@ -23,6 +23,11 @@ class EtemplatebusiService extends ServiceBase {
return rs;
}
async busiByTemplate(template_id) {
var sql = "SELECT * FROM c_etemplate_busi WHERE template_type = 2 AND template_id = :template_id";
return await this.customQuery(sql, {template_id: template_id});
}
async getinfo(qobj) {
var sql = "SELECT * FROM c_etemplate_busi WHERE template_id = " + qobj.template_id + " AND busi_id = " + qobj.company_id;
var page = await this.customQuery(sql);
......@@ -45,4 +50,4 @@ class EtemplatebusiService extends ServiceBase {
}
}
module.exports = EtemplatebusiService;
\ No newline at end of file
module.exports = EtemplatebusiService;
......@@ -85,6 +85,16 @@ var settings = {
return "5111588557"
}
},
//有赞商户创建 代征主体 //代征主体 67731101 测试 67731504
getmainId : function(){
if (settings.env == "dev") {
return "67731504";
} else {
return "67731101"
}
},
//e签宝appKey
eSignBaoAppKey: function () {
if (settings.env == "dev") {
......@@ -185,4 +195,4 @@ var settings = {
}
};
settings.ENVINPUT = ENVINPUT;
module.exports = settings;
\ No newline at end of file
module.exports = settings;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment