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,65 @@
'use strict';
const dayjs = require("dayjs");
var isBetween = require('dayjs/plugin/isBetween')
dayjs.extend(isBetween)
const DEFAULT_NOTARY_SERVICE_RATE = 0.1;
module.exports = {
/**
* XXXnameXXX
* @url client/enquiry/sheet/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: '您的名片信息未审核,请耐心等待'
}
}
}
// 这里需要把 params1 params2 params3 改成你数据库里允许用户添加的字段
let dbName = "jjx-enquiry-sheet";
const notaryServiceRate = data.tradeMethod === 1
? ((data.notaryServiceRate === undefined || data.notaryServiceRate === null || data.notaryServiceRate === '') ? DEFAULT_NOTARY_SERVICE_RATE : data.notaryServiceRate)
: null
res.id = await vk.baseDao.add({
dbName,
dataJson: {
...data,
...{
answerNumber: 0,
userId: uid,
status: 0,
quoteNum: 0,
isShow: 0,
notaryServiceRate
},
}
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,155 @@
'use strict';
const dbName = require("../../../../../dao/config");
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-enquiry-sheet",
whereJson: {
_id: data.id
},
dataJson: {
signMethod: 0,
status: 1
}
});
const quote = await vk.baseDao.findByWhereJson({
dbName: "jjx-enquiry-quote",
whereJson: {
sheetId: data.id,
status: 1
}
});
if (quote) {
const fadadaContractId = vk.pubfn.createOrderNo("E", 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: 'enquiry',
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-enquiry-sheet',
// whereJson: {
// _id: data.id
// },
// dataJson: {
// status: 2
// }
// })
//
// res.data = uploaddocs.result
// } else {
// return {
// code: -1,
// msg: uploaddocs.msg
// }
// }
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,28 @@
'use strict';
const dbName = require('../../../../../dao/config.js')
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: dbName.enquirySheet,
id:_id
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,186 @@
'use strict';
module.exports = {
/**
* 获取用户发布的询价单
* @url client/enquiry/sheet/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, keyword, categoryIds, provinceCodes, formData, status, isSeller} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
let dbName = "jjx-enquiry-sheet";
let whereJson = {isShow: 1};
if (vk.pubfn.isNotNull(keyword)) whereJson.title = new RegExp(keyword)
if (vk.pubfn.isNotNull(isSeller) && isSeller) whereJson.otherUid = uid
else whereJson.userId = uid
if (vk.pubfn.isNotNull(status) && status !== 'all') {
if (status === 'noQuote') {
whereJson.quoteNum = 0
whereJson.status = 0
}
else if (status === 'notPick') {
whereJson.quoteNum = _.gt(0)
whereJson.status = 0
}
else if (status === 'picked') whereJson.status = _.in([1, 2])
}
if (formData && formData.hasOwnProperty('companyList') && vk.pubfn.isNotNull(formData.companyList)) {
whereJson.userId = _.in(formData.companyList)
}
if (formData && formData.hasOwnProperty('categoryIds') && vk.pubfn.isNotNull(formData.categoryIds)) {
whereJson.categoryIds = _.in(formData.categoryIds)
}
// if (vk.pubfn.isNotNull(provinceCodes)) {
// whereJson['address.province.code'] = _.in(provinceCodes)
// }
// console.log('whereJson', whereJson)
res = await vk.baseDao.selects({
dbName,
pageIndex,
pageSize,
getCount: true,
whereJson,
sortArr: [{name: "_add_time", type: "desc"}],
foreignDB: [
{
dbName: "uni-id-users",
localKey: "userId",
foreignKey: "_id",
as: "user",
limit: 1, // limit=1则以对象形式返回
fieldJson: {
_id: true,
company: {
companyName: true
},
person: {
personName: true
},
businessCard: true,
accountType: true,
},
},
{
dbName: "uni-id-users",
localKey: "otherUid",
foreignKey: "_id",
as: "otherUser",
limit: 1, // limit=1则以对象形式返回
fieldJson: {
_id: true,
company: {
companyName: true,
mobile: true
},
person: {
personName: true,
mobile: true
},
businessCard: true,
accountType: true,
},
},
{
dbName: "jjx-enquiry-quote",
localKey: "_id",
foreignKey: "sheetId",
as: "quoteList",
limit: 500, // limit=1则以对象形式返回
}
]
});
const rows = res.rows
const rowIds = rows.map(item => item._id)
const orderMap = {}
if (rowIds.length > 0) {
const orderRes = await vk.baseDao.select({
dbName: 'jjx-order',
whereJson: {
sheetId: _.in(rowIds)
},
sortArr: [{name: "_add_time", type: "desc"}]
})
if (orderRes && orderRes.rows) {
orderRes.rows.forEach(order => {
if (!orderMap[order.sheetId]) orderMap[order.sheetId] = order
})
}
}
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
row.order = orderMap[row._id] || null
for (let j = 0; j < row.productList.length; j++) {
const product = rows[i].productList[j]
if (product && product.goodsId) {
rows[i].productList[j].template = await vk.baseDao.findById({
dbName,
id: product.goodsId
});
}
}
row.contract = await vk.baseDao.findByWhereJson({
dbName: 'jjx-contract',
whereJson: {
sheetId: row._id,
type: 'enquiry',
},
})
}
res.notPickNum = await vk.baseDao.count({
dbName,
whereJson: {
isShow: 1,
userId: uid,
status: 0,
quoteNum: _.gt(0)
},
});
res.pickedNum = await vk.baseDao.count({
dbName,
whereJson: {
isShow: 1,
userId: uid,
status: _.in([1, 2])
},
});
res.noQuoteNum = await vk.baseDao.count({
dbName,
whereJson: {
isShow: 1,
userId: uid,
quoteNum: 0,
status: 0
},
});
res.all = await vk.baseDao.count({
dbName,
whereJson: {
isShow: 1,
userId: uid,
},
});
res.rows = rows
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,74 @@
'use strict';
module.exports = {
/**
* 获取报价单详情
* @url client/enquiry/sheet/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, _id } = data;
let res = { code: 0, msg: "" };
// 业务逻辑开始-----------------------------------------------------------
let dbName = "jjx-enquiry-sheet";
res.data = await vk.baseDao.findByWhereJson({
dbName,
whereJson: {
_id: _id
},
// foreignDB: [
// {
// dbName:"uni-id-users",
// localKey:"userId",
// 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,
// },
// }
// ]
});
res.data.user = await vk.baseDao.findByWhereJson({
dbName:"uni-id-users",
whereJson: {
_id: res.data.userId
}
})
if (res.data.user && (res.data.user.isNotaryBusiness === undefined || res.data.user.isNotaryBusiness === null)) {
res.data.user.isNotaryBusiness = res.data.user.notaryUnionPayProfile && res.data.user.notaryUnionPayProfile.status === 1 ? 1 : 0
}
res.data.quoteList = []
const quoteList = await vk.baseDao.select({
dbName: "jjx-enquiry-quote",
whereJson: {
sheetId: _id
}
})
res.data.hasQuote = false
res.data.isMine = res.data.userId === uid
quoteList.rows.forEach(quote => {
if (quote.userId === uid) res.data.hasQuote = true
})
if (quoteList.rows.length > 0) res.data.quoteList = quoteList.rows
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,195 @@
'use strict';
const dayjs = require("dayjs");
module.exports = {
/**
* 获取用户发布的询价单
* @url client/enquiry/sheet/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,
keyword,
categoryIds,
provinceCodes,
formData,
status,
companyList,
cateList,
material,
area,
latest,
} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
let dbName = "jjx-enquiry-sheet";
// const andArr = [];
let whereJson = {isShow: 1}
if (data.userId && vk.pubfn.isNotNull(data.userId)) {
// andArr.push({userId: data.userId})
whereJson.userId = data.userId
} else {
// andArr.push({status: 0})
whereJson.status = 0
}
if (vk.pubfn.isNotNull(keyword)) {
whereJson.title = new RegExp(keyword)
}
if (vk.pubfn.isNotNull(area)) {
console.log(area.length)
if (area.length === 3) whereJson['addressRegion.area.code'] = area[2]
if (area.length === 2) whereJson['addressRegion.city.code'] = area[1]
if (area.length === 1) whereJson['addressRegion.province.code'] = area[0]
}
if (vk.pubfn.isNotNull(latest)) {
whereJson['answerStartTime'] = _.gte(dayjs().format('YYYY-MM-DD HH:mm:ss'))
}
if (vk.pubfn.isNotNull(status) && status !== 'all') {
// if (status === 'noQuote') andArr.push({quoteNum: 0})
// else if (status === 'notPick') andArr.push({status: 0})
// else if (status === 'picked') andArr.push({status: 1})
if (status === 'noQuote') whereJson.quoteNum = 0
else if (status === 'notPick') whereJson.status = 0
else if (status === 'picked') whereJson.status = 1
}
if (formData && formData.hasOwnProperty('companyList') && vk.pubfn.isNotNull(formData.companyList)) {
// andArr.push({userId: _.in(formData.companyList)})
whereJson.stealFactory = _.in(formData.companyList)
}
if (vk.pubfn.isNotNull(companyList)) {
// andArr.push({userId: _.in(companyList)})
whereJson.stealFactory = _.in(companyList)
}
if (vk.pubfn.isNotNull(cateList)) {
// andArr.push({userId: _.in(companyList)})
if (cateList.length === 1 && cateList[0] === 0) {
whereJson.otherCate = _.exists(true)
whereJson.otherCate = _.neq(null)
}
else whereJson.nameList = _.in(cateList)
}
console.log(whereJson)
if (vk.pubfn.isNotNull(material)) {
// andArr.push({userId: _.in(companyList)})
whereJson.material = _.in(material)
}
// if (vk.pubfn.isNotNull(categoryIds)) {
// whereJson.userId = _.in(categoryIds)
// }
// if (formData && formData.hasOwnProperty('categoryIds') && vk.pubfn.isNotNull(formData.categoryIds)) {
// whereJson.categoryIds = _.in(formData.categoryIds)
// }
// if (vk.pubfn.isNotNull(provinceCodes)) {
// whereJson['address.province.code'] = _.in(provinceCodes)
// }
// const cateFilterList = []
// if (vk.pubfn.isNotNull(cateList)) {
// cateList.forEach(item => {
// cateFilterList.push({
// nameList: item,
// })
// })
// }
res = await vk.baseDao.selects({
dbName,
pageIndex,
pageSize,
getCount: true,
whereJson,
sortArr: [{name: "_add_time", type: "desc"}],
foreignDB: [
{
dbName: "uni-id-users",
localKey: "userId",
foreignKey: "_id",
as: "user",
limit: 1, // limit=1则以对象形式返回
fieldJson: {
_id: true,
company: {
companyName: true
},
person: {
personName: true
},
businessCard: true,
accountType: true,
},
},
{
dbName: "jjx-enquiry-quote",
localKey: "_id",
foreignKey: "sheetId",
as: "quoteList",
limit: 500, // limit=1则以对象形式返回
}
]
});
const rows = res.rows
rows.forEach((row, rowIndex) => {
row.productList.forEach(async (product, productIndex) => {
rows[rowIndex].productList[productIndex].template = await vk.baseDao.findById({
dbName,
id: product.goodsId
});
})
})
res.notPickNum = await vk.baseDao.count({
dbName,
whereJson: {
userId: uid,
status: 0
},
});
res.pickedNum = await vk.baseDao.count({
dbName,
whereJson: {
userId: uid,
status: 1
},
});
res.noQuoteNum = await vk.baseDao.count({
dbName,
whereJson: {
userId: uid,
quoteNum: 0
},
});
res.all = await vk.baseDao.count({
dbName,
whereJson: {
userId: uid,
},
});
res.rows = rows
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}