Commit 72608629 by zhaoxiqing

gsb

parent 206d65a0
...@@ -5,14 +5,121 @@ const moment = require("moment"); ...@@ -5,14 +5,121 @@ const moment = require("moment");
class DKcontractApi { class DKcontractApi {
constructor() { 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.dkcontractSve = system.getObject("service.dkcontractSve");
this.etemplatebusiSve = system.getObject("service.etemplatebusiSve");
} }
async syncSignedFile() { async syncSignedFile() {
this.dkcontractSve.downloadCompleteUrl(); this.dkcontractSve.downloadCompleteUrl();
return "start success" 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; module.exports = DKcontractApi;
...@@ -105,7 +105,6 @@ class YZContractApi { ...@@ -105,7 +105,6 @@ class YZContractApi {
} }
async merchantSigns(pobj) { async merchantSigns(pobj) {
// 处理参数 // 处理参数
var param = { var param = {
...@@ -121,18 +120,18 @@ class YZContractApi { ...@@ -121,18 +120,18 @@ class YZContractApi {
nonceStr: this.trim(pobj.nonceStr),//随机码 nonceStr: this.trim(pobj.nonceStr),//随机码
sign: this.trim(pobj.sign) sign: this.trim(pobj.sign)
}; };
console.log("有赞商户签约接口===========", param);
if (!param.ecid) { if (!param.ecid) {
return this.returnjson(-1, "请传入薪必果提供的ecid") return this.returnjson(-1, "请传入薪必果提供的ecid");
} }
if (!param.appId) { if (!param.appId) {
return this.returnjson(-1, "请传入薪必果提供的appId") return this.returnjson(-1, "请传入薪必果提供的appId");
} }
if (!param.idName) { if (!param.idName) {
return this.returnjson(-1, "请提供代理人姓名") return this.returnjson(-1, "请提供代理人姓名");
} }
if (!param.idNo) { if (!param.idNo) {
return this.returnjson(-1, "请提供代理人身份证号") return this.returnjson(-1, "请提供代理人身份证号");
} }
if (!await this.idcardClient.checkIDCard(param.idNo)) { if (!await this.idcardClient.checkIDCard(param.idNo)) {
return this.returnjson(-1, "代理人身份证格式不正确"); return this.returnjson(-1, "代理人身份证格式不正确");
...@@ -144,16 +143,16 @@ class YZContractApi { ...@@ -144,16 +143,16 @@ class YZContractApi {
} }
if (card.sex == 'male') { if (card.sex == 'male') {
if (age < 18 || age > 60) { if (age < 18 || age > 60) {
return this.returnjson(-1, "签约失败,男性代理人限制18-60岁之间") return this.returnjson(-1, "签约失败,男性代理人限制18-60岁之间");
} }
} else { } else {
if (age < 18 || age > 55) { if (age < 18 || age > 55) {
return this.returnjson(-1, "签约失败,女性代理人限制18-55岁之间") return this.returnjson(-1, "签约失败,女性代理人限制18-55岁之间");
} }
} }
if (!param.nonceStr) { if (!param.nonceStr) {
return this.returnjson(-1, "请提供随机码") return this.returnjson(-1, "请提供随机码");
} }
var enttemplate = await this.enttemplateSve.findById(param.ecid); var enttemplate = await this.enttemplateSve.findById(param.ecid);
...@@ -179,7 +178,7 @@ class YZContractApi { ...@@ -179,7 +178,7 @@ class YZContractApi {
return this.returnjson(1001001, "签名错误"); return this.returnjson(1001001, "签名错误");
} }
try { try {
var result = await this.entcontractSve.yzMerchantAutoSigns(param); var result = await this.entcontractSve.yzMerchantAutoSigns(param,enttemplate);
return result; return result;
} catch (error) { } catch (error) {
console.log(error); console.log(error);
...@@ -217,13 +216,13 @@ class YZContractApi { ...@@ -217,13 +216,13 @@ class YZContractApi {
let busiIds = await this.etemplatebusiSve.busiIdsByTemplateId(param.ecid); let busiIds = await this.etemplatebusiSve.busiIdsByTemplateId(param.ecid);
let num = await this.esettleSve.isValidAge(busiIds); let num = await this.esettleSve.isValidAge(busiIds);
if(num) { if (num) {
let card = await this.idcardClient.cardInfo(param.idNo); let card = await this.idcardClient.cardInfo(param.idNo);
let age = card.age || 0; let age = card.age || 0;
if(!age) { if (!age) {
return this.returnjson(-1, "身份证号格式错误, 只支持18位身份证号码"); return this.returnjson(-1, "身份证号格式错误, 只支持18位身份证号码");
} }
if(card.sex == 'male') { if (card.sex == 'male') {
if (age < 18 || age > 60) { if (age < 18 || age > 60) {
return this.returnjson(-1, "签约失败,男限制18-60岁之间") return this.returnjson(-1, "签约失败,男限制18-60岁之间")
} }
...@@ -353,7 +352,7 @@ class YZContractApi { ...@@ -353,7 +352,7 @@ class YZContractApi {
if (!obj.appId) { if (!obj.appId) {
return this.returnjson(-1, "请传入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) { if (!enttemplate || !enttemplate.key) {
return this.returnjson(1001003, "配置信息错误,请联系薪必果人员进行配置"); return this.returnjson(1001003, "配置信息错误,请联系薪必果人员进行配置");
...@@ -367,7 +366,7 @@ class YZContractApi { ...@@ -367,7 +366,7 @@ class YZContractApi {
signArr.push("startId=" + startId); signArr.push("startId=" + startId);
signArr.push("key=" + enttemplate.key); signArr.push("key=" + enttemplate.key);
var sign = md5(signArr.join("&")).toUpperCase(); var sign = md5(signArr.join("&")).toUpperCase();
console.log(signArr.join("&"),sign); console.log(signArr.join("&"), sign);
if (sign != obj.sign) { if (sign != obj.sign) {
return { return {
code: 1001001, code: 1001001,
......
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); ...@@ -4,6 +4,7 @@ const uiconfig = system.getUiConfig2(settings.wxconfig.appId);
module.exports = (db, DataTypes) => { module.exports = (db, DataTypes) => {
return db.define("entcontract", { return db.define("entcontract", {
name: DataTypes.STRING, name: DataTypes.STRING,
tenant_name: DataTypes.STRING,
edocid: DataTypes.STRING, // 合同id edocid: DataTypes.STRING, // 合同id
eflowid: DataTypes.STRING, // 合同流程id eflowid: DataTypes.STRING, // 合同流程id
esignUrl: DataTypes.STRING, // 合同签署链接 esignUrl: DataTypes.STRING, // 合同签署链接
......
...@@ -2,8 +2,8 @@ module.exports = (db, DataTypes) => { ...@@ -2,8 +2,8 @@ module.exports = (db, DataTypes) => {
return db.define("etemplatebusi", { return db.define("etemplatebusi", {
template_type:DataTypes.BIGINT, template_type:DataTypes.BIGINT,
template_id:DataTypes.BIGINT, template_id:DataTypes.BIGINT,
busi_id:DataTypes.BIGINT, busi_id:DataTypes.STRING,
busi_company_name:DataTypes.BIGINT, busi_company_name:DataTypes.STRING,
},{ },{
paranoid: true,//假的删除 paranoid: true,//假的删除
underscored: true, underscored: true,
......
...@@ -14,16 +14,17 @@ class DKcontractService extends ServiceBase { ...@@ -14,16 +14,17 @@ class DKcontractService extends ServiceBase {
this.usereaccountDao = system.getObject("db.usereaccountDao") this.usereaccountDao = system.getObject("db.usereaccountDao")
this.utilesignbaoSve = system.getObject("service.utilesignbaoSve"); this.utilesignbaoSve = system.getObject("service.utilesignbaoSve");
this.userDao = system.getObject("db.userDao"); this.userDao = system.getObject("db.userDao");
this.restClient = system.getObject("util.restClient"); this.restClient = system.getObject("util.restClient");
this.redisClient = system.getObject("util.redisClient"); this.redisClient = system.getObject("util.redisClient");
this.bankthreelogDao = system.getObject("db.bankthreelogDao");
this.dktemplateSve = system.getObject("service.dktemplateSve")
this.dkaggreementDao = system.getObject("db.dkaggreementDao")
} }
async getInfo(id) { async getInfo(id) {
var attrs = []; var attrs = [];
return await this.dao.model.findOne({ return await this.dao.model.findOne({
where: { id: id }, attrs, raw: true where: {id: id}, attrs, raw: true
}); });
} }
...@@ -34,13 +35,16 @@ class DKcontractService extends ServiceBase { ...@@ -34,13 +35,16 @@ class DKcontractService extends ServiceBase {
sql.push("FROM `c_dkcontract` "); sql.push("FROM `c_dkcontract` ");
sql.push("WHERE dktemplate_id = :dktemplate_id AND usereaccount_id = :usereaccount_id AND eflowstatus = '2' "); 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)}); var list = await this.customQuery(sql.join(" "), {
if(!list || list.length == 0) { usereaccount_id: Number(accountId),
dktemplate_id: Number(dktemplateId)
});
if (!list || list.length == 0) {
return []; return [];
} }
var ids = []; var ids = [];
for(var item of list) { for (var item of list) {
ids.push(item.id); ids.push(item.id);
} }
return ids; return ids;
...@@ -52,13 +56,16 @@ class DKcontractService extends ServiceBase { ...@@ -52,13 +56,16 @@ class DKcontractService extends ServiceBase {
sql.push("FROM `c_dkcontract` "); sql.push("FROM `c_dkcontract` ");
sql.push("WHERE dktemplate_id = :dktemplate_id AND usereaccount_id = :usereaccount_id AND eflowstatus = '2' "); 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)}); var list = await this.customQuery(sql.join(" "), {
if(!list || list.length == 0) { usereaccount_id: Number(accountId),
dktemplate_id: Number(dktemplateId)
});
if (!list || list.length == 0) {
return []; return [];
} }
for(var item of list) { for (var item of list) {
if(item.completed_at) { if (item.completed_at) {
item.completed_at = moment(item.completed_at).format("YYYY-MM-DD HH:mm"); item.completed_at = moment(item.completed_at).format("YYYY-MM-DD HH:mm");
} }
} }
...@@ -84,7 +91,8 @@ class DKcontractService extends ServiceBase { ...@@ -84,7 +91,8 @@ class DKcontractService extends ServiceBase {
if (params.eflowstatusList) { if (params.eflowstatusList) {
where.eflowstatus = { where.eflowstatus = {
[this.db.Op.in]: params.eflowstatusList [this.db.Op.in]: params.eflowstatusList
};; };
;
} }
if (params.accountName || params.accountMobile || params.accountIdno) { if (params.accountName || params.accountMobile || params.accountIdno) {
...@@ -312,7 +320,7 @@ class DKcontractService extends ServiceBase { ...@@ -312,7 +320,7 @@ class DKcontractService extends ServiceBase {
try { try {
let contract = await this.dao.findById(id); let contract = await this.dao.findById(id);
if (!contract || contract.eflowstatus != "2" || contract.fileurl) { if (!contract || contract.eflowstatus != "2" || contract.fileurl) {
return ; return;
} }
//await this.syncYzSign(2134); //await this.syncYzSign(2134);
...@@ -418,5 +426,178 @@ class DKcontractService extends ServiceBase { ...@@ -418,5 +426,178 @@ class DKcontractService extends ServiceBase {
} }
return uuid.join(''); 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
}
}
} }
module.exports = DKcontractService; 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 { ...@@ -1295,6 +1295,7 @@ class EcontractService extends ServiceBase {
var ecompany = await this.ecompanyDao.findById(etemplate.ecompany_id); var ecompany = await this.ecompanyDao.findById(etemplate.ecompany_id);
// p_user // p_user
var user = await this.userDao.findOne({ var user = await this.userDao.findOne({
unionId: unionId, unionId: unionId,
}); });
......
...@@ -236,7 +236,7 @@ class EntcontractService extends ServiceBase { ...@@ -236,7 +236,7 @@ class EntcontractService extends ServiceBase {
type: "0",// 类型 0 一般纳税人 1 小规模纳税人 type: "0",// 类型 0 一般纳税人 1 小规模纳税人
companyName: params.merchantName,//商户名称 companyName: params.merchantName,//商户名称
mobile: params.mobile,//手机号 mobile: params.mobile,//手机号
mainId: "67731101",//代征主体 67731101 测试 67731504 mainId: "67731101",
signedName: params.merchantName, //合同名称 使用商户名称 signedName: params.merchantName, //合同名称 使用商户名称
beginTime: moment().format("YYYY-MM-DD"), //当前时间, // 签约开始时间 beginTime: moment().format("YYYY-MM-DD"), //当前时间, // 签约开始时间
invalidTime: moment().add(2, 'y').format("YYYY-MM-DD"), // 签约失效时间 invalidTime: moment().add(2, 'y').format("YYYY-MM-DD"), // 签约失效时间
...@@ -400,17 +400,75 @@ class EntcontractService extends ServiceBase { ...@@ -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 = { var data = {
// appId: "1202849621743763458", appId: enttemplate.appid,
// mchtId: "1202848945651318786", mchtId: enttemplate.mcthid,
appId: params.toAppId,
mchtId: params.toMcthid,
ageFlag:0, ageFlag:0,
type: "0",// 类型 0 一般纳税人 1 小规模纳税人 type: "0",// 类型 0 一般纳税人 1 小规模纳税人
companyName: params.merchantName,//商户名称 companyName: params.merchantName,//商户名称
mobile: params.mobile,//手机号 mobile: params.mobile,//手机号
mainId: "67731504",//代征主体 67731101 测试 67731504 mainId: settings.apiconfig.getmainId(),//代征主体 67731101 测试 67731504
signedName: params.merchantName, //合同名称 使用商户名称 signedName: params.merchantName, //合同名称 使用商户名称
beginTime: moment().format("YYYY-MM-DD"), //当前时间, // 签约开始时间 beginTime: moment().format("YYYY-MM-DD"), //当前时间, // 签约开始时间
invalidTime: moment().add(2, 'y').format("YYYY-MM-DD"), // 签约失效时间 invalidTime: moment().add(2, 'y').format("YYYY-MM-DD"), // 签约失效时间
...@@ -426,7 +484,6 @@ class EntcontractService extends ServiceBase { ...@@ -426,7 +484,6 @@ class EntcontractService extends ServiceBase {
nonceStr: await this.getUidStr(16, 36) nonceStr: await this.getUidStr(16, 36)
}; };
console.log("有赞商户创建data:", data); console.log("有赞商户创建data:", data);
var signArr = []; var signArr = [];
var keys = Object.keys(data).sort(); var keys = Object.keys(data).sort();
for (var i = 0; i < keys.length; i++) { for (var i = 0; i < keys.length; i++) {
...@@ -434,11 +491,8 @@ class EntcontractService extends ServiceBase { ...@@ -434,11 +491,8 @@ class EntcontractService extends ServiceBase {
var v = data[k]; var v = data[k];
signArr.push(k + "=" + v); signArr.push(k + "=" + v);
} }
var signStr = signArr.join("&") + "&key=" + params.key; var signStr = signArr.join("&") + "&key=" + enttemplate.key;
console.log("有赞商户创建signStr:", signStr);
data.sign = md5(signStr).toUpperCase(); data.sign = md5(signStr).toUpperCase();
console.log("有赞商户创建sign:", data.sign);
data.bizContent = [ data.bizContent = [
{ {
"quickDeductionFactor": 0, "quickDeductionFactor": 0,
...@@ -459,7 +513,6 @@ class EntcontractService extends ServiceBase { ...@@ -459,7 +513,6 @@ class EntcontractService extends ServiceBase {
"maxValue": 214748364700 "maxValue": 214748364700
} }
]; ];
var rtn = null;
try { try {
let url = settings.apiconfig.settleApiConfig().createMerchantApi; let url = settings.apiconfig.settleApiConfig().createMerchantApi;
console.log("有赞商户创建url:", url); console.log("有赞商户创建url:", url);
...@@ -468,9 +521,11 @@ class EntcontractService extends ServiceBase { ...@@ -468,9 +521,11 @@ class EntcontractService extends ServiceBase {
url: url, url: url,
data: data, data: data,
}); });
console.log("有赞商户创建result:", rs.data);
var reso = rs.data; var reso = rs.data;
if(reso.code == -1){
console.log("有赞创建商户错误===========", reso)
return reso;
}
var erchants = await this.yzmerchantsignedDao.findOne({ var erchants = await this.yzmerchantsignedDao.findOne({
companyName: params.merchantName, companyName: params.merchantName,
}); });
...@@ -481,51 +536,10 @@ class EntcontractService extends ServiceBase { ...@@ -481,51 +536,10 @@ class EntcontractService extends ServiceBase {
mchtId: reso.data.mchtId, mchtId: reso.data.mchtId,
mainId: reso.data.mainId, mainId: reso.data.mainId,
secret: reso.data.secret, 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({ var etemplatebusi = await this.etemplatebusiDao.findOne({
template_id:erchants.ecid, template_id:erchants.ecid,
busi_id:erchants.mchtId, busi_id:erchants.mchtId,
...@@ -538,39 +552,135 @@ class EntcontractService extends ServiceBase { ...@@ -538,39 +552,135 @@ class EntcontractService extends ServiceBase {
busi_company_name: erchants.companyName, busi_company_name: erchants.companyName,
}); });
} }
reso.erchants = erchants;
// 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();
// }
return reso; return reso;
} catch (e) { } catch (e) {
console.log(e.stack); console.log(e.stack);
let result = {}; return {code : -1,message:"操作异常"};
result.code = -1; }
result.message = "操作异常";
return result; }
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) { async syncSign(contractId) {
var contract = await this.dao.findById(contractId); var contract = await this.dao.findById(contractId);
if (!contract) { if (!contract) {
...@@ -901,194 +1011,6 @@ class EntcontractService extends ServiceBase { ...@@ -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) { returnjson(code, msg, data) {
return { return {
code: code, code: code,
......
...@@ -23,6 +23,11 @@ class EtemplatebusiService extends ServiceBase { ...@@ -23,6 +23,11 @@ class EtemplatebusiService extends ServiceBase {
return rs; 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) { async getinfo(qobj) {
var sql = "SELECT * FROM c_etemplate_busi WHERE template_id = " + qobj.template_id + " AND busi_id = " + qobj.company_id; 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); var page = await this.customQuery(sql);
......
...@@ -85,6 +85,16 @@ var settings = { ...@@ -85,6 +85,16 @@ var settings = {
return "5111588557" return "5111588557"
} }
}, },
//有赞商户创建 代征主体 //代征主体 67731101 测试 67731504
getmainId : function(){
if (settings.env == "dev") {
return "67731504";
} else {
return "67731101"
}
},
//e签宝appKey //e签宝appKey
eSignBaoAppKey: function () { eSignBaoAppKey: function () {
if (settings.env == "dev") { if (settings.env == "dev") {
......
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