index.js
4.08 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
const EventEmitter = require('events')
// 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://20.20.20.109:7111/sign/contractSign', form, {headers: formHead})
return result
}
}
const center = new AgreementCenter()
module.exports = center