schtime.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. const assert = require('assert');
  3. const _ = require('lodash');
  4. const { ObjectId } = require('mongoose').Types;
  5. const { CrudService } = require('naf-framework-mongoose/lib/service');
  6. const { BusinessError, ErrorCode } = require('naf-core').Error;
  7. class SchtimeService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx, 'schtime');
  10. this.model = this.ctx.model.Schtime;
  11. }
  12. async updateschtimes(data) {
  13. assert(data, '缺少信息项');
  14. for (const elm of data) {
  15. // 循环:elm代表上传上来的每个学校
  16. const schtime = await this.model.findById(elm.id);
  17. // 找到该学校原数据
  18. if (schtime) {
  19. // // 原数据处理,可以不用吧
  20. // schtime.schid = elm.schid;
  21. // schtime.year = elm.year;
  22. // schtime.planid = elm.planid;
  23. // schtime.remark = elm.remark;
  24. // schtime.daterange = elm.daterange;
  25. // // 工具方法整理出需要删除,修改,添加的数据,都是array的形式
  26. const { deletearray, updatearray, addarray } = await this.filterarray(schtime.arrange, elm.arrange);
  27. let termInfo = _.differenceBy(schtime.arrange, deletearray, 'id');
  28. for (const terminfo of termInfo) {
  29. const updateinfo = (_.filter(updatearray, item => item.id === terminfo.id))[0];
  30. terminfo.termid = updateinfo.termid;
  31. if (updateinfo.term) terminfo.term = updateinfo.term;
  32. if (updateinfo.batch) terminfo.batch = updateinfo.batch;
  33. if (updateinfo.batchid) terminfo.batchid = updateinfo.batchid;
  34. if (updateinfo.number) terminfo.number = updateinfo.number;
  35. if (updateinfo.type) terminfo.type = updateinfo.type;
  36. if (updateinfo.carnum) terminfo.carnum = updateinfo.carnum;
  37. }
  38. termInfo = _.concat(termInfo, addarray);
  39. schtime.arrange = termInfo;
  40. await schtime.save();
  41. }
  42. }
  43. }
  44. async filterarray(oldarray, newarray) {
  45. const _oldarray = _.cloneDeep(oldarray);
  46. const updatearray = [];
  47. const addarray = [];
  48. for (const _newarray of newarray) {
  49. if (_newarray.id) {
  50. updatearray.push(_newarray);
  51. } else {
  52. addarray.push(_newarray);
  53. }
  54. }
  55. const deletearray = _.pullAllBy(_oldarray, updatearray, 'id');
  56. return { deletearray, updatearray, addarray };
  57. }
  58. }
  59. module.exports = SchtimeService;