明树Git Lab

Commit c513d055 authored by zengfanpei's avatar zengfanpei

update

parent de023961
const _ = require('lodash'); const _ = require('lodash');
const moment = require('moment'); const moment = require('moment');
const errorMessage = require('../utils/errorMessage'); const errorMessage = require('../utils/errorMessage');
const { default: mongoose } = require('mongoose'); const mongoose = require('mongoose');
const agrMatModule = require('../module/agrMatModule');
/* ----------------农资类型--------------------- */ /* ----------------农资类型--------------------- */
...@@ -12,7 +13,7 @@ async function createMatType(req, res, next) { ...@@ -12,7 +13,7 @@ async function createMatType(req, res, next) {
...req.body, ...req.body,
creator, creator,
} }
let ret = await DB.AgrMatType.findOneAndUpdate({name: info.name}, info, {upsert: true}); let ret = await DB.AgrMatType.findOneAndUpdate({ name: info.name }, info, { upsert: true, returnOriginal: false });
res.sendData(ret); res.sendData(ret);
} catch (error) { } catch (error) {
next(error); next(error);
...@@ -21,10 +22,10 @@ async function createMatType(req, res, next) { ...@@ -21,10 +22,10 @@ async function createMatType(req, res, next) {
async function deleteMatType(req, res, next) { async function deleteMatType(req, res, next) {
try { try {
if(!req.body._id) { if (!req.body._id) {
return res.sendError(errorMessage.resourceNotFound); return res.sendError(errorMessage.resourceNotFound);
} }
await DB.AgrMatType.findOneAndUpdate({_id: req.body._id}, {del: 1}); await DB.AgrMatType.findOneAndUpdate({ _id: req.body._id }, { del: 1 });
res.sendData({}) res.sendData({})
} catch (error) { } catch (error) {
next(error); next(error);
...@@ -33,13 +34,13 @@ async function deleteMatType(req, res, next) { ...@@ -33,13 +34,13 @@ async function deleteMatType(req, res, next) {
async function updateMatType(req, res, next) { async function updateMatType(req, res, next) {
try { try {
if(req.body.name) { if (req.body.name) {
let check = await DB.AgrMatType.findOne({name: req.body.name}); let check = await DB.AgrMatType.findOne({ name: req.body.name });
if(check) { if (check) {
return res.sendError(errorMessage.nameDuplicated); return res.sendError(errorMessage.nameDuplicated);
} }
} }
let ret = await DB.AgrMatType.findOneAndUpdate({_id: req.body._id}, {...req.body, _id: undefined,}, {returnOriginal: false}); let ret = await DB.AgrMatType.findOneAndUpdate({ _id: req.body._id }, { ...req.body, _id: undefined, }, { returnOriginal: false });
res.sendData(ret); res.sendData(ret);
} catch (error) { } catch (error) {
next(error); next(error);
...@@ -54,7 +55,7 @@ async function queryMatType(req, res, next) { ...@@ -54,7 +55,7 @@ async function queryMatType(req, res, next) {
let skip = (page - 1) * pageSize; let skip = (page - 1) * pageSize;
let count = await DB.AgrMatType.countDocuments(search) let count = await DB.AgrMatType.countDocuments(search)
let list = await DB.AgrMatType.find(search).skip(skip).limit(pageSize).lean().exec(); let list = await DB.AgrMatType.find(search).skip(skip).limit(pageSize).lean().exec();
res.sendData({count, list}); res.sendData({ count, list });
} catch (error) { } catch (error) {
next(error); next(error);
} }
...@@ -77,12 +78,18 @@ async function queryMatType(req, res, next) { ...@@ -77,12 +78,18 @@ async function queryMatType(req, res, next) {
async function queryMatApprList(req, res, next) { async function queryMatApprList(req, res, next) {
try { try {
let search = { del: 0 }; let search = { del: 0 };
if(req.body.type) {
search.type = req.body.type;
}
if(req.body.name) {
search.name = {$regex: req.body.name}
}
let page = req.body.page || 1; let page = req.body.page || 1;
let pageSize = req.body.pageSize || 10; let pageSize = req.body.pageSize || 10;
let skip = (page - 1) * pageSize; let skip = (page - 1) * pageSize;
let count = await DB.AgrMatApproval.countDocuments(search) let count = await DB.AgrMatApproval.countDocuments(search)
let list = await DB.AgrMatApproval.find(search).skip(skip).limit(pageSize).lean().exec(); let list = await DB.AgrMatApproval.find(search).skip(skip).limit(pageSize).populate({path: 'materials', match: {del: 0}, select: ''}).lean().exec();
res.sendData({count, list}); res.sendData({ count, list });
} catch (error) { } catch (error) {
next(error) next(error)
} }
...@@ -92,95 +99,115 @@ async function queryMatApprList(req, res, next) { ...@@ -92,95 +99,115 @@ async function queryMatApprList(req, res, next) {
*创建审批--入库、出库、归还 ,保存 不发起流程 *创建审批--入库、出库、归还 ,保存 不发起流程
*/ */
async function saveMatAppr(req, res, next) { async function saveMatAppr(req, res, next) {
let { _id, materials } = req.body;
let user = req.user;
let matInOutList = [], matIds = [], matType = [];
try { try {
let {_id, type, materials} = req.body; let matApr;
if(!_id) { if (!_id) {
// 创建 // 创建
let matAprId = new mongoose.Types.ObjectId(); let matAprId = new mongoose.Types.ObjectId();
let matInOutList = [], matIds = [];
for (let index = 0; index < materials.length; index++) { for (let index = 0; index < materials.length; index++) {
const element = materials[index]; const element = materials[index];
if(element.name && element.type && _.isNumber(element.count) && element.count > 0) { if (element.name && element.type && _.isNumber(element.count) && element.count > 0) {
let mioId = new mongoose.Types.ObjectId(); let mioId = new mongoose.Types.ObjectId();
matIds.push(mioId); matIds.push(mioId);
let eleType = element && element.type && element.type._id || element && element.type;
matType.push(eleType)
matInOutList.push({ matInOutList.push({
_id: mioId, _id: mioId,
type: element && element._id || element,//种类的id type: eleType,//种类的id
name: element.name, name: element.name,
count: element.count, count: element.count,
approval: matAprId, approval: matAprId,
creator: user._id,
}); });
} }
} }
if(matInOutList.length > 0) {
//判断重复
if (_.uniq(matType).length !== matType.length) {
res.sendError(errorMessage.agrMatDuplicated);
}
if (matInOutList.length > 0) {
await DB.AgrMatInOut.insertMany(matInOutList); // 插入清单 await DB.AgrMatInOut.insertMany(matInOutList); // 插入清单
} }
let matApr = await DB.AgrMatApproval.create({ // 创建单据 matApr = await DB.AgrMatApproval.create({ // 创建单据
...req.body,
_id: matAprId, _id: matAprId,
type: type,
materials: matIds, materials: matIds,
creator: user._id,
}); });
return res.sendData(matApr);
} else { } else {
// 更新 // 更新
let existsMatApr = await DB.AgrMatApproval.findOne({_id: req.body._id}); let existsMatApr = await DB.AgrMatApproval.findOne({ _id });
if(!existsMatApr) { if (!existsMatApr) {
return res.sendError(errorMessage.resourceNotFound); return res.sendError(errorMessage.resourceNotFound);
} }
let matInOutList = [], matIds = [], matExistsIds = [];
for (let index = 0; index < materials.length; index++) { for (let index = 0; index < materials.length; index++) {
const element = materials[index]; const element = materials[index];
if(element.name && element.type && _.isNumber(element.count) && element.count > 0) { if (element.name && element.type && _.isNumber(element.count) && element.count > 0) {
let mioId = element._id; let mioId = element._id;
if(!mioId) { if (!mioId) {
mioId = new mongoose.Types.ObjectId(); mioId = new mongoose.Types.ObjectId();
} }
matIds.push(mioId); matIds.push(mioId);
matInOutList.push(DB.AgrMatInOut.findOneAndUpdate({_id: mioId}, { let eleType = element && element.type && element.type._id || element && element.type;
type: element && element._id || element,//种类的id matType.push(eleType)
name: element.name, matInOutList.push(DB.AgrMatInOut.findOneAndUpdate({ _id: mioId }, {
count: element.count, type: eleType,//种类的id
approval: _id, name: element.name,
}, {upsert: true})); count: element.count,
approval: _id,
creator: user._id,
}, { upsert: true }));
} }
} }
//判断重复
if (_.uniq(matType).length !== matType.length) {
res.sendError(errorMessage.agrMatDuplicated);
}
//1. 删除不在传递进来的materials里、在数据库里面的数据 //1. 删除不在传递进来的materials里、在数据库里面的数据
if(matIds.length > 0) { if (matIds.length > 0) {
await DB.AgrMatInOut.updateMany({approval: _id, _id: {$nin: matIds}}, {del:1}); await DB.AgrMatInOut.updateMany({ approval: _id, _id: { $nin: matIds } }, { del: 1 });
} }
//2. 更新或插入materials //2. 更新或插入materials
if(matInOutList.length > 0) { if (matInOutList.length > 0) {
await Promise.all(matInOutList); await Promise.all(matInOutList);
} }
let matApr = await DB.AgrMatApproval.findOneAndUpdate({_id},{ matApr = await DB.AgrMatApproval.findOneAndUpdate({ _id }, {
type: type, ...req.body,
type: existsMatApr.type,
materials: matIds, materials: matIds,
}); }, { returnOriginal: false });
return res.sendData(matApr);
} }
res.sendData(matApr);
} catch (error) { } catch (error) {
next(error) next(error)
} }
} }
/**
* 更新审批--入库、出库、归还 ,保存 不发起流程
*/
async function createMatAppr(req, res, next) {
try {
//
} catch (error) {
next(error)
}
}
/** /**
* 删除审批--入库、出库、归还 ,已发起流程不能删除。 * 删除审批--入库、出库、归还 ,已发起流程不能删除。
*/ */
async function createMatAppr(req, res, next) { async function deleteMatAppr(req, res, next) {
try { try {
// //
let check = await DB.AgrMatApproval.findOne({_id: req.body._id});
if(!(check && check._id)) {
return res.sendError(errorMessage.resourceNotFound);
}
if(check && check.flows && check.flows.length > 0) {
return res.sendError(errorMessage.agrMatHaveFlow);
}
// 删除清单。
await DB.AgrMatInOut.updateMany({approval: check._id}, {del: 1});
// 删除单据
await DB.AgrMatApproval.updateOne({_id: check._id}, {del: 1});
return res.sendData({});
} catch (error) { } catch (error) {
next(error) next(error)
} }
...@@ -221,4 +248,5 @@ module.exports = { ...@@ -221,4 +248,5 @@ module.exports = {
queryMatApprList, queryMatApprList,
saveMatAppr, saveMatAppr,
deleteMatAppr,
} }
\ No newline at end of file
...@@ -53,7 +53,7 @@ async function importExcel(req, res, next) { ...@@ -53,7 +53,7 @@ async function importExcel(req, res, next) {
let workbook = new ExcelJS.Workbook(); let workbook = new ExcelJS.Workbook();
console.log(req.file) console.log(req.file)
await workbook.xlsx.readFile(req.file.path); await workbook.xlsx.readFile(req.file.path);
let worksheet = workbook.getWorksheet(4); let worksheet = workbook.getWorksheet(1);
console.log(workbook._worksheets.length); console.log(workbook._worksheets.length);
let values = worksheet.getRow(1).values; // 示例:‌读取第一行 let values = worksheet.getRow(1).values; // 示例:‌读取第一行
// for (let index = 1; index < worksheet.actualRowCount; index++) { // for (let index = 1; index < worksheet.actualRowCount; index++) {
......
...@@ -19,7 +19,6 @@ const AgrMaterialApprovalSchema = new Schema({ ...@@ -19,7 +19,6 @@ const AgrMaterialApprovalSchema = new Schema({
}, },
name: { name: {
type: String, type: String,
set: setNameToApproval,
comment: "单据名称" comment: "单据名称"
}, },
materials: { materials: {
...@@ -66,15 +65,5 @@ const AgrMaterialApprovalSchema = new Schema({ ...@@ -66,15 +65,5 @@ const AgrMaterialApprovalSchema = new Schema({
} }
}); });
function setNameToApproval(v) {
let map = {
1: "入库单",
2: "出库单",
3: "归还单",
}
return map[this._update.type];
}
const AgrMatApproval = mongoose.model('AgrMatApproval', AgrMaterialApprovalSchema, 'letianAgrMaterialApproval'); const AgrMatApproval = mongoose.model('AgrMatApproval', AgrMaterialApprovalSchema, 'letianAgrMaterialApproval');
module.exports = AgrMatApproval; module.exports = AgrMatApproval;
\ No newline at end of file
...@@ -52,5 +52,5 @@ const AgrMaterialInOutSchema = new Schema({ ...@@ -52,5 +52,5 @@ const AgrMaterialInOutSchema = new Schema({
}); });
const AgrMatInOut = mongoose.model('AgrMatInOut', AgrMaterialInOutSchema, 'letianAgrMatInOut'); const AgrMatInOut = mongoose.model('AgrMatInOut', AgrMaterialInOutSchema, 'letianAgrMaterialInOut');
module.exports = AgrMatInOut; module.exports = AgrMatInOut;
\ No newline at end of file
const mongoose = require('mongoose');
const _ = require('lodash');
async function saveMatAppr({_id, materials,type}, user) {
}
module.exports = {
saveMatAppr
}
\ No newline at end of file
...@@ -15,6 +15,7 @@ router.post('/input/list', agrInputRecordController.list); ...@@ -15,6 +15,7 @@ router.post('/input/list', agrInputRecordController.list);
*/ */
router.post('/mat/approval/list', agrMatController.queryMatApprList); //获取农资审批记录列表 router.post('/mat/approval/list', agrMatController.queryMatApprList); //获取农资审批记录列表
router.post('/mat/approval/save', agrMatController.saveMatAppr); //获取农资审批记录列表 router.post('/mat/approval/save', agrMatController.saveMatAppr); //获取农资审批记录列表
router.post('/mat/approval/delete', agrMatController.deleteMatAppr); //获取农资审批记录列表
......
...@@ -53,7 +53,7 @@ app.use(function(req, res, next) { ...@@ -53,7 +53,7 @@ app.use(function(req, res, next) {
// error handler // error handler
app.use(function (err, req, res, next) { app.use(function (err, req, res, next) {
console.log(err) console.log(err.code, err.status)
// 记录下错误日志 // 记录下错误日志
requestLogModule.createRequestLog({ requestLogModule.createRequestLog({
url: req.path, url: req.path,
...@@ -63,10 +63,13 @@ app.use(function (err, req, res, next) { ...@@ -63,10 +63,13 @@ app.use(function (err, req, res, next) {
...req.params, ...req.params,
}), }),
user: req.user, user: req.user,
status: err.status || 500, status: err.status || err.code || 500,
msg: err.message || 'server error' msg: err.message || 'server error'
}); });
return res.status(err.status || 500).send({code: err.status || 500, msg: err.message || 'server error'}); if(err.code && err.message) {
return res.sendError(err);
}
return res.status(err.status || 500).send({code: err.status ||500, msg: err.message || 'server error'});
}); });
......
...@@ -11,6 +11,14 @@ module.exports = { ...@@ -11,6 +11,14 @@ module.exports = {
code: 40003, code: 40003,
message: "名称重复" message: "名称重复"
}, },
agrMatDuplicated: {
code: 40004,
message: "入库物品种类重复,请检查!"
},
agrMatHaveFlow: {
code: 40005,
message: "入库物品种类重复,请检查!"
},
databaseQueryError: { databaseQueryError: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment