|
@@ -0,0 +1,168 @@
|
|
|
+'use strict';
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ *
|
|
|
+ * @author Mai
|
|
|
+ * @date
|
|
|
+ * @version
|
|
|
+ */
|
|
|
+
|
|
|
+module.exports = app => {
|
|
|
+ class StageOther extends app.BaseService {
|
|
|
+ /**
|
|
|
+ * 构造函数
|
|
|
+ *
|
|
|
+ * @param {Object} ctx - egg全局变量
|
|
|
+ * @return {void}
|
|
|
+ */
|
|
|
+ constructor(ctx) {
|
|
|
+ super(ctx);
|
|
|
+ this.tableName = 'stage_other';
|
|
|
+ }
|
|
|
+
|
|
|
+ async getStageData(sid) {
|
|
|
+ const data = await this.getAllDataByCondition({where: { sid: sid }});
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ async getPreStageData(sorder) {
|
|
|
+ const sql = 'SELECT c.uuid, Sum(c.tp) as arrive_tp From ' + this.tableName +
|
|
|
+ ' WHERE s.`sorder` < ? And s.`tid` = ?' +
|
|
|
+ ' GROUP By uuid';
|
|
|
+ const sqlParam = [sorder, this.ctx.tender.id];
|
|
|
+ const data = await this.db.query(sql, sqlParam);
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ async getEndStageData(sorder) {
|
|
|
+ const sql = 'SELECT c.uuid, Sum(c.tp) as tp ' + this.tableName +
|
|
|
+ ' WHERE s.`order` <= ? And s.`tid` = ?' +
|
|
|
+ ' GROUP By uuid';
|
|
|
+ const sqlParam = [sorder, this.ctx.tender.id];
|
|
|
+ const data = await this.db.query(sql, sqlParam);
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ async _addDatas(data) {
|
|
|
+ const datas = data instanceof Array ? data : [data];
|
|
|
+ const insertData = [];
|
|
|
+ for (const d of datas) {
|
|
|
+ if (!d.name || !d.order) throw '新增其他数据,提交的数据错误';
|
|
|
+ const nd = {
|
|
|
+ uuid: this.uuid.v4(),
|
|
|
+ add_sid: this.ctx.stage.id,
|
|
|
+ add_uid: this.ctx.session.sessionUser.accountId,
|
|
|
+ sid: this.ctx.stage.id,
|
|
|
+ sorder: this.ctx.stage.order,
|
|
|
+ tid: this.ctx.tender.id,
|
|
|
+ create_time: new Date(),
|
|
|
+ };
|
|
|
+ nd.name = d.name;
|
|
|
+ nd.order = d.order;
|
|
|
+ if (d.real_time) nd.real_time = d.real_time;
|
|
|
+ if (d.memo) nd.memo = d.memo;
|
|
|
+ insertData.push(nd);
|
|
|
+ }
|
|
|
+ await this.db.insert(this.tableName, insertData);
|
|
|
+ return await this.getAllDataByCondition({
|
|
|
+ where: { sid: this.ctx.stage.id, uuid: this.ctx.helper._.map(insertData, 'uuid') }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ async _delDatas (data) {
|
|
|
+ const datas = data instanceof Array ? data : [data];
|
|
|
+ const orgDatas = await this.getAllDataByCondition({sid: this.ctx.stage.id, id: this.ctx.helper._.map(datas, 'id')});
|
|
|
+ for (const od of orgDatas) {
|
|
|
+ if (od.pre_used) throw '往期已经计量,不可删除';
|
|
|
+ }
|
|
|
+ await this.db.delete(this.tableName, {id: datas});
|
|
|
+ return datas;
|
|
|
+ }
|
|
|
+
|
|
|
+ async _updateDatas (data) {
|
|
|
+ const datas = data instanceof Array ? data : [data];
|
|
|
+ const orgDatas = await this.getAllDataByCondition({sid: this.ctx.stage.id, id: this.ctx.helper._.map(datas, 'id')});
|
|
|
+
|
|
|
+ const uDatas = [];
|
|
|
+ for (const d of datas) {
|
|
|
+ const od = this.ctx.helper._.find(orgDatas, {id: d.id});
|
|
|
+ if (!od) continue;
|
|
|
+
|
|
|
+ const nd = {id: od.id};
|
|
|
+ if (d.name) nd.name = d.name;
|
|
|
+ if (d.order) nd.order = d.order;
|
|
|
+ if (d.tp) nd.tp = this.ctx.helper.round(d.tp, this.ctx.tender.info.decimal.tp);
|
|
|
+ if (d.real_time) nd.real_time = d.real_time;
|
|
|
+ if (d.memo) nd.memo = d.memo;
|
|
|
+ uDatas.push(nd);
|
|
|
+ }
|
|
|
+ if (uDatas.length > 0) {
|
|
|
+ await this.db.updateRows(this.tableName, uDatas);
|
|
|
+ return uDatas;
|
|
|
+ } else {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async updateDatas(data) {
|
|
|
+ const result = {add: [], del: [], update: []};
|
|
|
+ try {
|
|
|
+ if (data.add) {
|
|
|
+ result.add = await this._addDatas(data.add);
|
|
|
+ }
|
|
|
+ if (data.update) {
|
|
|
+ result.update = await this._updateDatas(data.update);
|
|
|
+ }
|
|
|
+ if (data.del) {
|
|
|
+ result.del = await this._delDatas(data.del);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ } catch (err) {
|
|
|
+ if (err) result.err = err;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async updateHistory(stage, transaction) {
|
|
|
+ const datas = await this.getStageData(stage.id);
|
|
|
+ if (datas.length === 0) return;
|
|
|
+
|
|
|
+ const filter = {stimes: this.ctx.stage.curTimes, sorder: this.ctx.stage.curOrder};
|
|
|
+ const updateDatas = [];
|
|
|
+ for (const d of datas) {
|
|
|
+ const history = d.shistory && d.shistory !== '' ? JSON.parse(d.shistory) : [];
|
|
|
+ const his = this.ctx.helper._.find(datas, filter);
|
|
|
+ if (his) {
|
|
|
+ his.tp = d.tp;
|
|
|
+ } else {
|
|
|
+ history.push({ stimes: this.ctx.stage.curTimes, sorder: this.ctx.stage.curOrder, tp: d.tp });
|
|
|
+ }
|
|
|
+ updateDatas.push({ id: d.id, shistory: JSON.stringify(history) });
|
|
|
+ }
|
|
|
+ await transaction.updateRows(this.tableName, updateDatas);
|
|
|
+ }
|
|
|
+
|
|
|
+ async addInitialStageData(stage, preStage, transaction) {
|
|
|
+ if (!stage || !preStage) {
|
|
|
+ throw '标段数据有误';
|
|
|
+ }
|
|
|
+ const preDatas = await this.getStageData(preStage.id);
|
|
|
+ if (preDatas.length > 0) {
|
|
|
+ for (const pd of preDatas) {
|
|
|
+ delete pd.id;
|
|
|
+ pd.pre_used = pd.pre_used || !this.ctx.helper.checkZero(pd.tp);
|
|
|
+ delete pd.tp;
|
|
|
+ pd.sid = stage.id;
|
|
|
+ }
|
|
|
+ const result = await transaction.insert(this.tableName, preDatas);
|
|
|
+ return result.affectedRows === preDatas.length;
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return StageOther;
|
|
|
+};
|