|
@@ -37,31 +37,33 @@ module.exports = app => {
|
|
|
* 添加月信息价 并更新 工料平均单价、本期单价,调差金额等
|
|
|
* @return {void}
|
|
|
*/
|
|
|
- async add(data, monthList, mbList) {
|
|
|
+ async adds(data, monthList, mbList) {
|
|
|
if (!this.ctx.tender || !this.ctx.material) {
|
|
|
throw '数据错误';
|
|
|
}
|
|
|
const transaction = await this.db.beginTransaction();
|
|
|
try {
|
|
|
const material_month = this.ctx.material.months ? this.ctx.material.months.split(',') : [];
|
|
|
- material_month.push(data.yearmonth);
|
|
|
+ material_month.push(...data.yearmonths);
|
|
|
material_month.sort();
|
|
|
if (mbList.length !== 0) {
|
|
|
const insertArray = [];
|
|
|
const updateArray = [];
|
|
|
for (const mb of mbList) {
|
|
|
- const one_month = {
|
|
|
- tid: this.ctx.tender.id,
|
|
|
- mid: this.ctx.material.id,
|
|
|
- mb_id: mb.id,
|
|
|
- msg_tp: monthList.length !== 0 ? null : mb.msg_tp,
|
|
|
- yearmonth: data.yearmonth,
|
|
|
- };
|
|
|
- insertArray.push(one_month);
|
|
|
+ for (const ym of data.yearmonths) {
|
|
|
+ const one_month = {
|
|
|
+ tid: this.ctx.tender.id,
|
|
|
+ mid: this.ctx.material.id,
|
|
|
+ mb_id: mb.id,
|
|
|
+ msg_tp: monthList.length !== 0 ? null : mb.msg_tp,
|
|
|
+ yearmonth: ym,
|
|
|
+ };
|
|
|
+ insertArray.push(one_month);
|
|
|
+ }
|
|
|
if (monthList.length !== 0) {
|
|
|
const mb_msg_tp_sum = this._.sumBy(this._.filter(monthList, { mb_id: mb.id }), 'msg_tp');
|
|
|
- const month_num = material_month.length - this.ctx.helper.arrayCount(this._.concat(this._.map(this._.filter(monthList, { mb_id: mb.id }), 'msg_tp'), one_month.msg_tp), [null, '', 0]);
|
|
|
- const new_msg_tp = this.ctx.helper.round(this.ctx.helper.div(this.ctx.helper.add(mb_msg_tp_sum, one_month.msg_tp), month_num), this.ctx.material.decimal.up);
|
|
|
+ const month_num = material_month.length - this.ctx.helper.arrayCount(this._.concat(this._.map(this._.filter(monthList, { mb_id: mb.id }), 'msg_tp'), insertArray[0].msg_tp), [null, '', 0]);
|
|
|
+ const new_msg_tp = this.ctx.helper.round(this.ctx.helper.div(this.ctx.helper.add(mb_msg_tp_sum, insertArray[0].msg_tp), month_num), this.ctx.material.decimal.up);
|
|
|
const [newmsg_spread, newm_spread] = await this.ctx.service.materialBills.getSpread(mb, new_msg_tp);
|
|
|
const newTp = this.ctx.helper.round(this.ctx.helper.mul(mb.quantity, newm_spread), this.ctx.material.decimal.tp);
|
|
|
updateArray.push({
|