lossRate.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const mongoose = require('mongoose');
  2. const uuidV1 = require('uuid/v1');
  3. const _ = require('lodash');
  4. const lossModel = mongoose.model('std_ration_lib_loss_rate_list');
  5. const rationModel = mongoose.model('std_ration_lib_ration_items');
  6. const getLossList = async (libID) => {
  7. return await lossModel.find({ libID }).lean();
  8. }
  9. const batchUpdateRationLoss = async (libID, updateRateData) => {
  10. const bulks = [];
  11. const updateRateMap = {};
  12. updateRateData.forEach(item => {
  13. updateRateMap[item.ID] = item;
  14. });
  15. const rations = await rationModel.find({ rationRepId: libID }, '-_id ID rationGljList').lean();
  16. rations.forEach(ration => {
  17. if (ration.rationGljList && ration.rationGljList.length) {
  18. let needUpdate = false;
  19. ration.rationGljList.forEach(rGlj => {
  20. const matchRateItem = updateRateMap[rGlj.lossRateID];
  21. if (matchRateItem) {
  22. needUpdate = true;
  23. rGlj.lossRateNo = matchRateItem.serialNo;
  24. rGlj.lossRateName = matchRateItem.name;
  25. rGlj.lossRate = matchRateItem.rate;
  26. }
  27. });
  28. if (needUpdate) {
  29. bulks.push({ updateOne: { filter: { ID: ration.ID }, update: { $set: { rationGljList: ration.rationGljList } } } });
  30. }
  31. }
  32. });
  33. if (bulks.length) {
  34. await rationModel.bulkWrite(bulks);
  35. }
  36. }
  37. const save = async (data) => {
  38. console.log(data);
  39. const { addArr, updateArr, deleteArr } = data;
  40. const bulks = [];
  41. const newData = [];
  42. if (addArr && addArr.length) {
  43. addArr.forEach(item => {
  44. const newItem = { ...item, ID: uuidV1() };
  45. console.log(newItem);
  46. newData.push(newItem);
  47. bulks.push({ insertOne: { document: newItem } });
  48. });
  49. }
  50. const updateRateData = [];
  51. let libID;
  52. if (updateArr && updateArr.length) {
  53. updateArr.forEach(item => {
  54. if (!libID) {
  55. libID = item.libID;
  56. }
  57. const updateObj = { ...item };
  58. delete updateObj.ID;
  59. delete updateObj.libID;
  60. updateRateData.push({ name: updateObj.name, rate: updateObj.rate, serialNo: updateObj.serialNo, ID: item.ID });
  61. bulks.push({ updateOne: { filter: { ID: item.ID }, update: { $set: updateObj } } });
  62. });
  63. }
  64. if (deleteArr && deleteArr.length) {
  65. deleteArr.forEach(item => {
  66. bulks.push({ deleteOne: { filter: { ID: item.ID } } });
  67. })
  68. }
  69. if (bulks.length) {
  70. await lossModel.bulkWrite(bulks);
  71. }
  72. if (libID && updateRateData.length) {
  73. await batchUpdateRationLoss(libID, updateRateData)
  74. }
  75. return newData;
  76. }
  77. const getItemsBySerialNos = async (libID, serialNos) => {
  78. return await lossModel.find({ libID, serialNo: { $in: serialNos } }).lean();
  79. }
  80. module.exports = {
  81. getLossList,
  82. save,
  83. getItemsBySerialNos,
  84. }