This commit is contained in:
2026-10-08 18:18:21 +08:00
parent 9cc1ff546c
commit 1e3095c05e
1911 changed files with 349551 additions and 0 deletions
@@ -0,0 +1,142 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/old/kh/add 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
if (!userInfo.fadadaConfirm && userInfo.authStatus === 1) {
return {
code: 1,
msg: '请先完成认证'
}
} else if (!userInfo.businessCard) {
return {
code: 1,
msg: '请完善名片信息'
}
} else {
if (userInfo.businessCard.status !== 1) {
return {
code: 1,
msg: '您的名片信息未审核,请耐心等待'
}
}
}
if (!userInfo.remainOldNum || parseInt(userInfo.remainOldNum) === 0) return {
code: 1,
msg: '本月旧货发布次数已用完'
}
const isUrgent = data.isUrgent
delete data.isUrgent
const pk = await vk.baseDao.add({
dbName: "jjx-old",
dataJson: {
...data, ...{
quoteNum: 0,
status: 0,
isUrgent: false,
isShow: 0,
}
}
})
const messageUserList = await vk.baseDao.select({
dbName: "jjx-message-config",
whereJson: {
old: true
}
})
const messageList = []
for (let i = 0; i < messageUserList.rows.length; i++) {
if (messageUserList.rows[i].uid !== uid) {
messageList.push({
uid: messageUserList.rows[i].uid,
title: `旧货:${data.title}`,
content: `新的旧货信息发布,赶紧去看看吧`,
type: 'old',
hasRead: false,
pk
})
await pubFun.sendNotifySms(messageUserList.rows[i].uid, 'SMS_474130452')
}
}
if (messageList.length > 0) {
await vk.baseDao.adds({
dbName: "jjx-message",
dataJson: messageList
});
}
await vk.baseDao.updateById({
dbName: "uni-id-users",
id: uid,
dataJson: {
remainOldNum: _.inc(-1)
}
});
if (isUrgent) {
const amountItem = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: '6587dd2fe0ec19027452c5b5'
})
const amount = amountItem.content
let offAmount = amount
let saveAmount = 0, offRate = 100
if (userInfo.userLevel > 0) {
const userLevel = await vk.baseDao.findByWhereJson({
dbName: "jjx-user-level",
whereJson: {
level: userInfo.userLevel
}
})
if (userLevel) {
offRate = parseInt(userLevel.valueAddRate)
offAmount = (amount * (parseInt(userLevel.valueAddRate) / 100)).toFixed(2)
saveAmount = (amount - offAmount).toFixed(2)
}
}
const orderId = await vk.baseDao.add({
dbName: "jjx-order",
dataJson: {
orderNo: vk.pubfn.createOrderNo("39XU", 20),
uid,
orderStatus: 0,
type: 9,
amount,
offAmount,
saveAmount,
offRate,
}
})
await vk.baseDao.add({
dbName: "jjx-order-goods",
dataJson: {
orderId,
goodsId: pk,
num: 1,
goodsName: '旧货信息加急',
goodsPrice: amount,
goodsCover: null,
}
})
res.data = orderId
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,165 @@
'use strict';
const dayjs = require("dayjs");
var isBetween = require('dayjs/plugin/isBetween')
dayjs.extend(isBetween)
module.exports = {
/**
* 新增报价
* @url client/enquiry/quote/kh/addQuote 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid, totalPrice} = data;
let {company, manager, person, accountType} = userInfo
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
let noQuoteNo = false
if (parseInt(userInfo.userLevel) < 3) {
if (parseInt(userInfo.remainQuoteNum) === 0 || !userInfo.remainQuoteNum) {
const checkSheetQuoteNum = await vk.baseDao.findById({
dbName: "jjx-old",
id: data.sheetId
})
if (checkSheetQuoteNum.quoteAmount) {
const checkQuoteNum = await vk.baseDao.findByWhereJson({
dbName: "jjx-user-quote-num",
whereJson: {
uid,
type: 'old',
sheetId: data.sheetId,
}
});
if (!checkQuoteNum || checkQuoteNum.num === 0) noQuoteNo = true
} else noQuoteNo = true
}
noQuoteNo = !!(userInfo.quoteExpiredAt && dayjs(userInfo.quoteExpiredAt).isBefore(dayjs()));
}
if (noQuoteNo) {
return {
code: 1,
msg: "您的报价次数已过期/用完"
}
}
if (userInfo.remainQuoteNum && userInfo.remainQuoteNum > 0) {
await vk.baseDao.update({
dbName: "uni-id-users",
whereJson: {
uid
},
dataJson: {
remainQuoteNum: _.inc(-1)
}
})
}
let subjectName = ''
let subjectMobile = ''
let managerName = ''
let managerMobile = ''
const checkSheet = await vk.baseDao.findById({
dbName: "jjx-old",
id: data.sheetId
})
if (checkSheet.status > 0) return {
code: -1,
msg: "该旧货交易已关闭"
}
if (accountType === 1 && person.personName && person.mobile) {
subjectName = person.personName
subjectMobile = person.mobile
} else {
subjectName = company.companyName
subjectMobile = company.companyMobile
// if (manager && manager.mobile && manager.personName) {
// managerName = manager.personName
// managerMobile = manager.mobile
// }
}
// 添加报价单
res.data = await vk.baseDao.add({
dbName: "jjx-old-quote",// 表名
dataJson: { // 需要新增的数据 json格式
...data,
...{
userId: data.uid,
status: 0,
subjectName,
subjectMobile,
managerName,
managerMobile,
}
}
});
const sheet = vk.baseDao.updateAndReturn({
dbName: "jjx-old",// 表名
whereJson: {
_id: data.sheetId,
},
dataJson: {
quoteNum: _.inc(1)
}
})
const checkMessage = await vk.baseDao.findByWhereJson({
dbName: "jjx-message-config",
whereJson: {
old: true,
uid: sheet.userId
}
})
if (checkMessage) {
let send = true
// if (checkMessage.doNotDisturbRange && checkMessage.doNotDisturbRange[0]) {
// const date = dayjs().format("YYYY-MM-DD")
// const doNotDisturbRangeStart = dayjs(checkMessage.doNotDisturbRange[0]).format("HH:mm")
// const doNotDisturbRangeEnd = dayjs(checkMessage.doNotDisturbRange[1]).format("HH:mm")
// if (dayjs().isBetween(dayjs(`${date} ${doNotDisturbRangeStart}`), dayjs(`${date} ${doNotDisturbRangeEnd}`)))
// send = false
// }
const date = dayjs().format("YYYY-MM-DD")
if (checkMessage.doNotDisturbStart && checkMessage.doNotDisturbStart.length) {
const doNotDisturbRangeStart = dayjs(`${date} ${checkMessage.doNotDisturbStart[0]}:${checkMessage.doNotDisturbStart[1]}`).format("HH:mm")
const doNotDisturbRangeEnd = dayjs(`${date} ${checkMessage.doNotDisturbEnd[0]}:${checkMessage.doNotDisturbEnd[1]}`).format("HH:mm")
if (dayjs().isBetween(dayjs(`${date} ${doNotDisturbRangeStart}`), dayjs(`${date} ${doNotDisturbRangeEnd}`)))
send = false
}
if (checkMessage.tradeAmount && checkMessage.tradeAmount[0]) {
if (sheet.totalPrice < checkMessage.tradeAmount[0] || sheet.totalPrice > checkMessage.tradeAmount[1])
send = false
}
if (send) {
await vk.baseDao.add({
dbName: "jjx-message",
dataJson: {
uid: sheet.userId,
title: `旧货:${sheet.title}报价`,
content: `您的旧货信息有新的报价,赶紧去看看吧`,
type: 'old',
hasRead: false,
pk: data.sheetId
}
});
await pubFun.sendNotifySms(sheet.userId, 'SMS_474185570')
}
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,70 @@
'use strict';
module.exports = {
/**
* 新增报价
* @url client/enquiry/quote/kh/addQuote 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid, totalPrice} = data;
let {company, manager, person, accountType} = userInfo
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const amountItem = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: '6587dd54189f86d49b3d5ff5'
})
const amount = amountItem.content
let offAmount = amount
let saveAmount = 0, offRate = 100
if (userInfo.userLevel > 0) {
const userLevel = await vk.baseDao.findByWhereJson({
dbName: "jjx-user-level",
whereJson: {
level: userInfo.userLevel
}
})
if (userLevel) {
offRate = parseInt(userLevel.valueAddRate)
offAmount = (amount * (parseInt(userLevel.valueAddRate) / 100)).toFixed(2)
saveAmount = (amount - offAmount).toFixed(2)
}
}
const orderId = await vk.baseDao.add({
dbName: "jjx-order",
dataJson: {
orderNo: vk.pubfn.createOrderNo("39XU", 20),
uid,
orderStatus: 0,
type: 10,
amount,
offAmount,
saveAmount,
offRate,
}
})
await vk.baseDao.add({
dbName: "jjx-order-goods",
dataJson: {
orderId,
goodsId: null,
num: 1,
goodsName: '旧货发布次数购买',
goodsPrice: amount,
goodsCover: null,
}
})
res.data = orderId
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,153 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/enquiry/sheet/kh/changeToOnlineSign 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const sheet = await vk.baseDao.updateAndReturn({
dbName: "jjx-old",
whereJson: {
_id: data.id
},
dataJson: {
signMethod: 0,
status: 1
}
});
const quote = await vk.baseDao.findByWhereJson({
dbName: "jjx-old-quote",
whereJson: {
sheetId: data.id,
status: 1
}
});
if (quote) {
const fadadaContractId = vk.pubfn.createOrderNo("OL", 20)
const contractTransactionId = vk.pubfn.createOrderNo("C", 20)
const contractId = await vk.baseDao.add({
dbName: 'jjx-contract',
dataJson: {
fadadaContractId,
contractBase: '', // 原始合同
contractHistory: [], // 历史合同
contractFinal: '', // 归档合同
status: 0,
userId: uid,
type: 'old',
quoteId: quote.id,
sheetId: quote.sheetId,
productList: quote.productList,
productTitle: sheet.title,
tradeMethod: 0,
partyCount: 2,
signCount: 0,
contractType: sheet.contractType,
signMethod: sheet.signMethod,
sellerSupplement: sheet.sellerSupplement,
transactionId: contractTransactionId,
amount: quote.totalPrice,
docTitle: sheet.title,
}
})
// 上传合同模板
//新增 用户与合同的关联记录
await vk.daoCenter.userContractDao.adds([
{
transactionId: vk.pubfn.createOrderNo("E", 20),
userId: quote.userId,
role: 'seller',
sign: false,
contractId
},
{
transactionId: vk.pubfn.createOrderNo("E", 20),
userId: uid,
role: 'buyer',
sign: false,
contractId
}
])
}
// const contractFile = await vk.baseDao.findById({
// dbName: 'jjx-dict',
// id: '657d36befe975f63af1f24e7'
// })
// const signMaxDate = await vk.baseDao.findById({
// dbName: 'jjx-dict',
// id: '657d78958b0da41d311bd94c'
// })
// const buyerSignKeyword = await vk.baseDao.findById({
// dbName: 'jjx-dict',
// id: '657d37972139294200fc9a01'
// })
// const sellerSignKeyword = await vk.baseDao.findById({
// dbName: 'jjx-dict',
// id: '657d37a609664c4f4a5c4afb'
// })
// const signEndDate = vk.pubfn.getOffsetTime(new Date(), {
// day: parseInt(signMaxDate.content),
// mode: "after",
// });
//
// const uploaddocs = await pubFun.fadada('uploaddocs.api', {
// contract_id: contractTransactionId,
// doc_title: sheet.title,
// doc_url: contractFile.content,
// // file: doc_url,
// doc_type: '.pdf'
// })
// if (parseInt(uploaddocs.code) === 1000) {
// await vk.baseDao.updateAndReturn({
// dbName: dbName.contract,
// whereJson: {
// _id: contractId,
// userId: uid
// },
// dataJson: {
// status: 1,
// docTitle: sheet.title,
// signEndDate,
// otherFile: '',
// contractBase: contractFile.content,
// buyerSignKeyword: buyerSignKeyword.content,
// sellerSignKeyword: sellerSignKeyword.content
// }
// })
// await vk.baseDao.updateAndReturn({
// dbName: 'jjx-old',
// whereJson: {
// _id: data.id
// },
// dataJson: {
// status: 2
// }
// })
//
// res.data = uploaddocs.result
// } else {
// return {
// code: -1,
// msg: uploaddocs.msg
// }
// }
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,414 @@
'use strict';
const dbName = require("../../../../dao/config");
const dayjs = require("dayjs");
var isBetween = require('dayjs/plugin/isBetween')
dayjs.extend(isBetween)
const PROCESS_PAY_METHOD = ['预付', '货到验收后付款', '提货付全款', '信誉采购,货到签单后账期:']
const WRITE_INVOICE_TIME = ['付款当月(限20号之前付款,20号之后付款次月开票)', '付款后次月', '付款前']
const INVOICE_TYPE = ['增值税专用发票13%', '增值税普通发票', '普通发票']
module.exports = {
/**
* 同意合作
* @url client/enquiry/quote/kh/confirmQuote 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {
data = {}, userInfo, util, filterResponse, originalParam
} = event;
let {
customUtil,
uniID,
config,
pubFun,
vk,
db,
_
} = util;
let {
uid,
quoteId
} = data;
let res = {
code: 0,
msg: ""
};
// 业务逻辑开始-----------------------------------------------------------
// 修改报价单状态
const quote = await vk.baseDao.updateAndReturn({
dbName: 'jjx-old-quote',
whereJson: {
_id: quoteId,
status: 0
},
dataJson: {
status: 1
}
})
if (!quote) {
return {
code: -1,
msg: '请刷新页面'
}
}
// 获取乙方信息
const quoteUser = await vk.baseDao.select({
dbName: 'uni-id-users',
getMain: true,
getOne: true,
whereJson: {
_id: quote.userId
}
})
// 获取询价单信息
const sheet = await vk.baseDao.updateAndReturn({
dbName: 'jjx-old',
whereJson: {_id: quote.sheetId},
dataJson: {
status: 1,
quoteUid: quote.userId
}
})
// 获取商品信息
const productTitle = sheet.title
if (sheet.type !== 3 && sheet.signMethod !== 1) {
const fadadaContractId = vk.pubfn.createOrderNo("E", 20)
// 新增合同记录
let contractTransactionId = vk.pubfn.createOrderNo("C", 20)
const contractId = await vk.baseDao.add({
dbName: 'jjx-contract',
dataJson: {
fadadaContractId: fadadaContractId,
contractBase: '', // 原始合同
contractHistory: [], // 历史合同
contractFinal: '', // 归档合同
status: 0,
userId: uid,
type: 'old',
quoteId: quoteId,
sheetId: quote.sheetId,
productList: [],
productTitle,
tradeMethod: 0,
partyCount: 2,
signCount: 0,
contractType: sheet.contractType,
signMethod: sheet.signMethod,
sellerSupplement: sheet.sellerSupplement,
transactionId: contractTransactionId,
amount: quote.totalPrice,
docTitle: sheet.title
}
})
await vk.baseDao.updateById({
dbName: 'jjx-old',
id: quote.sheetId,
dataJson: {
status: 1
}
})
const checkMessage = await vk.baseDao.findByWhereJson({
dbName: "jjx-message-config",
whereJson: {
old: true,
uid: quote.userId
}
})
if (checkMessage) {
if (checkMessage.doNotDisturbRange) {
if (dayjs().isBetween(checkMessage.doNotDisturbRange[0], checkMessage.doNotDisturbRange[1])) return
}
await vk.baseDao.add({
dbName: "jjx-message",
dataJson: {
uid: quote.userId,
title: `旧货:${sheet.title}被选商`,
content: `您报价的旧货信息已被选商,赶紧去签合同吧`,
type: 'contract',
hasRead: false,
pk: quote.sheetId
}
});
await pubFun.sendNotifySms(quote.userId, 'SMS_474130453')
}
// 上传合同模板
//新增 用户与合同的关联记录
let buyerUid = uid
let sellerUid = quote.userId
if (sheet.type === 0) {
buyerUid = quote.userId
sellerUid = uid
}
await vk.daoCenter.userContractDao.adds([
{
transactionId: vk.pubfn.createOrderNo("E", 20),
userId: buyerUid,
role: 'buyer',
sign: false,
contractId
},
{
transactionId: vk.pubfn.createOrderNo("E", 20),
userId: sellerUid,
role: 'seller',
sign: false,
contractId
}
])
if (sheet.signMethod === 0) {
const templateId = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: '80e3bed065a5560e075799d24532b14f'
})
const buyerSignKeyword = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: '0b153f9a65a56a2007227cf5157133bf'
})
const sellerSignKeyword = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: '09e7876865a56a320731cb244bbef818'
})
const signMaxDate = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: '657d78958b0da41d311bd94c'
})
const signEndDate = vk.pubfn.getOffsetTime(new Date(), {
day: parseInt(signMaxDate.content),
mode: "after",
});
// const fieldList = await vk.baseDao.select({
// dbName: 'jjx-contract-template',
// whereJson: {
// isOn: true
// }
// })
let buyerSupplement = sheet.supplementary ? sheet.supplementary : ''
let sellerSupplement = quote.remark ? quote.remark : ''
if (quote.supplierExt) sellerSupplement += `${quote.remark ? ',' : ''}${quote.supplierExt}`
let sellerUser = await vk.baseDao.findById({
dbName: 'uni-id-users',
id: quote.userId
})
let buyerUser = await vk.baseDao.findById({
dbName: 'uni-id-users',
id: uid
})
if (sheet.type === 0) {
sellerUser = await vk.baseDao.findById({
dbName: 'uni-id-users',
id: uid
})
buyerUser = await vk.baseDao.findById({
dbName: 'uni-id-users',
id: quote.userId
})
buyerSupplement = quote.remark ? quote.remark : ''
if (quote.supplierExt) buyerSupplement += `,${quote.supplierExt}`
sellerSupplement = sheet.supplementary ? sheet.supplementary : ''
}
let detail = sheet.title
if (sheet.otherCate) detail += `,${sheet.otherCateName}`
if (sheet.type === 0 && sheet.unit) {
detail += `,计价单位: ${sheet.unit},人民币单价: ${quote.totalPrice}元`
}
let tradeInfo = ''
if (sheet.type === 0) tradeInfo = `${sheet.payMethod}`
else tradeInfo = `报价:${quote.totalPrice}元,${sheet.payMethod}`
if (sheet.payMethod === '预付' && sheet.prePayRate) tradeInfo += `,${sheet.prePayRate}%货到付全款`
if (sheet.payMethod === '其他付款方式描述') tradeInfo += `:${sheet.otherPayMethodDesc}`
if (sheet.type === 2) {
tradeInfo += (sheet.invoice ? ',含税' : ',不含税')
if (sheet.invoice) tradeInfo += (',开票时间:' + (sheet.writeInvoiceTime ? WRITE_INVOICE_TIME[sheet.writeInvoiceTime] : '无'))
// tradeInfo += (',发票种类:' + (sheet.invoiceType ? INVOICE_TYPE[sheet.invoiceType] : '无'))
// tradeInfo += (',其他要求:' + (sheet.invoiceOther ? sheet.invoiceOther : '无'))
if (sheet.invoiceOther) tradeInfo += (',其他要求:' + sheet.invoiceOther)
else {
if (sheet.taxType && sheet.invoiceType && sheet.taxRate) tradeInfo += (`,纳税人身份:${sheet.taxType},发票种类:${sheet.invoiceType},税率:${sheet.taxRate}`)
}
tradeInfo += (',报价明细:' + (sheet.invoiceDetail ? sheet.invoiceDetail : '无'))
} else if ([0, 1].includes(sheet.type)) {
if (sheet.invoiceOther) tradeInfo += (',其他要求:' + sheet.invoiceOther)
else {
if (sheet.taxType && sheet.invoiceType && sheet.taxRate) tradeInfo += (`,纳税人身份:${sheet.taxType},发票种类:${sheet.invoiceType},税率:${sheet.taxRate}`)
}
}
let expressRequire = '无'
// expressRequire += `随货资料:${sheet.transportDocuments.join()},其他要求:${sheet.otherTransportDocuments ? sheet.otherTransportDocuments : '无'},运输限制要求:${sheet.transportLimit ? '有' : '无'}`
// if (sheet.transportLimit && sheet.otherTransportRequest) expressRequire += `运输限制说明:${sheet.otherTransportRequest}`
let region = ''
if (sheet.type === 1) region = sheet.deliverAddressRegion.province.name + ' ' + sheet.deliverAddressRegion.city.name + ' ' + sheet.deliverAddressRegion.area.name
else region = sheet.addressRegion.province.name + ' ' + sheet.addressRegion.city.name + ' ' + sheet.addressRegion.area.name
const parameter = {
seller: sellerUser.accountType === 2 ? sellerUser.company.companyName : sellerUser.person.personName,
buyer: buyerUser.accountType === 2 ? buyerUser.company.companyName : buyerUser.person.personName,
date: dayjs().format('YYYY年MM月DD日'),
sellerSignDate: dayjs().format('YYYY年MM月DD日 HH时mm'),
buyerSignDate: dayjs().format('YYYY年MM月DD日 HH时mm'),
contractNo: fadadaContractId,
region,
detail,
info: '无',
tradeInfo,
expressRequire,
defaultDuty: '1.乙方所交产品品种、型号、规格、质量不符合规定的,如果甲方同意利用,应当按质论价;如果甲方不能利用的,应根据产品的具体情况,由乙方负责包换或包修,并承担修理、调换或退货而支付的实际费用;2.乙方不予供货违约责任为甲方的实际损失+违约金,如乙方材料符合订货标准,甲方不能退货和不收货,甲方无条件应按实际本合同订货数量支付100%货款,并支付乙方因此产生的实际费用。带有甲乙双方单位相关收货人和发货人签字的本合同的发货清单事项和内容均视为本合同的补充合同,与本合同有相同的法律效力,双方应共同遵照执行。',
solve: '1、凡因本合同引起的或与本合同有关的任何争议,均可友好协商或仲裁解决,协商或仲裁不成的,双方协商同意在合同签订地人民法院管辖地起诉,违约一方或对合同争议承担主要责任的一方,应承担对方因仲裁和起诉而产生的全部律师代理费、鉴定(检验)费、诉讼保全费、诉讼保险费、公告费、差旅费、执行费、误工費和获取证据产生费用等其他相关费用。2、双方本合同相关权利放弃均应有双方书面作出并加盖公章或授权委托人签字后生效。',
forceMajeure: '甲乙双方的任何一方由于不可抗力或突发公共事件的原因不能履行合同时,应及时向对方通报不能履行或不能完全履行的理由,以减轻可能给对方造成的损失,在取得有关机构证明以后,允许延期履行、部分履行或者不履行合同,并根据情况可部分或全部免予承担违约责任。',
other: '本合同的全部内容由双方平等共同协商一致,共同起草制定,非一方事先拟定,不属于格式条款。本合同自双方签字盖章后生效(包括电子签字、盖章),按本合同内容地址、联系方式寄送的一切文书、函件送达与否,均为视为送达有法律效力,通知途径和本合同内联系方式或地址送达文件双方均予以验证。',
buyerSupplement,
sellerSupplement,
buyerAddress: buyerUser.accountType === 2 ? buyerUser.company.mailAddress : buyerUser.person.address,
sellerAddress: sellerUser.accountType === 2 ? sellerUser.company.mailAddress : sellerUser.person.address,
buyerLegal: buyerUser.accountType === 2 ? buyerUser.company.legalName : '',
sellerLegal: sellerUser.accountType === 2 ? sellerUser.company.legalName : '',
buyerAgent: buyerUser.accountType === 2 ? buyerUser.manager.personName : '',
sellerAgent: sellerUser.accountType === 2 ? sellerUser.manager.personName : '',
buyerMobile: buyerUser.accountType === 2 ? buyerUser.manager.mobile : buyerUser.mobile,
sellerMobile: sellerUser.accountType === 2 ? sellerUser.manager.mobile : sellerUser.mobile,
buyerBankName: buyerUser.accountType === 2 ? buyerUser.company.companyBankName : buyerUser.person.personBankName,
sellerBankName: sellerUser.accountType === 2 ? sellerUser.company.companyBankName : sellerUser.person.personBankName,
buyerAccount: buyerUser.accountType === 2 ? buyerUser.company.companyAccount : buyerUser.person.personAccount,
sellerAccount: sellerUser.accountType === 2 ? sellerUser.company.companyAccount : sellerUser.person.personAccount,
}
// for (let i = 0; i < fieldList.length; i++) {
//
// const field = fieldList[i]
// parameter[field.field] = ''
// }
const uploaddocs = await pubFun.fadada('generate_contract.api', {
template_id: templateId.content,
contract_id: contractTransactionId,
parameter_map: JSON.stringify(parameter)
})
let otherFileResList = []
if (quote.files && quote.files.length > 0) {
for (let i = 0; i < quote.files.length; i++) {
otherFileResList.push(contractTransactionId + 'qf' + i.toString())
await pubFun.fadada('uploaddocs.api', {
contract_id: contractTransactionId + 'qf' + i.toString(),
doc_title: sheet.title + `:报价附件${i + 1}`,
doc_url: quote.files[i],
doc_type: '.pdf'
})
}
}
if (otherFileResList.length) {
otherFileResList.unshift(contractTransactionId)
// 合并接口
contractTransactionId = vk.pubfn.createOrderNo("MC", 20)
const mergeRes = await pubFun.fadada('merge_contract.api', {
contract_id: contractTransactionId,
doc_title: sheet.title,
contract_ids: otherFileResList.join()
})
console.log('mergeRes', mergeRes)
console.log('otherFileResList', otherFileResList)
}
await vk.baseDao.update({
dbName: dbName.contract,
whereJson: {
_id: contractId
},
dataJson: {
transactionId: contractTransactionId,
}
})
if (parseInt(uploaddocs.code) === 1000) {
await vk.baseDao.updateAndReturn({
dbName: dbName.contract,
whereJson: {
_id: contractId,
userId: uid
},
dataJson: {
status: 1,
docTitle: sheet.title,
signEndDate,
otherFile: '',
contractBase: null,
buyerSignKeyword: buyerSignKeyword.content,
sellerSignKeyword: sellerSignKeyword.content
}
})
await vk.baseDao.updateAndReturn({
dbName: 'jjx-old',
whereJson: {
_id: quote.sheetId
},
dataJson: {
status: 2
}
})
res.data = uploaddocs.result
await vk.baseDao.add({
dbName: "jjx-message",
dataJson: {
uid: quote.userId,
title: `旧货:${sheet.title}待签合同`,
content: `您报价的旧货信息已创建合同,赶紧去签订合同吧`,
type: 'contract',
hasRead: false,
pk: quote.sheetId
}
});
await pubFun.sendNotifySms(quote.userId, 'SMS_474195497')
} else {
return {
code: -1,
msg: uploaddocs.msg
}
}
}
}
// else {
// const orderId = await vk.baseDao.add({
// dbName: "jjx-order",
// dataJson: {
// orderNo: vk.pubfn.createOrderNo("CO", 20),
// uid: uid,
// sellerUid: quote.userId,
// orderStatus: 0,
// type: 4,
// amount: quote.totalPrice,
// offAmount: quote.totalPrice,
// signMethod: 1
// }
// })
//
// await vk.baseDao.add({
// dbName: "jjx-order-goods",
// dataJson: {
// orderId,
// goodsId: null,
// num: 1,
// goodsName: '旧货交易',
// goodsPrice: quote.totalPrice,
// goodsCover: null,
// }
// })
// }
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,27 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/enquiry/sheet/kh/delete 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
let {id} = data;
if (vk.pubfn.isNull(id)) {
return {code: -1, msg: 'id不能为空'};
}
await vk.baseDao.deleteById({
dbName: 'jjx-old',
id
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,147 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/old/kh/getList 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid, pageIndex, pageSize = -1} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
let whereJson = {}
if (vk.pubfn.isNotNull(data.sellerOnly)) {
// whereJson.uid = data.uid
// whereJson.type = _.in([0, 2, 3])
whereJson = _.or([
_.and({
uid: data.uid,
type: _.in([0, 3]),
}),
_.and([
{
uid: data.uid,
type: 2,
rentType: 0
}
])
])
if (vk.pubfn.isNotNull(data.signMethod)) {
if (parseInt(data.signMethod) === 1) whereJson[0].push({
signMethod: parseInt(data.signMethod
)
})
else whereJson.signMethod = whereJson.push({
signMethod: _.neq(1)
}
)
}
}
if (vk.pubfn.isNotNull(data.buyerOnly)) {
// whereJson.uid = data.uid
// whereJson.type = _.in([0, 2, 3])
const orArr = [
_.and({
uid: data.uid,
type: _.in([1]),
}),
_.and([
{
uid: data.uid,
type: 2,
rentType: 0
}
]),
_.and({
quoteUid: data.quoteUid,
type: _.in([0, 3]),
}),
_.and([
{
quoteUid: data.quoteUid,
type: 2,
rentType: 1
}
]),
]
if (vk.pubfn.isNotNull(data.signMethod)) {
if (parseInt(data.signMethod) === 1) orArr.push(_.and({
signMethod: parseInt(data.signMethod)
}))
else {
orArr.push(_.and({
signMethod: _.neq(1)
}))
}
}
whereJson = _.or([
...orArr
])
} else {
if (vk.pubfn.isNotNull(data.quoteUid)) {
whereJson.quoteUid = data.quoteUid;
} else whereJson.uid = data.uid;
if (vk.pubfn.isNotNull(data.signMethod)) {
if (parseInt(data.signMethod) === 1) whereJson.signMethod = parseInt(data.signMethod);
else whereJson.signMethod = _.neq(1)
}
}
console.log('whereJson', whereJson)
// console.log(whereJson)
res = await vk.baseDao.selects({
dbName: "jjx-old",
getCount: true,
pageIndex,
pageSize,
whereJson,
sortArr: [{"name": "_add_time", "type": "desc"}],
foreignDB: [
{
dbName: "jjx-old-quote",
localKey: "_id",
foreignKey: "sheetId",
as: "quoteList",
limit: 500,
foreignDB: [
{
dbName: "uni-id-users",
localKey: "uid",
foreignKey: "_id",
as: "user",
limit: 1
},
]
},
]
})
for (let i = 0; i < res.rows.length; i++) {
if (res.rows[i].quoteUid) {
res.rows[i].otherUser = await vk.baseDao.findById({
dbName: "uni-id-users",
id: res.rows[i].quoteUid
})
}
res.rows[i].user = await vk.baseDao.findById({
dbName: "uni-id-users",
id: res.rows[i].uid
})
res.rows[i].contract = await vk.baseDao.findByWhereJson({
dbName: "jjx-contract",
whereJson: {
sheetId: res.rows[i]._id
}
})
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,158 @@
'use strict';
module.exports = {
/**
* 同意合作
* @url client/enquiry/quote/kh/confirmQuote 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {
data = {}, userInfo, util, filterResponse, originalParam
} = event;
let {
customUtil,
uniID,
config,
pubFun,
vk,
db,
_
} = util;
let {
uid,
quoteId
} = data;
let res = {
code: 0,
msg: ""
};
// 业务逻辑开始-----------------------------------------------------------
// 修改报价单状态
const quote = await vk.baseDao.updateAndReturn({
dbName: 'jjx-old-quote',
whereJson: {
_id: quoteId,
status: 0
},
dataJson: {
status: 1
}
})
if (!quote) {
return {
code: -1,
msg: '请刷新页面'
}
}
// 获取乙方信息
const quoteUser = await vk.baseDao.select({
dbName: dbName.user,
getMain: true,
getOne: true,
whereJson: {
_id: quote.userId
}
})
// 获取询价单信息
const sheet = await vk.baseDao.selects({
dbName: 'jjx-old',
whereJson: {_id: quote.sheetId},
getMain: true,
getOne: true
})
// 获取商品信息
const productTitle = sheet.title
const fadadaContractId = vk.pubfn.createOrderNo("E", 20)
// 上传合同模板并填充
// if(sheet.signMethod == 0 && sheet.contractType == 0) {
// pubFun.fadada('generate_contract.api', {
// template_id: '20231120',
// contract_id: fadadaContractId,
// parameter_map: JSON.stringify({
// jiaName: userInfo.accountType == 1?userInfo.person.personName: userInfo.company.companyName,
// jiaDate: '',
// jiaPhone: '',
// yiName: userInfo.accountType == 1?userInfo.person.personName: userInfo.company.companyName,
// yiDate: '',
// yiPhone: '',
// sellerSupplement: '',
// }),
// })
// }
// 新增合同记录
const contractId = await vk.baseDao.add({
dbName: 'jjx-contract',
dataJson: {
fadadaContractId: fadadaContractId,
contractBase: '', // 原始合同
contractHistory: [], // 历史合同
contractFinal: '', // 归档合同
status: 0,
userId: uid,
type: 'old',
quoteId: quoteId,
sheetId: quote.sheetId,
productList: [],
productTitle,
tradeMethod: quote.tradeMethod,
partyCount: 2,
signCount: 0,
contractType: sheet.contractType,
signMethod: sheet.signMethod,
sellerSupplement: sheet.sellerSupplement,
transactionId: vk.pubfn.createOrderNo("C", 20),
amount: quote.totalPrice,
}
})
await vk.baseDao.updateById({
dbName: 'jjx-old',
id: quote.sheetId,
dataJson: {
status: 1
}
})
await vk.baseDao.updateById({
dbName: 'jjx-old-quote',
id: quoteId,
dataJson: {
status: 1
}
})
// 上传合同模板
//新增 用户与合同的关联记录
await vk.daoCenter.userContractDao.adds([
{
transactionId: vk.pubfn.createOrderNo("E", 20),
userId: uid,
role: 'buyer',
sign: false,
contractId
},
{
transactionId: vk.pubfn.createOrderNo("E", 20),
userId: quote.userId,
role: 'seller',
sign: false,
contractId
}
])
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,67 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/old/pub/getDetail 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
res = await vk.baseDao.findByWhereJson({
dbName: "jjx-old",
getOne: true,
whereJson: {
_id: data.id
},
});
if (res) {
const {rows} = await vk.baseDao.select({
dbName: "jjx-old-quote",
whereJson: {
sheetId: data.id
},
limit: 500,
sortArr: [{"name": "_add_time", "type": "desc"}],
})
for(let i = 0; i< rows.length; i++){
rows[i].user = await vk.baseDao.findByWhereJson({
dbName: "uni-id-users",
getOne: true,
whereJson: {
_id: rows[i].userId
},
})
}
res.quoteList = rows
res.hasQuote = false
res.isMine = res.uid === uid
res.quoteList.forEach(quote => {
if (quote.userId === uid) res.hasQuote = true
})
res.user = await vk.baseDao.findByWhereJson({
dbName: "uni-id-users",
getOne: true,
whereJson: {
_id: res.uid
},
})
}else {
return {
code: -1,
msg: "未找到该旧货信息"
}
}
// res = result.rows
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,78 @@
'use strict';
const dayjs = require("dayjs");
module.exports = {
/**
* XXXnameXXX
* @url client/old/pub/getList 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let {data = {}, userInfo, util, filterResponse, originalParam} = event;
let {customUtil, uniID, config, pubFun, vk, db, _} = util;
let {uid, pageIndex, pageSize, type, isUrgent, rentType} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const whereJson = {isShow: 1, status: 0}
if (vk.pubfn.isNotNull(data.keyword) && data.keyword !== '') {
whereJson.title = new RegExp(data.keyword)
}
if (vk.pubfn.isNotNull(type)) {
whereJson.type = parseInt(type)
if (parseInt(type) === 2) {
if (vk.pubfn.isNotNull(rentType)) whereJson.rentType = parseInt(rentType)
}
}
if (vk.pubfn.isNotNull(isUrgent) && isUrgent) whereJson.isUrgent = true
if (vk.pubfn.isNotNull(data.categoryIds)) {
if (data.categoryIds.length === 1 && data.categoryIds[0] === 0) {
whereJson['category'] = ''
} else {
whereJson.category = _.in(data.categoryIds)
}
}
if (vk.pubfn.isNotNull(data.provinceCodes)) {
whereJson['addressRegion.province.code'] = _.in(data.provinceCodes)
}
if (vk.pubfn.isNotNull(data.cityCode)) {
whereJson['addressRegion.city.code'] = _.in([data.cityCode])
}
whereJson['expiredTime'] = _.gte(dayjs().format('YYYY-MM-DD'))
console.log(whereJson)
res = await vk.baseDao.selects({
dbName: "jjx-old",
pageIndex,
pageSize,
getCount: true,
sortArr: [{"name": "isUrgent", "type": "desc"}, {"name": "_add_time", "type": "desc"}],
whereJson,
foreignDB: [
{
dbName: "uni-id-users",
localKey: "uid",
foreignKey: "_id",
as: "user",
limit: 1, // limit=1则以对象形式返回
fieldJson: {
_id: true,
company: {
companyName: true,
mobile: true,
},
person: {
personName: true,
mobile: true,
},
businessCard: true,
accountType: true,
},
}
]
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}