'use strict'; const _ = require('lodash'); const { ObjectId } = require('mongoose').Types; module.exports = options => { return async function duplicate(ctx, next) { const data = _.get(ctx.request, 'body'); const id = _.get(ctx.params, 'id'); const status = data.status; if (status === '2') { // 创建副本数据 let oData = await ctx.model.Apply.findById(id); if (!oData) return; oData = JSON.parse(JSON.stringify(oData)); oData = { ...oData, ...data }; const duplicateData = _.cloneDeep(oData); duplicateData.apply_id = id; delete duplicateData._id; delete duplicateData.id; const q = { apply_id: duplicateData.apply_id, user_id: duplicateData.user_id }; // // 先查询有没有,有就更新 const result = await ctx.model.Duplicate.findOne(q); if (result) { // 修改 ctx.model.Duplicate.updateOne({ _id: result._id || result.id }, duplicateData); } else { // 一切都复制一份,将原数据id放到apply_id上,用来追溯/对比 ctx.model.Duplicate.create(duplicateData); } } await next(); }; };