index.js
4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const EventEmitter = require('events')
const config = require('config-lite')({
config_basedir: __dirname,
config_dir: 'config'
})
// const fs = require('fs')
const PDFGenerator = require('./pdfGenerator')
const moment = require('moment')
const FormData = require('form-data')
const axios = require('axios')
const BorrowList = require('../models').BorrowList
const User = require('../models').User
class AgreementCenter {
constructor() {
this.listener = new EventEmitter()
this.init()
}
init() {
this.listener.on('new', async (item) => {
try {
const listId = item.id
if (!listId)throw new Error('need borrow list id')
const list = await BorrowList.findOne({
where: {id: listId, status: '已生效'},
attributes: ['id', 'listNo', 'amount', 'startDate', 'endDate', 'rate', 'usage', 'status'],
include: [{
model: User,
as: 'Borrower',
attributes: ['id', 'name', 'phone', 'idNo']
}, {
model: User,
as: 'Creditor',
attributes: ['id', 'name', 'phone', 'idNo']
}]
})
const data = this.buildLoanData(list)
const loanGenerator = new PDFGenerator('loan', data)
const serviceGenerator = new PDFGenerator('service', data)
const [loanFile, serviceFile] = await Promise.all([
loanGenerator.generate(),
serviceGenerator.generate()
])
// console.log(loanFile)
const submitLoan = await this.submit('loan', loanFile, data)
const submitService = await this.submit('service', serviceFile, data)
console.log(submitLoan.data)
console.log(submitService.data)
if (submitLoan.data.success) {
await list.update({agreementSaveStatus: '成功'})
} else {
await list.update({agreementSaveStatus: '失败'})
}
} catch (e) {
console.log(e)
}
})
}
buildLoanData(list) {
return {
listId: list.listNo,
creditName: list.Creditor.name,
creditId: list.Creditor.idNo,
creditPhone: list.Creditor.phone,
borrowName: list.Borrower.name,
borrowId: list.Borrower.idNo,
borrowPhone: list.Borrower.phone,
listAmount: list.amount,
listStartDay: moment(list.startDate).format('YYYY-MM-DD'),
listEndDay: moment(list.endDate).format('YYYY-MM-DD'),
listRate: Math.floor(list.rate * 100),
listUsage: list.usage,
listTotal: Math.floor((list.amount + (list.amount * list.rate) * moment(list.endDate).diff(moment(list.startDate), 'days') / 365) * 100) / 100,
listDate: moment().format('YYYY-MM-DD')
}
}
emit(eventName, ...args) {
this.listener.emit(eventName, ...args)
}
newList(id) {
this.emit('new', {id: id})
}
async submit(type, buffer, data) {
let json = {
agreementName: type === 'loan' ? '借款协议' : '居间合作协议',
agreementAmount: data.listTotal.toString(),
data: [{
name: data.creditName,
idNo: data.creditId,
type: 'person',
mobile: data.creditPhone,
page: type === 'loan' ? '3' : '2',
offsetX: '0.2',
offsetY: type === 'loan' ? '0.37' : '0.87'
}, {
name: data.borrowName,
idNo: data.borrowId,
type: 'person',
mobile: data.borrowPhone,
page: type === 'loan' ? '3' : '2',
offsetX: '0.2',
offsetY: type === 'loan' ? '0.43' : '0.93'
}]
}
if (type === 'service') {
json.data.push({
type: 'company',
page: '2',
offsetX: '0.4',
offsetY: '0.95'
})
}
json = JSON.stringify(json)
let form = new FormData()
form.append('json', json)
console.log(buffer.length)
form.append('file', buffer, {
filename: 'loanAgreement.pdf', // ... or:
filepath: './loanAgreement.pdf',
contentType: 'application/pdf',
knownLength: buffer.length
})
let formHead = form.getHeaders()
let result = await axios.post(`http://${config.agreementHelper}:7111/sign/contractSign`, form, {headers: formHead})
// let result = await axios.post('http://10.168.169.151:7111/sign/contractSign', form, {headers: formHead})
return result
}
}
const center = new AgreementCenter()
// center.emit('new', {id:'1b20d0ca-2864-4356-8534-2c5de47e0522'})
module.exports = center