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,127 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/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: ""};
// 业务逻辑开始-----------------------------------------------------------
const companyList = []
let goods
if (data.type === 0) {
goods = await vk.baseDao.findById({
dbName: "jjx-goods",
id: data.goodsId
})
if (goods.companyId) companyList.push(goods.companyId)
} else {
goods = data.goods
}
let amount
if (goods.sku) {
const sku = goods.sku.find(item => item._index === data.skuId)
amount = sku.values * data.num
}else {
amount = goods.amount * data.num
}
let ensureIndex = 0
if (data.ensureIndex) ensureIndex = data.ensureIndex
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 && ![2, 3].includes(data.type)) {
offRate = parseInt(userLevel.valueAddRate)
offAmount = (amount * (parseInt(userLevel.valueAddRate) / 100)).toFixed(2)
saveAmount = (amount - offAmount).toFixed(2)
}
}
// orderStatus 0待支付 1已支付待发货 2已发货待收货 3已收货待完成 4已完成 5退款审核中 6退款成功 7退款失败 10 待设置价格 11已派单待完成(平台服务)
// type 0: 商品
// type 1: 自营
// type 2: 保证金
// type 3: 会员升级
// type 4: 询价
// type 5: 加工
// type 6: 旧货
// type 7: 询价次数
// type 8: 现货广告
// type 9: 旧货加急
// type 10: 旧货次数
// type 11: 下载次数
// type 12: 合同下载
// type 13: 签约宝次数
// type 14: 签约宝
// type 15: 自营询价
const defaultAddress = await vk.baseDao.findByWhereJson({
dbName: "jjx-user-address",
whereJson: {
uid,
isDefault: true
}
})
let name = '', phone = '', addressRegion = null, addressDetail = ''
if (defaultAddress) {
name = defaultAddress.name
phone = defaultAddress.phone
addressRegion = defaultAddress.addressRegion
addressDetail = defaultAddress.addressDetail
}
const orderId = await vk.baseDao.add({
dbName: "jjx-order",
dataJson: {
orderNo: vk.pubfn.createOrderNo("39XU", 24),
// orderNo: vk.pubfn.createOrderNo("3199", 24),
uid,
orderStatus: 0,
type: data.type,
amount,
offAmount,
saveAmount,
offRate,
name,
phone,
addressRegion,
addressDetail,
companyList,
ensureIndex,
}
})
await vk.baseDao.add({
dbName: "jjx-order-goods",
dataJson: {
orderId,
goodsId: data.goodsId,
skuId: data.skuId,
num: data.num,
goodsName: goods.name,
goodsPrice: goods.amount,
goodsCover: goods.cover,
companyId: goods.companyId,
}
})
res.data = orderId
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,130 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/addFromList 前端调用的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 amount = 0
const cartList = await vk.baseDao.selects({
dbName: "jjx-cart",
whereJson: {
uid,
_id: _.in(data.ids)
},
foreignDB: [
{
dbName: "jjx-goods", // 副表名
localKey: "goodsId", // 主表外键字段名
foreignKey: "_id", // 副表外键字段名
as: "goods",
limit: 1,
},
]
})
if (cartList.total === 0) return {
code: -1,
msg: "购物车中没有此商品"
}
for (const item of cartList.rows) {
const sku = item.goods.sku.find(sku => sku._index === item.skuId)
amount += item.num * parseFloat(sku.values)
}
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)
saveAmount = amount - offAmount
}
saveAmount = saveAmount.toFixed(2)
}
const defaultAddress = await vk.baseDao.findByWhereJson({
dbName: "jjx-user-address",
whereJson: {
uid,
isDefault: true
}
})
let name = '', phone = '', addressRegion = null, addressDetail = ''
if (defaultAddress) {
name = defaultAddress.name
phone = defaultAddress.phone
addressRegion = defaultAddress.addressRegion
addressDetail = defaultAddress.addressDetail
}
const companyList = []
for (const item of cartList.rows) {
if (item.goods.companyId) companyList.push(item.goods.companyId)
}
const orderId = await vk.baseDao.add({
dbName: "jjx-order",
dataJson: {
orderNo: vk.pubfn.createOrderNo("39XU", 20),
orderStatus: 0,
type: data.type,
uid,
amount,
offAmount,
saveAmount,
offRate,
name,
phone,
addressRegion,
addressDetail,
companyList,
}
})
const list = []
for (const item of cartList.rows) {
list.push({
orderId: orderId,
goodsId: item.goodsId,
num: item.num,
goodsName: item.goods.name,
goodsPrice: parseFloat(item.goods.amount),
goodsCover: item.goods.cover,
skuId: item.skuId,
companyId: item.goods.companyId,
})
}
await vk.baseDao.adds({
dbName: "jjx-order-goods",
dataJson: list
})
await vk.baseDao.del({
dbName: "jjx-cart",
whereJson: {
uid,
_id: _.in(data.ids)
}
})
res.data = orderId
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,31 @@
'use strict';
const dayjs = require("dayjs");
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/changeOrderStatus 前端调用的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, orderStatus, sendMethod, resultFiles } = data;
let res = { code: 0, msg: "" };
// 业务逻辑开始-----------------------------------------------------------
await vk.baseDao.updateById({
dbName: "jjx-order",
id: data.id,
dataJson: {
orderStatus,
sendMethod,
resultFiles,
expressTime: dayjs().valueOf(),
}
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,48 @@
'use strict';
module.exports = {
/**
* 查询当前买家 24 小时内即将自动划付的公证付款申请。
*/
main: async (event) => {
const {data = {}, util} = event;
const {uid} = data;
const {vk, _} = util;
const now = Date.now();
const deadline = now + 24 * 60 * 60 * 1000;
const result = await vk.baseDao.select({
dbName: 'jjx-order-pay-list',
whereJson: _.and([
{
buyerUid: uid,
isNotaryPay: true,
isNotaryApply: true,
hasPaid: true,
buyerRefuse: false,
sellerConfirm: false,
},
{autoTransferTimestamp: _.gte(now)},
{autoTransferTimestamp: _.lte(deadline)},
]),
sortArr: [{name: 'autoTransferTimestamp', type: 'asc'}],
pageIndex: 1,
pageSize: 20,
});
return {
code: 0,
msg: '',
data: {
count: (result.rows || []).length,
rows: (result.rows || []).map(item => ({
orderId: item.orderId,
type: item.type,
amount: item.amount,
autoTransferAt: item.autoTransferAt,
autoTransferTimestamp: item.autoTransferTimestamp,
})),
},
};
},
};
@@ -0,0 +1,67 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/getInfo 前端调用的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, resetOrderNo} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
res = await vk.baseDao.selects({
dbName: "jjx-order",
getOne: true,
getMain: true,
whereJson: {
_id: data.id
},
foreignDB: [
{
dbName: "jjx-order-goods",
localKey: "_id",
foreignKey: "orderId",
as: "goods",
}
]
});
if (vk.pubfn.isNotNull(resetOrderNo) && resetOrderNo && res) {
const orderNo = vk.pubfn.createOrderNo("39XU", 24)
// const orderNo = vk.pubfn.createOrderNo("3199", 24)
await vk.baseDao.updateAndReturn({
dbName: "jjx-order",
whereJson: {
_id: data.id
},
dataJson: {
orderNo
}
});
res.orderNo = orderNo
}
if (res.type === 0) {
for (const goodsItem of res.goods) {
const goods = await vk.baseDao.findById({
dbName: "jjx-goods",
id: goodsItem.goodsId
});
goodsItem.sku = goods.sku.find(item => item._index === goodsItem.skuId)
if (goods.companyId) {
goodsItem.company = await vk.baseDao.findById({
dbName: "uni-id-users",
id: goods.companyId
})
}
}
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,203 @@
'use strict';
const dayjs = require("dayjs");
module.exports = {
/**
* XXXnameXXX
* @url client/order/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, type, pageIndex, pageSize, isSeller, signMethod, orderStatus, keyword} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const whereJsonArr = []
if (!vk.pubfn.isNull(type)) {
if (Array.isArray(type)) whereJsonArr.push({type: _.in(type)})
else whereJsonArr.push({type})
}
if (vk.pubfn.isNull(isSeller) || parseInt(isSeller) === 0) whereJsonArr.push({uid})
else {
whereJsonArr.push(_.or([
{
sellerUid: uid
},
{
companyList: _.in([uid])
}
]))
}
if (vk.pubfn.isNotNull(signMethod)) whereJsonArr.push({signMethod})
else whereJsonArr.push({signMethod: _.neq(1)})
if (vk.pubfn.isNotNull(orderStatus)) whereJsonArr.push({orderStatus})
else whereJsonArr.push({orderStatus: _.neq(-1)})
if (vk.pubfn.isNotNull(keyword)) whereJsonArr.push({orderNo: new RegExp(keyword)})
let whereJson = null
if (whereJsonArr.length > 0) whereJson = _.and(whereJsonArr)
console.log('whereJsonArr', whereJsonArr)
res = await vk.baseDao.selects({
dbName: "jjx-order",
getCount: true,
whereJson: whereJson,
pageIndex,
pageSize,
sortArr: [{"name": "_add_time", "type": "desc"}],
foreignDB: [
{
dbName: "jjx-order-goods",
localKey: "_id",
foreignKey: "orderId",
as: "goods",
limit: 500,
foreignDB: [
{
dbName: "jjx-goods",
localKey: "goodsId",
foreignKey: "_id",
as: "goods",
limit: 1
}
],
},
{
dbName: "uni-id-users",
localKey: "uid",
foreignKey: "_id",
as: "buyer",
limit: 1
},
{
dbName: "uni-id-users",
localKey: "sellerUid",
foreignKey: "_id",
as: "seller",
limit: 1
},
{
dbName: "jjx-order-pay-list",
localKey: "_id",
foreignKey: "orderId",
as: "payList",
limit: 1,
sortArr: [{"name": "_add_time", "type": "desc"}],
},
{
dbName: "jjx-contract",
localKey: "contractId",
foreignKey: "_id",
as: "contract",
limit: 1,
},
],
})
for (let i in res.rows) {
res.rows[i].isSeller = res.rows[i].uid !== uid
res.rows[i].isBuyer = res.rows[i].uid === uid
if (res.rows[i].type > 3 && res.rows[i].orderStatus > 0) {
res.rows[i].hasPay = !!await vk.baseDao.findByWhereJson({
dbName: "jjx-order-pay-list",
whereJson: {
orderId: res.rows[i]._id,
buyerRefuse: false,
hasPaid: true
}
})
}
if (res.rows[i].contract) {
let sheet = null
if (res.rows[i].contract.type === 'enquiry') {
sheet = await vk.baseDao.findById({
dbName: 'jjx-enquiry-sheet',
id: res.rows[i].contract.sheetId
})
} else if (res.rows[i].contract.type === 'process') {
sheet = await vk.baseDao.findById({
dbName: 'jjx-process-sheet',
id: res.rows[i].contract.sheetId
})
}
res.rows[i].sheet = sheet
}
if (res.rows[i].type === 3) res.rows[i].upgradeExpiredAt = dayjs(userInfo.upgradeExpiredAt).format('YYYY-MM-DD HH:mm:ss')
if (res.rows[i].type === 8) res.rows[i].spot = await vk.baseDao.findById({
dbName: "jjx-spot-goods",
id: res.rows[i].goods[0].pk
})
if (res.rows[i].type === 0) {
for (const goodsItem of res.rows[i].goods) {
const goods = await vk.baseDao.findById({
dbName: "jjx-goods",
id: goodsItem.goodsId
});
if (goods && goods.sku && goods.sku.length > 0) goodsItem.sku = goods.sku.find(item => item._index === goodsItem.skuId)
}
}
if (res.rows[i].type === 1) {
res.rows[i].selfProduct = await vk.baseDao.findByWhereJson({
dbName: 'jjx-order-selfProduct',
whereJson: {
orderId: res.rows[i]._id
}
})
}
if (res.rows[i].type === 12 && res.rows[i].goods[0].goodsId) {
res.rows[i].certificate = await vk.baseDao.findByWhereJson({
dbName: "jjx-certificate",
whereJson: {
contractId: res.rows[i].goods[0].goodsId
}
});
console.log('res.rows[i].certificate', res.rows[i].certificate)
}
if (res.rows[i].type === 7) {
for (let j in res.rows[i].goods) {
if (res.rows[i].goods[j].isSingleQuote) {
switch (res.rows[i].goods[j].type) {
case 'enquiry' : {
res.rows[i].goods[j].sheet = await vk.baseDao.findByWhereJson({
dbName: "jjx-enquiry-sheet",
whereJson: {
_id: res.rows[i].goods[j].sheetId
}
})
}
break;
case 'old' : {
res.rows[i].goods[j].sheet = await vk.baseDao.findByWhereJson({
dbName: "jjx-old",
whereJson: {
_id: res.rows[i].goods[j].sheetId
}
})
}
break;
case 'process' : {
res.rows[i].goods[j].sheet = await vk.baseDao.findByWhereJson({
dbName: "jjx-process-sheet",
whereJson: {
_id: res.rows[i].goods[j].sheetId
}
})
}
break;
}
}
}
}
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,86 @@
'use strict';
const notaryPay = require('./util/notaryPay');
module.exports = {
/**
* 获取或创建公证全额支付单
* @url client/order/kh/getOrCreateNotaryFullPay 前端调用的url参数地址
*/
main: async (event) => {
let {data = {}, util} = event;
let {vk} = util;
let res = {code: 0, msg: ''};
const order = await vk.baseDao.findById({
dbName: 'jjx-order',
id: data.id
});
if (!order) return {code: -1, msg: '订单不存在'};
if (!(Number(order.type) > 3 && Number(order.signMethod) === 0)) {
return {code: -1, msg: '当前订单不是公证支付订单'};
}
if (Number(order.notaryPayStatus) === 1) {
return {code: -1, msg: '订单已完成公证支付'};
}
let payRecord = await notaryPay.findFullPayRecord(vk, order._id);
if (payRecord && payRecord.hasPaid) {
await vk.baseDao.updateById({
dbName: 'jjx-order',
id: order._id,
dataJson: {
notaryPayStatus: 1,
notaryPayListId: payRecord._id,
notaryPayOrderNo: payRecord.orderNo,
payStatus: 2
}
});
return {code: -1, msg: '订单已完成公证支付'};
}
if (!payRecord) {
const now = vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
const dataJson = {
orderId: order._id,
amount: order.offAmount || order.amount,
type: '公证支付',
remark: '买家全额支付到金久信公证平台',
buyerRemark: '',
photos: [],
payerUid: null,
hasPaid: false,
paidVoucher: '',
paidAt: '',
confirmAt: '',
buyerUid: order.uid,
sellerUid: order.sellerUid,
status: 0,
buyerRefuse: false,
refuseReason: null,
buyerPhotos: [],
expressPhoto: [],
isExpress: false,
expressName: null,
expressNo: null,
ext: [],
isNotaryPay: true,
isNotaryFullPay: true,
transferStatus: 0,
sellerConfirm: false,
orderNo: vk.pubfn.createOrderNo("39XU", 24),
applyAt: now,
applyTimestamp: Date.now()
};
const id = await vk.baseDao.add({
dbName: 'jjx-order-pay-list',
dataJson
});
payRecord = {
...dataJson,
_id: id
};
}
res.data = payRecord;
return res;
}
};
@@ -0,0 +1,107 @@
'use strict';
const notaryPay = require('./util/notaryPay');
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/makePayList 前端调用的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: ""};
// 业务逻辑开始-----------------------------------------------------------
// orderStatus 0待支付 1已支付待发货 2已发货待收货 3已收货待完成 4已完成
const order = await vk.baseDao.findById({
dbName: "jjx-order",
id: data.payInfo.orderId
})
const isNotaryPay = !!order && Number(order.type) > 3 && Number(order.signMethod) === 0
let fullPayRecord = null
if (isNotaryPay) {
if (Number(order.notaryPayStatus) !== 1) return {code: -1, msg: '买家尚未完成公证全额支付,暂不能申请付款'}
fullPayRecord = await notaryPay.findFullPayRecord(vk, order._id)
if (!fullPayRecord || !fullPayRecord.hasPaid || !fullPayRecord.orderNo) {
return {code: -1, msg: '未找到已支付的公证全额支付单'}
}
const applyList = await vk.baseDao.select({
dbName: "jjx-order-pay-list",
whereJson: {
orderId: order._id,
isNotaryApply: true,
buyerRefuse: false
},
pageIndex: 1,
pageSize: -1
})
const appliedAmount = (applyList.rows || []).reduce((sum, item) => sum + Number(item.amount || 0), 0)
const nextAmount = Number(data.payInfo.amount || 0)
const fullAmount = Number(fullPayRecord.amount || 0)
if (!Number.isFinite(nextAmount) || nextAmount <= 0) return {code: -1, msg: '申请金额不正确'}
if (Number((appliedAmount + nextAmount).toFixed(2)) > fullAmount) {
return {code: -1, msg: '累计申请金额不能超过买家公证支付总额'}
}
}
const payApplyFields = await notaryPay.buildPayApplyFields(vk)
const dataJson = {
...data.payInfo,
...payApplyFields,
isNotaryPay,
isNotaryApply: isNotaryPay,
sourcePayListId: isNotaryPay ? fullPayRecord._id : '',
sourcePayOrderNo: isNotaryPay ? fullPayRecord.orderNo : '',
fullPayListId: isNotaryPay ? fullPayRecord._id : '',
fullPayOrderNo: isNotaryPay ? fullPayRecord.orderNo : '',
fullPayAmount: isNotaryPay ? fullPayRecord.amount : '',
fullPayAt: isNotaryPay ? (fullPayRecord.paidAt || '') : '',
hasPaid: isNotaryPay ? true : data.payInfo.hasPaid,
paidAt: isNotaryPay ? (fullPayRecord.paidAt || '') : data.payInfo.paidAt,
paidVoucher: isNotaryPay ? '' : data.payInfo.paidVoucher,
buyerRemark: isNotaryPay ? '公证付款申请,待买家确认划付' : data.payInfo.buyerRemark
}
dataJson.orderNo = vk.pubfn.createOrderNo("39XU", 24)
const payListId = await vk.baseDao.add({
dbName: "jjx-order-pay-list",
dataJson
});
dataJson._id = payListId
let orderStatus = data.payInfo.isExpress ? 2 : 1;
const hasExpress = await vk.baseDao.findByWhereJson({
dbName: "jjx-order-pay-list",
whereJson:{
orderId: data.payInfo.orderId,
isExpress: true,
buyerRefuse: false
}
});
if (hasExpress) orderStatus = 2
// payStatus(弃用) 0待创建 1待支付预付款 2已支付预付款,支付进度款中 3进度款已支付,尾款支付中 4完成
await vk.baseDao.updateById({
dbName: "jjx-order",
id: data.payInfo.orderId,
dataJson: {
orderStatus,
payStatus: isNotaryPay ? 2 : 1
}
});
if (isNotaryPay) {
await notaryPay.notifyPayApply({
vk,
payRecord: dataJson,
order
})
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,38 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/orderPayList 前端调用的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.select({
dbName: "jjx-order-pay-list",
whereJson: {
orderId: data.id
},
sortArr: [{"name": "_add_time", "type": "asc"}],
pageIndex: 1,
pageSize: -1
})
for (const item of res.rows) {
item.isSeller = item.sellerUid === uid
item.isBuyer = item.buyerUid === uid
item.seller = await vk.baseDao.findById({
dbName: "uni-id-users",
id: item.sellerUid
});
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,98 @@
'use strict';
const notaryPay = require('./util/notaryPay');
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/paidConfirm 前端调用的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 payRecord = await vk.baseDao.findById({
dbName: "jjx-order-pay-list",
id: data.id
})
if (!payRecord) return {code: -1, msg: '支付单不存在'}
if (payRecord.isNotaryPay || payRecord.isNotaryApply) {
res = await notaryPay.executeTransfer({
vk,
payRecord,
operator: 'buyer'
})
if (res.code !== 0) return res
return res
}
const confirmAt = vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss")
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: payRecord._id,
dataJson: {
sellerConfirm: true,
confirmAt
}
})
if (['尾款', '货到付款', '全款'].includes(payRecord.type)) {
await vk.baseDao.updateById({
dbName: "jjx-order",
id: payRecord.orderId,
dataJson: {
orderStatus: 4
}
})
}
// 添加余额、记录
// const seller = await vk.baseDao.findById({
// dbName: 'uni-id-users',
// id: payRecord.sellerUid,
// })
// if (seller) {
// if (!seller.balance) {
// await vk.baseDao.updateById({
// dbName: 'uni-id-users',
// id: seller._id,
// dataJson: {
// balance: payRecord.price,
// }
// })
// } else {
// await vk.baseDao.updateById({
// dbName: 'uni-id-users',
// id: seller._id,
// dataJson: {
// balance: _.inc(payRecord.price),
// }
// })
// }
// await vk.baseDao.add({
// dbName: "jjx-user-balance-log",
// dataJson: {
// uid: seller._id,
// orderId: payRecord.orderId,
// type: payRecord.type,
// price: payRecord.price,
// desc: "订单支付成功",
// createTime: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
// }
// })
// }
// const order = await vk.baseDao.findById({
// dbName: "jjx-order",
// id: payRecord.orderId,
// })
//
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,28 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/payListChangeStatus 前端调用的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: "" };
// 业务逻辑开始-----------------------------------------------------------
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: data.id,
dataJson: {
status: data.status
}
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,205 @@
'use strict';
const dayjs = require("dayjs");
const OpenSdk = require('../../../../util/base').default;
const notaryPay = require('./util/notaryPay');
const sdk = new OpenSdk({
appId: '8a81c1db8fc5238d01910b9e312d0692',
appKey: 'a15ceac60f5b464eb758c4fe7800ee9f'
});
const REFUND_MID = '898450100002303';
const REFUND_TID = 'G5SBN2XJ';
const REFUND_INST_MID = 'WGDEFAULT';
const REFUND_SUB_MID = '898450100004218';
const REFUND_SUB_MID_MAIN = '898450100004711';
const PLATFORM_RATE_DICT_ID = 'd84694f2696818f20c28f55f36764783';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/payRefuse 前端调用的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, refuseReason} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const payRecord = await vk.baseDao.updateAndReturn({
dbName: "jjx-order-pay-list",
whereJson: {
_id: data.id,
},
dataJson: {
buyerRefuse: true,
refuseReason,
transferStatus: 2,
transferRefuseAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss")
}
})
const order = await vk.baseDao.findById({
dbName: 'jjx-order',
id: payRecord.orderId
})
const isNotaryPay = !!order && Number(order.type) > 3 && Number(order.signMethod) === 0;
if (isNotaryPay && payRecord.isNotaryApply) {
res.refund = {
skipped: true,
reason: '公证付款申请驳回不触发退款'
};
await notaryPay.addMessage(vk, {
uid: payRecord.sellerUid,
title: '付款单被驳回',
content: `订单${order && order.orderNo ? order.orderNo : payRecord.orderId}的${payRecord.type || ''}付款单已被买家驳回,原因:${refuseReason || '未填写'}`,
type: 'order-pay-refuse',
pk: payRecord.orderId
});
return res;
}
if (['预付款', '货到付款'].includes(payRecord.type) && !isNotaryPay) {
await vk.baseDao.updateById({
dbName: "jjx-order",
id: payRecord.orderId,
dataJson: {
payStatus: 0
}
})
}
const hasPay = await vk.baseDao.findByWhereJson({
dbName: "jjx-order-pay-list",
whereJson: {
orderId: payRecord.orderId,
buyerRefuse: false,
sellerConfirm: true
}
})
const hasExpress = await vk.baseDao.findByWhereJson({
dbName: "jjx-order-pay-list",
whereJson: {
orderId: payRecord.orderId,
isExpress: true,
hasPaid: true,
}
})
// orderStatus 0待支付 1已支付待发货 2已发货待收货 3已收货待完成 4已完成
// 发货单已支付的不能再次发货
let orderStatus = 0
// 未发货且没有支付单
if (!hasExpress && !hasPay) orderStatus = 0
// 未发货且有支付单
if (!hasExpress && !!hasPay) orderStatus = 1
// 已发货且已确认支付
if (!!hasExpress) orderStatus = 2
res.hasExpress = hasExpress
res.hasPay = hasPay
await vk.baseDao.updateById({
dbName: "jjx-order",
id: payRecord.orderId,
dataJson: {
orderStatus
}
});
const hasManualVoucher = Array.isArray(payRecord.paidVoucher) ? payRecord.paidVoucher.length > 0 : !!payRecord.paidVoucher;
const refundAmount = Math.round(Number(payRecord.amount || 0) * 100);
const shouldCallRefund = !!payRecord.hasPaid && !hasManualVoucher && !!payRecord.orderNo && refundAmount > 0 && !isNotaryPay;
if (shouldCallRefund) {
const refundOrderId = vk.pubfn.createOrderNo("39XU", 24);
const refundData = {
queryUrl: 'https://api-mop.chinaums.com/v1/netpay/refund',
timestamp: dayjs().format('YYYYMMDDHHmmss'),
nonce: `refund_${Date.now()}`,
content: {
requestTimestamp: dayjs().format('YYYY-MM-DD HH:mm:ss'),
merOrderId: payRecord.orderNo,
instMid: REFUND_INST_MID,
mid: REFUND_MID,
tid: REFUND_TID,
refundAmount,
refundOrderId,
refundDesc: refuseReason || '买家驳回支付单退款'
}
};
try {
const platformRateData = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: PLATFORM_RATE_DICT_ID
});
const platformRate = Number(platformRateData && platformRateData.content);
if (!Number.isNaN(platformRate) && platformRate >= 0 && platformRate <= 100) {
const subAmount = parseInt(refundAmount * ((100 - platformRate) / 100), 10);
const subAmountMain = refundAmount - subAmount;
refundData.content.platformAmount = 0;
refundData.content.subOrders = [
{
mid: REFUND_SUB_MID,
totalAmount: String(subAmount),
},
{
mid: REFUND_SUB_MID_MAIN,
totalAmount: String(subAmountMain),
}
];
}
const refundRawResult = await sdk.exec(refundData);
const refundResult = typeof refundRawResult === "string" ? JSON.parse(refundRawResult) : refundRawResult;
const refundSuccess = refundResult && refundResult.errCode === 'SUCCESS';
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: payRecord._id,
dataJson: {
refundApplyAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
refundApplyPayload: refundData.content,
refundApplyResult: refundResult,
refundApplySuccess: refundSuccess
}
});
res.refund = {
success: refundSuccess,
result: refundResult
};
} catch (err) {
const errMsg = err && err.message ? err.message : JSON.stringify(err);
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: payRecord._id,
dataJson: {
refundApplyAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
refundApplyPayload: refundData.content,
refundApplySuccess: false,
refundApplyError: errMsg
}
});
res.refund = {
success: false,
error: errMsg
};
}
} else {
res.refund = {
skipped: true,
reason: '当前支付单未命中线上退款条件'
};
}
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,55 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/refund 前端调用的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, refundReason, refundPhotos} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const order = await vk.baseDao.findById({
dbName: "jjx-order",
id: data.id
});
if ([4, 5, 6].includes(order.type)) {
const payList = await vk.baseDao.select({
dbName: "jjx-order-pay-list",
whereJson: {
orderId: data.id,
buyerRefuse: false
}
});
let paidConfirmNum = 0
for (let i = 0; i < payList.rows.length; i++) {
if ( payList.rows[i].sellerConfirm) paidConfirmNum++
}
if (paidConfirmNum === payList.rows.length) {
res.code = 1;
res.msg = "订单已确认收款,无法申请退款";
} else {
res.code = 0;
res.msg = "平台将在2个工作日内审核,请您耐心等待";
}
}
await vk.baseDao.updateById({
dbName: "jjx-order",
id: data.id,
dataJson: {
refundReason,
refundPhotos,
orderStatus: 5,
refundRequestAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss")
}
})
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,100 @@
'use strict';
const dayjs = require("dayjs");
const OpenSdk = require('../../../../util/base').default;
const sdk = new OpenSdk({
appId: '8a81c1db8fc5238d01910b9e312d0692',
appKey: 'a15ceac60f5b464eb758c4fe7800ee9f'
});
const REFUND_MID = '898450100002303';
const REFUND_TID = 'G5SBN2XJ';
const REFUND_INST_MID = 'WGDEFAULT';
module.exports = {
/**
* 退款查询
* @url client/order/kh/refundQuery 前端调用的url参数地址
* data 请求参数
*/
main: async (event) => {
let {data = {}, util} = event;
let {vk} = util;
let res = {code: 0, msg: ""};
const payRecord = await vk.baseDao.findById({
dbName: "jjx-order-pay-list",
id: data.id
});
if (!payRecord) {
return {
code: -1,
msg: "支付单不存在"
};
}
const refundOrderId = data.refundOrderId
|| (payRecord.refundApplyPayload && payRecord.refundApplyPayload.refundOrderId)
|| (payRecord.refundApplyResult && payRecord.refundApplyResult.refundOrderId);
if (!refundOrderId) {
return {
code: -1,
msg: "未找到退款单号,请先发起退款"
};
}
const queryData = {
queryUrl: 'https://api-mop.chinaums.com/v1/netpay/refund-query',
timestamp: dayjs().format('YYYYMMDDHHmmss'),
nonce: `refund_query_${Date.now()}`,
content: {
requestTimestamp: dayjs().format('YYYY-MM-DD HH:mm:ss'),
merOrderId: refundOrderId,
instMid: REFUND_INST_MID,
mid: REFUND_MID,
tid: REFUND_TID
}
};
try {
const queryRawResult = await sdk.exec(queryData);
const queryResult = typeof queryRawResult === "string" ? JSON.parse(queryRawResult) : queryRawResult;
const querySuccess = queryResult && queryResult.errCode === 'SUCCESS';
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: payRecord._id,
dataJson: {
refundQueryAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
refundQueryPayload: queryData.content,
refundQueryResult: queryResult,
refundQuerySuccess: querySuccess
}
});
res.data = queryResult;
res.querySuccess = querySuccess;
res.msg = querySuccess ? "查询成功" : (queryResult.errMsg || "查询失败");
return res;
} catch (err) {
const errMsg = err && err.message ? err.message : JSON.stringify(err);
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: payRecord._id,
dataJson: {
refundQueryAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
refundQueryPayload: queryData.content,
refundQuerySuccess: false,
refundQueryError: errMsg
}
});
return {
code: -1,
msg: errMsg
};
}
}
};
@@ -0,0 +1,28 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/resetOrderNo 前端调用的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: "" };
// 业务逻辑开始-----------------------------------------------------------
await vk.baseDao.updateById({
dbName: "jjx-order",
id: data.id,
dataJson: {
orderNo: vk.pubfn.createOrderNo("39XU", 20),
}
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,32 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/setExpress 前端调用的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, expressName, expressNo, remark, expressPhoto,} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
await vk.baseDao.updateById({
dbName: "jjx-order",
id,
dataJson: {
expressName,
expressNo,
remark,
expressPhoto,
orderStatus: 2,
}
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,37 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/makePayList 前端调用的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: ""};
// 业务逻辑开始-----------------------------------------------------------
// status 0待支付 1已支付待发货 2已发货待收货 3已收货待完成 4已完成
await vk.baseDao.adds({
dbName: "jjx-order-pay-list",
dataJson: data.payList
});
await vk.baseDao.updateById({
dbName: "jjx-order",
id: data.payList[0].orderId,
dataJson: {
orderStatus: 1
}
});
console.log('orderId', data.payList[0].orderId)
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,33 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/updateAddress 前端调用的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: "" };
// 业务逻辑开始-----------------------------------------------------------
await vk.baseDao.updateById({
dbName: "jjx-order",
id: data.id,
dataJson: {
address: data.address,
addressDetail: data.addressDetail,
phone: data.phone,
name: data.name,
remark: data.remark,
}
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,40 @@
'use strict';
module.exports = {
/**
* XXXnameXXX
* @url client/order/kh/uploadPayVoucher 前端调用的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, buyerPhotos, paidVoucher, buyerRemark} = data;
let res = {code: 0, msg: ""};
// 业务逻辑开始-----------------------------------------------------------
const payRecord = await vk.baseDao.findById({
dbName: "jjx-order-pay-list",
id: data._id
})
if (payRecord && payRecord.isNotaryApply) {
return {code: -1, msg: '公证付款申请无需买家再次支付'}
}
await vk.baseDao.updateById({
dbName: "jjx-order-pay-list",
id: data._id,
dataJson: {
hasPaid: true,
paidVoucher,
paidAt: vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss"),
buyerPhotos,
buyerRemark
}
})
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
@@ -0,0 +1,231 @@
'use strict';
const AUTO_TRANSFER_DAYS_DICT_ID = '238cef266a67e89a006025974a41dbd7';
const DEFAULT_AUTO_TRANSFER_DAYS = 3;
function nowText(vk) {
return vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
}
async function getAutoTransferDays(vk) {
try {
const config = await vk.baseDao.findById({
dbName: 'jjx-dict',
id: AUTO_TRANSFER_DAYS_DICT_ID
});
const days = parseInt(config && config.content, 10);
if (Number.isFinite(days) && days > 0) return days;
} catch (err) {
console.error('getAutoTransferDays error:', err);
}
return DEFAULT_AUTO_TRANSFER_DAYS;
}
async function buildPayApplyFields(vk) {
const applyTimestamp = Date.now();
const autoTransferDays = await getAutoTransferDays(vk);
const autoTransferTimestamp = applyTimestamp + autoTransferDays * 24 * 60 * 60 * 1000;
return {
transferStatus: 0,
applyAt: nowText(vk),
applyTimestamp,
autoTransferDays,
autoTransferAt: vk.pubfn.timeFormat(new Date(autoTransferTimestamp), "yyyy-MM-dd hh:mm:ss"),
autoTransferTimestamp
};
}
async function findFullPayRecord(vk, orderId) {
const res = await vk.baseDao.select({
dbName: 'jjx-order-pay-list',
whereJson: {
orderId,
isNotaryFullPay: true,
buyerRefuse: false
},
sortArr: [{name: '_add_time', type: 'desc'}],
pageIndex: 1,
pageSize: 1
});
return res && res.rows && res.rows[0] ? res.rows[0] : null;
}
async function resolveTransferSourcePayRecord(vk, payRecord) {
if (!payRecord) return null;
if (payRecord.isNotaryFullPay) return payRecord;
if (payRecord.fullPayListId) {
const fullPayRecord = await vk.baseDao.findById({
dbName: 'jjx-order-pay-list',
id: payRecord.fullPayListId
});
if (fullPayRecord) return fullPayRecord;
}
if (payRecord.sourcePayListId) {
const fullPayRecord = await vk.baseDao.findById({
dbName: 'jjx-order-pay-list',
id: payRecord.sourcePayListId
});
if (fullPayRecord) return fullPayRecord;
}
if (payRecord.orderId) {
return await findFullPayRecord(vk, payRecord.orderId);
}
return null;
}
/**
* 获取卖家用于银联划付的企业用户号。
* 企业用户号属于卖家用户资料,不能使用客户端传入值或固定商户号。
*/
async function resolveSellerMerNo(vk, payRecord) {
const sellerUid = payRecord && payRecord.sellerUid;
if (!sellerUid) return '';
try {
const seller = await vk.baseDao.findById({
dbName: 'uni-id-users',
id: sellerUid
});
return String((seller && seller.merNo) || '').trim();
} catch (err) {
console.error('resolveSellerMerNo error:', err);
return '';
}
}
async function addMessage(vk, dataJson) {
if (!dataJson || !dataJson.uid) return;
await vk.baseDao.add({
dbName: 'jjx-message',
dataJson: {
...dataJson,
hasRead: false
}
});
}
async function notifyPaySuccess({ vk, payRecord, order }) {
await addMessage(vk, {
uid: payRecord.sellerUid,
title: '买家已完成公证支付',
content: `订单${order && order.orderNo ? order.orderNo : payRecord.orderId}买家已支付货款到金久信公证平台,请按约定发起付款单申请划付。`,
type: 'order-pay',
pk: payRecord.orderId
});
}
async function notifyPayApply({ vk, payRecord, order }) {
await addMessage(vk, {
uid: payRecord.buyerUid,
title: '卖家已发起付款单',
content: `订单${order && order.orderNo ? order.orderNo : payRecord.orderId}卖家已发起${payRecord.type || ''}付款单,金额${payRecord.amount}元,请及时通过申请或驳回。`,
type: 'order-pay',
pk: payRecord.orderId
});
}
async function executeTransfer({ vk, payRecord, operator = 'buyer' }) {
if (!payRecord) return { code: -1, msg: '支付单不存在' };
if (!payRecord.isNotaryApply) return { code: -1, msg: '当前支付单不是公证划付申请单' };
if (payRecord.buyerRefuse) return { code: -1, msg: '支付单已被买家驳回' };
if (!payRecord.hasPaid) return { code: -1, msg: '公证托管资金尚未支付' };
if (payRecord.sellerConfirm) return { code: 0, msg: '已划付', data: payRecord.transferResult || null };
const fullPayRecord = await resolveTransferSourcePayRecord(vk, payRecord);
const sourcePayOrderNo = fullPayRecord && fullPayRecord.orderNo ? fullPayRecord.orderNo : (payRecord.fullPayOrderNo || payRecord.sourcePayOrderNo || '');
const sourcePayListId = fullPayRecord && fullPayRecord._id ? fullPayRecord._id : (payRecord.fullPayListId || payRecord.sourcePayListId || '');
const sourcePayAmount = fullPayRecord && Number(fullPayRecord.amount || 0) > 0 ? Number(fullPayRecord.amount) : Number(payRecord.fullPayAmount || 0);
if (!sourcePayOrderNo) return { code: -1, msg: '未找到全额支付单单号,无法划付' };
if (fullPayRecord && !fullPayRecord.hasPaid) return { code: -1, msg: '全额支付单尚未支付,无法划付' };
// const buyer = await vk.baseDao.findById({
// dbName: 'uni-id-users',
// id: payRecord.buyerUid,
// });
// if (!buyer || !buyer.mid) {
// return { code: -1, msg: '买家商户号不存在' };
// }
const payAmt = Number(payRecord.amount || payRecord.price || 0);
if (!Number.isFinite(payAmt) || payAmt <= 0) {
return { code: -1, msg: '付款单金额不正确' };
}
const accNo = await resolveSellerMerNo(vk, payRecord);
if (!accNo) {
return { code: -1, msg: '卖家未配置企业用户号,无法划付' };
}
const transferResult = await vk.request({
url: 'http://jjx-union-pay.gxwebsoft.com/api/union-pay-jjx/transByOrder',
method: 'POST',
dataType: 'json',
header: {
'content-type': 'application/json; charset=utf-8'
},
data: {
accNo,
merOrderNo: sourcePayOrderNo,
payAmt,
amount: payAmt,
},
timeout: 60000
});
const transferAt = nowText(vk);
await vk.baseDao.updateById({
dbName: 'jjx-order-pay-list',
id: payRecord._id,
dataJson: {
sellerConfirm: true,
confirmAt: transferAt,
transferStatus: 1,
transferAt,
transferOperator: operator,
transferResult,
transferSourcePayListId: sourcePayListId,
transferSourceOrderNo: sourcePayOrderNo,
transferSourceAmount: sourcePayAmount
}
});
if (['尾款', '货到付款', '全款'].includes(payRecord.type)) {
await vk.baseDao.updateById({
dbName: 'jjx-order',
id: payRecord.orderId,
dataJson: {
orderStatus: 4,
}
});
}
await addMessage(vk, {
uid: payRecord.sellerUid,
title: '付款单已划付',
content: `付款单${payRecord.type || ''}已${operator === 'auto' ? '自动' : '由买家确认'}划付,金额${payRecord.amount}元,来源单号:${sourcePayOrderNo}。`,
type: 'order-pay-transfer',
pk: payRecord.orderId
});
return {
code: 0,
msg: '划付成功',
data: {
transferResult,
sourcePayOrderNo,
sourcePayListId,
sourcePayAmount
}
};
}
module.exports = {
AUTO_TRANSFER_DAYS_DICT_ID,
DEFAULT_AUTO_TRANSFER_DAYS,
getAutoTransferDays,
buildPayApplyFields,
findFullPayRecord,
resolveTransferSourcePayRecord,
addMessage,
notifyPaySuccess,
notifyPayApply,
resolveSellerMerNo,
executeTransfer
};
@@ -0,0 +1,23 @@
'use strict';
module.exports = {
/**
* 此函数名称
* @url client/order/pub/test 前端调用的url参数地址
* data 请求参数
* @params {String} params1 参数1
*/
main: async (event) => {
let { data = {}, userInfo, util, originalParam } = event;
let { customUtil, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code : 0, msg : '' };
// 业务逻辑开始-----------------------------------------------------------
// 可写与数据库的交互逻辑等等
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}