123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /**
- * Created by zhang on 2018/6/7.
- */
- let gljUtil = {
- calcProjectGLJQuantity:function (projectGLJDatas,rationGLJDatas,rationDatas,billsDatas,q_decimal,_,scMathUtil) {
- let project_gljs = projectGLJDatas.gljList;
- let mixRatioMap = projectGLJDatas.mixRatioMap;
- let rations = rationDatas;
- let rationMap = _.indexBy(rations,'ID');
- let quantityMap={},changeArray=[];
- let rationGljGroup = _.groupBy(rationGLJDatas,'projectGLJID');
- let [billIDs,tech_billIDS] = this.getSubdivisionAndTechBillsLeavesID(billsDatas);//分别取分部分项和技术措施项目的所有叶子清单ID
- for(let pglj of project_gljs ){
- let pg_index = this.getIndex(pglj,gljKeyArray);
- pglj.subdivisionQuantity = 0;
- pglj.techQuantity = 0;
- pglj.quantity = 0;
- let gljGroup = rationGljGroup[pglj.id]?rationGljGroup[pglj.id]:[];//定额工料机没有,有可能是定额类型的工料机
- let result = this.getQuantityPerGLJ(gljGroup,rations,rationMap,pglj,billIDs,tech_billIDS,q_decimal,_,scMathUtil);
- pglj.subdivisionQuantity = result.subdivisionQuantity;
- pglj.techQuantity = result.techQuantity;
- pglj.quantity = result.quantity;
- quantityMap[pg_index] = pglj;
- }
- //计算做为组成物的消耗量
- for(let pkey in mixRatioMap){
- let mixRatioList = mixRatioMap[pkey];
- for(let m of mixRatioList){
- let m_index = gljOprObj.getIndex(m,gljKeyArray);
- let m_glj = quantityMap[m_index];
- let p_glj = quantityMap[pkey];
- if(m_glj&&p_glj){
- let quantity = scMathUtil.roundForObj(p_glj.quantity*parseFloat(m.consumption),q_decimal);
- let techQuantity = scMathUtil.roundForObj(p_glj.techQuantity*parseFloat(m.consumption),q_decimal);
- let subdivisionQuantity = scMathUtil.roundForObj(p_glj.subdivisionQuantity*parseFloat(m.consumption),q_decimal);
- m_glj.quantity = scMathUtil.roundForObj(m_glj.quantity+quantity,q_decimal);
- m_glj.techQuantity = scMathUtil.roundForObj(m_glj.techQuantity+techQuantity,q_decimal);
- m_glj.subdivisionQuantity = scMathUtil.roundForObj(m_glj.subdivisionQuantity+subdivisionQuantity,q_decimal);
- }
- }
- }
- },
- getQuantityPerGLJ : function (ration_glj_list,rations,rationMap,pglj,billIDs,tech_billIDS,q_decimal,_,scMathUtil) {
- let result={};
- let quantity_sum=0;//工料机汇总消耗量
- let sum = 0;//分部分项总消耗量
- let tech_sum = 0;//技术措施总消耗量
- for(let rg of ration_glj_list){
- let tem_ration = rationMap[rg.rationID];
- let r_quantity = tem_ration?scMathUtil.roundForObj(tem_ration.quantity,q_decimal):0;
- let glj_quantity = scMathUtil.roundForObj(rg.quantity, q_decimal);
- if(!r_quantity){
- continue;
- }
- let total = scMathUtil.roundForObj(glj_quantity*r_quantity, q_decimal);
- quantity_sum = scMathUtil.roundForObj(quantity_sum+total,q_decimal);
- if(_.includes(billIDs,rg.billsItemID)){//计算分部分项
- sum = scMathUtil.roundForObj(sum+total,q_decimal);
- }
- if(_.includes(tech_billIDS,rg.billsItemID)){//计算技术措施项目消耗量
- tech_sum = scMathUtil.roundForObj(tech_sum+total,q_decimal);
- }
- }
- for(let ra of rations){//计算定额类型工料机的消耗量
- if(ra.type == rationType.gljRation&&ra.projectGLJID===pglj.id){
- let r_quantity = scMathUtil.roundForObj(ra.quantity,q_decimal);
- r_quantity = r_quantity?r_quantity:0;
- quantity_sum = scMathUtil.roundForObj(quantity_sum+r_quantity,q_decimal);
- if(_.includes(billIDs,ra.billsItemID)){//计算分部分项
- sum = scMathUtil.roundForObj(sum+r_quantity,q_decimal);
- }
- if(_.includes(tech_billIDS,ra.billsItemID)){//计算技术措施项目消耗量
- tech_sum = scMathUtil.roundForObj(tech_sum+r_quantity,q_decimal);
- }
- }
- }
- result.subdivisionQuantity = sum;
- result.techQuantity = tech_sum;
- result.quantity = quantity_sum;
- return result;
- },
- getSubdivisionAndTechBillsLeavesID:function (billsDatas) {//分别取分部分项和技术措施项目的所有叶子清单ID
- /* if(projectObj){//存在,说明在前端调用
- return [projectObj.project.Bills.getSubdivisionProjectLeavesID(),projectObj.project.Bills.getTechLeavesID()];
- }*/
- let parentMap ={};
- let subdivisionBillID = null,techBillID = null,sIDs = [],tIDS = [];
- for(let b of billsDatas){
- if(parentMap[b.ParentID]){
- parentMap[b.ParentID].push(b);
- }else {
- parentMap[b.ParentID]= [b];
- }
- if(this.isFlag(b)&&b.flagsIndex.fixed.flag==this.fixedFlag.SUB_ENGINERRING) {
- subdivisionBillID = b.ID;
- }
- if(this.isFlag(b)&&b.flagsIndex.fixed.flag==this.fixedFlag.CONSTRUCTION_TECH){
- techBillID = b.ID;
- }
- }
- getLeaveIDs(subdivisionBillID,parentMap,sIDs);
- getLeaveIDs(techBillID,parentMap,tIDS);
- return [sIDs,tIDS];
- function getLeaveIDs(ID,parentM,leaveIDs) {
- if(parentM[ID] && parentM[ID].length > 0){
- let children = parentM[ID];
- for(let c of children){
- if(parentM[c.ID]){
- getLeaveIDs(c.ID,parentM,leaveIDs);
- }else {
- leaveIDs.push(c.ID);
- }
- }
- }
- }
- },
- isFlag : function (v) {
- return this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed) && this.isDef(v.flagsIndex.fixed.flag);
- }
- ,
- isDef:function (v) {
- return v !== undefined && v !== null;
- },
- getIndex(obj, pops){
- let t_index = '';
- let k_arr = [];
- for (let p of pops) {
- let tmpK = (obj[p] == undefined || obj[p] == null || obj[p] == '') ? 'null' : obj[p];
- k_arr.push(tmpK);
- }
- t_index = k_arr.join("|-|");
- return t_index;
- },
- fixedFlag : {
- // 分部分项工程
- SUB_ENGINERRING: 1,
- // 措施项目
- MEASURE: 2,
- // 施工技术措施项目
- CONSTRUCTION_TECH: 3
- }
- }
|