单位成本对比表-合计行不在最末修复-集团老师补丁代码合并
This commit is contained in:
		
							parent
							
								
									14c86ec4d3
								
							
						
					
					
						commit
						d38b1d0be0
					
				|  | @ -1,29 +1,11 @@ | ||||||
| // |  | ||||||
| // Source code recreated from a .class file by IntelliJ IDEA |  | ||||||
| // (powered by FernFlower decompiler) |  | ||||||
| // |  | ||||||
| 
 |  | ||||||
| package nccloud.pubimpl.cm.cmreport.meascostcontrast; | package nccloud.pubimpl.cm.cmreport.meascostcontrast; | ||||||
| 
 | 
 | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.Collections; |  | ||||||
| import java.util.Comparator; |  | ||||||
| import java.util.HashMap; |  | ||||||
| import java.util.List; |  | ||||||
| import java.util.Map; |  | ||||||
| import nc.bd.framework.base.CMArrayUtil; | import nc.bd.framework.base.CMArrayUtil; | ||||||
| import nc.bd.framework.base.CMNumberUtil2; | import nc.bd.framework.base.CMNumberUtil2; | ||||||
| import nc.bd.framework.base.CMStringUtil; | import nc.bd.framework.base.CMStringUtil; | ||||||
| import nc.bs.cm.meascostcontrast.MeasCostQueryVOConverter; | import nc.bs.cm.meascostcontrast.MeasCostQueryVOConverter; | ||||||
| import nc.cmpub.business.util.CMUtil; | import nc.cmpub.business.util.CMUtil; | ||||||
| import nc.vo.cm.meascostcontrast.CMCommonConst1614; | import nc.vo.cm.meascostcontrast.*; | ||||||
| import nc.vo.cm.meascostcontrast.CMLangConst1614; |  | ||||||
| import nc.vo.cm.meascostcontrast.MeasCostItemVO; |  | ||||||
| import nc.vo.cm.meascostcontrast.MeasCostParamVO; |  | ||||||
| import nc.vo.cm.meascostcontrast.MeasCostQueryConditionVO; |  | ||||||
| import nc.vo.cm.meascostcontrast.MeasCostShowVO; |  | ||||||
| import nc.vo.cm.meascostcontrast.MeasCostUtil; |  | ||||||
| import nc.vo.cmpub.framework.report.CMConditionVO; | import nc.vo.cmpub.framework.report.CMConditionVO; | ||||||
| import nc.vo.pub.BusinessException; | import nc.vo.pub.BusinessException; | ||||||
| import nc.vo.pub.lang.UFDouble; | import nc.vo.pub.lang.UFDouble; | ||||||
|  | @ -33,379 +15,557 @@ import nccloud.pubitf.cm.meascostcontrast.ColumnMultiHeadInfo; | ||||||
| import nccloud.pubitf.cm.meascostcontrast.IColumnInfo; | import nccloud.pubitf.cm.meascostcontrast.IColumnInfo; | ||||||
| import nccloud.pubitf.cm.meascostcontrast.IMeascostcontrastComService; | import nccloud.pubitf.cm.meascostcontrast.IMeascostcontrastComService; | ||||||
| 
 | 
 | ||||||
|  | import java.util.*; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author wangjwt | ||||||
|  |  * @version 2019-4-29 上午11:02:23 | ||||||
|  |  * @since v6.3 | ||||||
|  |  */ | ||||||
| public class MeascostcontrastComServiceImpl implements IMeascostcontrastComService { | public class MeascostcontrastComServiceImpl implements IMeascostcontrastComService { | ||||||
|  |     /** | ||||||
|  |      * 动态汇总列 | ||||||
|  |      */ | ||||||
|     private List<String> sumFieldCode = null; |     private List<String> sumFieldCode = null; | ||||||
| 
 | 
 | ||||||
|     public MeascostcontrastComServiceImpl() { |     @Override | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public Map<String, Object> queryMeascostcontrast(MeasCostShowVO showVO, MeasCostParamVO paramVO) throws BusinessException { |     public Map<String, Object> queryMeascostcontrast(MeasCostShowVO showVO, MeasCostParamVO paramVO) throws BusinessException { | ||||||
|         this.sumFieldCode = new ArrayList(); |         this.sumFieldCode = new ArrayList<String>(); | ||||||
|  |         // 取得逻辑查询条件 | ||||||
|         Map<String, CMConditionVO> conditionMap = paramVO.getConditionMap(); |         Map<String, CMConditionVO> conditionMap = paramVO.getConditionMap(); | ||||||
|  |         // 获取动态处理完的列 | ||||||
|         List<IColumnInfo> itemgroupMap = null; |         List<IColumnInfo> itemgroupMap = null; | ||||||
|         List<Map<String, Object>> data = new ArrayList(); |         // 返回处理完整的列对应的数据 | ||||||
|         Map<String, Object> result = new HashMap(); |         List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); | ||||||
|  |         // 返回总的结果 | ||||||
|  |         Map<String, Object> result = new HashMap<String, Object>(); | ||||||
|  |         // 调用方法进行具体处理 | ||||||
|         if (showVO != null) { |         if (showVO != null) { | ||||||
|             Map<String, Integer> digitsMap = showVO.getDigitsMap(); |             Map<String, Integer> digitsMap = showVO.getDigitsMap();// 列表精度信息(单价、数量、金额) | ||||||
|  |             // 过滤要素 | ||||||
|             FactorVO[] factorVOs = this.filteShowFactor(showVO.getFactorVOs(), showVO.getFactorMapShow(), paramVO); |             FactorVO[] factorVOs = this.filteShowFactor(showVO.getFactorVOs(), showVO.getFactorMapShow(), paramVO); | ||||||
|  |             // 初始化动态表头------动态列只显示有数据的列 | ||||||
|             if (factorVOs != null) { |             if (factorVOs != null) { | ||||||
|                 itemgroupMap = this.reBuildItem(conditionMap, factorVOs, digitsMap); |                 itemgroupMap = this.reBuildItem(conditionMap, factorVOs, digitsMap); | ||||||
|             } |             } | ||||||
| 
 |             // 初始化数据 | ||||||
|             List<MeasCostItemVO> itemVOList = showVO.getItemVOList(); |             List<MeasCostItemVO> itemVOList = showVO.getItemVOList(); | ||||||
|             if (itemVOList != null) { |             if (itemVOList != null) { | ||||||
|                 MeasCostItemVO[] itemVOs = (MeasCostItemVO[])itemVOList.toArray(new MeasCostItemVO[itemVOList.size()]); |                 MeasCostItemVO[] itemVOs = itemVOList.toArray(new MeasCostItemVO[itemVOList.size()]); | ||||||
|  |                 // 组装列表数据 | ||||||
|                 data = this.dealQueryResult(itemVOs, digitsMap); |                 data = this.dealQueryResult(itemVOs, digitsMap); | ||||||
|  |                 // 合计行排序后不再最后一条,先注释掉排序 | ||||||
|                 this.sortVOByCode2(data); |                 this.sortVOByCode2(data); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         result.put("column", itemgroupMap); |         result.put("column", itemgroupMap); | ||||||
|         result.put("data", data); |         result.put("data", data); | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 按照编码对VO进行排序。 | ||||||
|  |      * | ||||||
|  |      * @param data | ||||||
|  |      */ | ||||||
|     private void sortVOByCode2(List<Map<String, Object>> data) { |     private void sortVOByCode2(List<Map<String, Object>> data) { | ||||||
|         if (data != null) { |         if (data != null) { | ||||||
|             Collections.sort(data, new Comparator<Map<String, Object>>() { |             Collections.sort(data, new Comparator<Map<String, Object>>() { | ||||||
|  |                 @Override | ||||||
|                 public int compare(Map<String, Object> o1, Map<String, Object> o2) { |                 public int compare(Map<String, Object> o1, Map<String, Object> o2) { | ||||||
|                     String code1 = (String)o1.get("bookname"); |                     // 排序调整:增加利润中心,工厂 | ||||||
|                     String ortname = (String)o1.get("orgname"); |                     int flag; | ||||||
|  |                     // 1.合计排最后 | ||||||
|  |                     String code1 = (String) o1.get("bookname"); | ||||||
|  |                     String ortname = (String) o1.get("orgname"); | ||||||
|  |                     String code2 = (String) o2.get("bookname"); | ||||||
|  |                     String ortname2 = (String) o2.get("orgname"); | ||||||
|  |                     // 英文环境下及繁体环境Total  需要排最后 只有账簿有合计值,其他都没有值,防止后边报错 | ||||||
|                     if (CMStringUtil.isNotEmpty(code1) && CMStringUtil.isEmpty(ortname)) { |                     if (CMStringUtil.isNotEmpty(code1) && CMStringUtil.isEmpty(ortname)) { | ||||||
|                         int flag = 1; |                         flag = 1; | ||||||
|                         return flag; |                         return flag; | ||||||
|                     } else { |                     } else if (CMStringUtil.isNotEmpty(code2) && CMStringUtil.isEmpty(ortname2)) { | ||||||
|                         code1 = o1.get("profitcentername") == null ? "" : (String)o1.get("profitcentername"); |                         return -1; | ||||||
|                         String code2 = o2.get("profitcentername") == null ? "" : (String)o2.get("profitcentername"); |  | ||||||
|                         int flag = code1.compareTo(code2); |  | ||||||
|                         if (flag != 0) { |  | ||||||
|                             return flag; |  | ||||||
|                         } else { |  | ||||||
|                             code1 = (String)o1.get("orgname") == null ? "" : (String)o1.get("orgname"); |  | ||||||
|                             code2 = (String)o2.get("orgname") == null ? "" : (String)o2.get("orgname"); |  | ||||||
|                             flag = code1.compareTo(code2); |  | ||||||
|                             if (flag != 0) { |  | ||||||
|                                 return flag; |  | ||||||
|                             } else { |  | ||||||
|                                 code1 = (String)o1.get("cccode") == null ? "" : (String)o1.get("cccode"); |  | ||||||
|                                 code2 = (String)o2.get("cccode") == null ? "" : (String)o2.get("cccode"); |  | ||||||
|                                 flag = code1.compareTo(code2); |  | ||||||
|                                 if (flag != 0) { |  | ||||||
|                                     return flag; |  | ||||||
|                                 } else { |  | ||||||
|                                     code1 = (String)o1.get("vcostobjcode") == null ? "" : (String)o1.get("vcostobjcode"); |  | ||||||
|                                     code2 = (String)o2.get("vcostobjcode") == null ? "" : (String)o2.get("vcostobjcode"); |  | ||||||
|                                     flag = code1.compareTo(code2); |  | ||||||
|                                     return flag; |  | ||||||
|                                 } |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |                     } | ||||||
|  | 					/*if(code1.equals("Total")){ | ||||||
|  | 						flag = 1; | ||||||
|  | 						return flag; | ||||||
|  | 					}else if(code1.equals("合计")){ | ||||||
|  | 						flag = 1; | ||||||
|  | 						return flag; | ||||||
|  | 
 | ||||||
|  | 					}*/ | ||||||
|  |                     // 2.利润中心 | ||||||
|  |                     code1 = o1.get("profitcentername") == null ? "" : (String) o1.get("profitcentername"); | ||||||
|  |                     code2 = o2.get("profitcentername") == null ? "" : (String) o2.get("profitcentername"); | ||||||
|  |                     flag = code1.compareTo(code2); | ||||||
|  |                     if (flag != 0) { | ||||||
|  |                         return flag; | ||||||
|  |                     } | ||||||
|  |                     // 3.工厂 | ||||||
|  |                     code1 = (String) o1.get("orgname") == null ? "" : (String) o1.get("orgname"); | ||||||
|  |                     code2 = (String) o2.get("orgname") == null ? "" : (String) o2.get("orgname"); | ||||||
|  |                     flag = code1.compareTo(code2); | ||||||
|  |                     if (flag != 0) { | ||||||
|  |                         return flag; | ||||||
|  |                     } | ||||||
|  |                     // 4.成本中心升序排序 | ||||||
|  |                     code1 = (String) o1.get("cccode") == null ? "" : (String) o1.get("cccode"); | ||||||
|  |                     code2 = (String) o2.get("cccode") == null ? "" : (String) o2.get("cccode"); | ||||||
|  |                     flag = code1.compareTo(code2); | ||||||
|  |                     if (flag != 0) { | ||||||
|  |                         return flag; | ||||||
|  |                     } | ||||||
|  |                     // 5.再按产品编码升序排序 | ||||||
|  |                     code1 = (String) o1.get("vcostobjcode") == null ? "" : (String) o1.get("vcostobjcode"); | ||||||
|  |                     code2 = (String) o2.get("vcostobjcode") == null ? "" : (String) o2.get("vcostobjcode"); | ||||||
|  |                     flag = code1.compareTo(code2); | ||||||
|  |                     return flag; | ||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * map中key为参数名,value为参数值 | ||||||
|  |      * 将获取到的集合参数名和参数值拼装在一起 | ||||||
|  |      * | ||||||
|  |      * @param itemVOs | ||||||
|  |      * @param digitsMap | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|     private List<Map<String, Object>> dealQueryResult(MeasCostItemVO[] itemVOs, Map<String, Integer> digitsMap) { |     private List<Map<String, Object>> dealQueryResult(MeasCostItemVO[] itemVOs, Map<String, Integer> digitsMap) { | ||||||
|  |         /** | ||||||
|  |          * "data":[ | ||||||
|  |          *           row  { | ||||||
|  |          *                 "nmeascostncost":"204.00", | ||||||
|  |          *                 "1002ncost":"1000.000", | ||||||
|  |          *                 "vcostobjcode":"001", | ||||||
|  |          *                 "vcostobjname":"物料分类001", | ||||||
|  |          *                 "nsumncost":"1020.000", | ||||||
|  |          *                 "nnum":"5.00", | ||||||
|  |          *                 "cccode":"", | ||||||
|  |          *                 "ccname":"", | ||||||
|  |          *                 "hx02ncost":"20.000" | ||||||
|  |          *             }, | ||||||
|  |          */ | ||||||
|         if (CMArrayUtil.isEmpty(itemVOs)) { |         if (CMArrayUtil.isEmpty(itemVOs)) { | ||||||
|             return null; |             return null; | ||||||
|         } else { |  | ||||||
|             List<Map<String, Object>> data = new ArrayList(); |  | ||||||
|             MeasCostItemVO[] result = new MeasCostItemVO[itemVOs.length + 1]; |  | ||||||
|             UFDouble nsumncost = UFDouble.ZERO_DBL; |  | ||||||
|             UFDouble nnum = UFDouble.ZERO_DBL; |  | ||||||
|             Map<String, UFDouble> sumMap = new HashMap(); |  | ||||||
| 
 |  | ||||||
|             for(String field : this.sumFieldCode) { |  | ||||||
|                 sumMap.put(field, UFDouble.ZERO_DBL); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             int i = 0; |  | ||||||
| 
 |  | ||||||
|             for(MeasCostItemVO item : itemVOs) { |  | ||||||
|                 if (item.getNnum() != null) { |  | ||||||
|                     nnum = CMNumberUtil2.add(new UFDouble[]{nnum, item.getNnum()}); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (item.getAttributeValue("nsumncost") != null) { |  | ||||||
|                     nsumncost = CMNumberUtil2.add(new UFDouble[]{nsumncost, (UFDouble)item.getAttributeValue("nsumncost")}); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 for(String key : sumMap.keySet()) { |  | ||||||
|                     UFDouble oldVal = (UFDouble)sumMap.get(key); |  | ||||||
|                     if (item.getAttributeValue(key) != null) { |  | ||||||
|                         UFDouble newVal = CMNumberUtil2.add(new UFDouble[]{oldVal, (UFDouble)item.getAttributeValue(key)}); |  | ||||||
|                         sumMap.put(key, newVal); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 result[i] = item; |  | ||||||
|                 ++i; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             this.processNullBignumber(result); |  | ||||||
|             Integer sumBignumber = this.getSumNumBignumber(result); |  | ||||||
|             MeasCostItemVO newItem = new MeasCostItemVO(); |  | ||||||
|             MeasCostItemVO tempMeasCostItemVO = itemVOs[0]; |  | ||||||
|             newItem.setBookname(CMLangConst1614.GET_NSUM_NAME()); |  | ||||||
|             newItem.setAttributeValue("nnum", nnum); |  | ||||||
|             newItem.setAttributeValue("nsumncost", nsumncost); |  | ||||||
| 
 |  | ||||||
|             for(String key : sumMap.keySet()) { |  | ||||||
|                 newItem.setAttributeValue(key, sumMap.get(key)); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             result[itemVOs.length] = newItem; |  | ||||||
| 
 |  | ||||||
|             for(MeasCostItemVO measCostItemVO : result) { |  | ||||||
|                 Map<String, Object> row = new HashMap(); |  | ||||||
|                 row.put("bookname", measCostItemVO.getBookname()); |  | ||||||
|                 row.put("profitcentername", measCostItemVO.getProfitcentername()); |  | ||||||
|                 row.put("orgname", measCostItemVO.getOrgname()); |  | ||||||
|                 row.put("cccode", measCostItemVO.getCccode()); |  | ||||||
|                 row.put("ccname", measCostItemVO.getCcname()); |  | ||||||
|                 row.put("vcostobjcode", measCostItemVO.getVcostobjcode()); |  | ||||||
|                 row.put("vcostobjname", measCostItemVO.getVcostobjname()); |  | ||||||
|                 row.put("nnum", this.setColumnScale(measCostItemVO.getNnum(), measCostItemVO.getBitnumber())); |  | ||||||
|                 row.put("measdocname", measCostItemVO.getMeasdocname()); |  | ||||||
|                 row.put("materialspec", measCostItemVO.getMaterialspec()); |  | ||||||
|                 row.put("materialtype", measCostItemVO.getMaterialtype()); |  | ||||||
|                 row.put("projectcode", measCostItemVO.getProjectcode()); |  | ||||||
|                 row.put("projectname", measCostItemVO.getProjectname()); |  | ||||||
|                 if (measCostItemVO.getFactorMap() != null) { |  | ||||||
|                     for(String str : measCostItemVO.getFactorMap().keySet()) { |  | ||||||
|                         if (str.equals("nmeascostncost")) { |  | ||||||
|                             row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), (Integer)digitsMap.get("PriceDigitsKey"))); |  | ||||||
|                         } else if (str.equals("nsumncost")) { |  | ||||||
|                             row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), (Integer)digitsMap.get("MoneyDigitsKey"))); |  | ||||||
|                         } else if (str.equals("nnum")) { |  | ||||||
|                             row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), sumBignumber)); |  | ||||||
|                         } else { |  | ||||||
|                             row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), (Integer)digitsMap.get("MoneyDigitsKey"))); |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 data.add(row); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             return data; |  | ||||||
|         } |         } | ||||||
|  |         List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); | ||||||
|  |         MeasCostItemVO[] result = new MeasCostItemVO[itemVOs.length + 1]; | ||||||
|  |         UFDouble nsumncost = UFDouble.ZERO_DBL;// 合计 | ||||||
|  |         UFDouble nnum = UFDouble.ZERO_DBL;// 产量 | ||||||
|  |         Map<String, UFDouble> sumMap = new HashMap<String, UFDouble>(); | ||||||
|  |         for (String field : this.sumFieldCode) { | ||||||
|  |             sumMap.put(field, UFDouble.ZERO_DBL); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         int i = 0; | ||||||
|  |         for (MeasCostItemVO item : itemVOs) { | ||||||
|  |             if (item.getNnum() != null) { | ||||||
|  |                 nnum = CMNumberUtil2.add(nnum, item.getNnum()); | ||||||
|  |             } | ||||||
|  |             if (item.getAttributeValue("nsumncost") != null) { | ||||||
|  |                 nsumncost = CMNumberUtil2.add(nsumncost, (UFDouble) item.getAttributeValue("nsumncost")); | ||||||
|  |             } | ||||||
|  |             for (String key : sumMap.keySet()) { | ||||||
|  |                 UFDouble oldVal = sumMap.get(key); | ||||||
|  |                 if (item.getAttributeValue(key) != null) { | ||||||
|  |                     UFDouble newVal = CMNumberUtil2.add(oldVal, (UFDouble) item.getAttributeValue(key)); | ||||||
|  |                     sumMap.put(key, newVal); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             result[i] = item; | ||||||
|  |             i++; | ||||||
|  |         } | ||||||
|  |         // 处理精度为空的数据,默认精度给2位,一定要在加入合计行之前处理 | ||||||
|  |         this.processNullBignumber(result); | ||||||
|  |         // 获取合计行数量的精度,获取每一行的精度,然后取最大的精度给合计行 | ||||||
|  |         Integer sumBignumber = this.getSumNumBignumber(result); | ||||||
|  | 
 | ||||||
|  |         MeasCostItemVO newItem = new MeasCostItemVO(); | ||||||
|  |         MeasCostItemVO tempMeasCostItemVO = itemVOs[0]; | ||||||
|  | 
 | ||||||
|  |         // 动态合计处理--将合计放在新增加的账簿上 | ||||||
|  | 		/*if (!CMStringUtil.isEmpty(tempMeasCostItemVO.getCccode())) { | ||||||
|  | 			newItem.setCccode(CMLangConst1614.GET_NSUM_NAME());// res:合计到成本中心 | ||||||
|  | 		}else{ | ||||||
|  | 			newItem.setCccode(""); | ||||||
|  | 			newItem.setVcostobjcode(CMLangConst1614.GET_NSUM_NAME());// res:合计到产品/成本对象 | ||||||
|  | 		}*/ | ||||||
|  |         newItem.setBookname(CMLangConst1614.GET_NSUM_NAME()); | ||||||
|  |         newItem.setAttributeValue("nnum", nnum); | ||||||
|  |         newItem.setAttributeValue("nsumncost", nsumncost); | ||||||
|  |         for (String key : sumMap.keySet()) { | ||||||
|  |             newItem.setAttributeValue(key, sumMap.get(key)); | ||||||
|  |         } | ||||||
|  |         result[itemVOs.length] = newItem; | ||||||
|  |         for (MeasCostItemVO measCostItemVO : result) { | ||||||
|  |             Map<String, Object> row = new HashMap<String, Object>(); | ||||||
|  |             // 核算账簿 | ||||||
|  |             row.put(CMCommonConst1614.BOOKNAME, measCostItemVO.getBookname()); | ||||||
|  |             // 利润中心 | ||||||
|  |             row.put(CMCommonConst1614.PROFITCENTERNAME, measCostItemVO.getProfitcentername()); | ||||||
|  |             // 工厂 | ||||||
|  |             row.put(CMCommonConst1614.ORGNAME, measCostItemVO.getOrgname()); | ||||||
|  |             row.put(CMCommonConst1614.CCCODE, measCostItemVO.getCccode()); | ||||||
|  |             row.put(CMCommonConst1614.CCNAME, measCostItemVO.getCcname()); | ||||||
|  |             row.put(CMCommonConst1614.VCOSTOBJCODE, measCostItemVO.getVcostobjcode()); | ||||||
|  |             row.put(CMCommonConst1614.VCOSTOBJNAME, measCostItemVO.getVcostobjname()); | ||||||
|  |             // digitsMap.get("NumDigitsKey")最小精度2位导致精度有问题,需要直接读计量单位精度 | ||||||
|  |             row.put(CMCommonConst1614.NNUM, this.setColumnScale(measCostItemVO.getNnum(), measCostItemVO.getBitnumber()));// 产量 | ||||||
|  | 
 | ||||||
|  |             // 增加三个字段 型号 主计量单位 规格----将参数和值对应 | ||||||
|  |             row.put(CMCommonConst1614.MEASDOCNAME, measCostItemVO.getMeasdocname()); | ||||||
|  |             row.put(CMCommonConst1614.MATERIALSPEC, measCostItemVO.getMaterialspec()); | ||||||
|  |             row.put(CMCommonConst1614.MATERIALTYPE, measCostItemVO.getMaterialtype()); | ||||||
|  |             // 增加项目编码和项目名称 | ||||||
|  |             row.put("projectcode", measCostItemVO.getProjectcode()); | ||||||
|  |             row.put("projectname", measCostItemVO.getProjectname()); | ||||||
|  |             if (measCostItemVO.getFactorMap() != null) { | ||||||
|  |                 for (String str : measCostItemVO.getFactorMap().keySet()) { | ||||||
|  |                     if (str.equals("nmeascostncost")) {// 单位成本 | ||||||
|  |                         row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), digitsMap.get("PriceDigitsKey"))); | ||||||
|  |                     } else if (str.equals("nsumncost")) {// 合计 | ||||||
|  |                         row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), digitsMap.get("MoneyDigitsKey"))); | ||||||
|  |                     } else if (str.equals("nnum")) {// 产量 | ||||||
|  |                         // digitsMap.get("NumDigitsKey")最小精度2位导致精度有问题,需要直接读计量单位精度 | ||||||
|  |                         row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), sumBignumber)); | ||||||
|  |                     } else {// 所有核算要素 | ||||||
|  |                         row.put(str, this.setColumnScale(measCostItemVO.getFactorMap().get(str), digitsMap.get("MoneyDigitsKey"))); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             data.add(row); | ||||||
|  |         } | ||||||
|  |         return data; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 获取合计行数量的精度,获取每一行的精度,然后取最大的精度给合计行 | ||||||
|  |      * | ||||||
|  |      * @param measCostItemVOS | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|     public Integer getSumNumBignumber(MeasCostItemVO[] measCostItemVOS) { |     public Integer getSumNumBignumber(MeasCostItemVO[] measCostItemVOS) { | ||||||
|         if (CMArrayUtil.isEmpty(measCostItemVOS)) { |         if (CMArrayUtil.isEmpty(measCostItemVOS)) { | ||||||
|             return 0; |             return 0; | ||||||
|         } else { |  | ||||||
|             Integer bignumber = 0; |  | ||||||
| 
 |  | ||||||
|             for(MeasCostItemVO measCostItemVO : measCostItemVOS) { |  | ||||||
|                 if (measCostItemVO != null && measCostItemVO.getBitnumber() != null && measCostItemVO.getBitnumber() > bignumber) { |  | ||||||
|                     bignumber = measCostItemVO.getBitnumber(); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             return bignumber; |  | ||||||
|         } |         } | ||||||
|  |         Integer bignumber = 0; | ||||||
|  |         for (MeasCostItemVO measCostItemVO : measCostItemVOS) { | ||||||
|  |             if (measCostItemVO != null && measCostItemVO.getBitnumber() != null && measCostItemVO.getBitnumber() > bignumber) { | ||||||
|  |                 bignumber = measCostItemVO.getBitnumber(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return bignumber; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 如果计量单位精度是null,按照物料产品分类、物料基本分类查询,拿不到计量单位,默认按照2位精度处理 | ||||||
|  |      * | ||||||
|  |      * @param measCostItemVOS | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|     public void processNullBignumber(MeasCostItemVO[] measCostItemVOS) { |     public void processNullBignumber(MeasCostItemVO[] measCostItemVOS) { | ||||||
|         if (!CMArrayUtil.isEmpty(measCostItemVOS)) { |         if (CMArrayUtil.isEmpty(measCostItemVOS)) { | ||||||
|             for(MeasCostItemVO measCostItemVO : measCostItemVOS) { |             return; | ||||||
|                 if (measCostItemVO != null && measCostItemVO.getBitnumber() == null) { |         } | ||||||
|                     measCostItemVO.setBitnumber(2); |         for (MeasCostItemVO measCostItemVO : measCostItemVOS) { | ||||||
|                 } |             if (measCostItemVO != null && measCostItemVO.getBitnumber() == null) { | ||||||
|  |                 // 数量精度都按照计量单位获取,按照物料成本分类、物料基本分类读取数据时候拿不到精度,如果精度是null,则按照2位精度处理,修改时间:2023.08.23,修改人:xuluv | ||||||
|  |                 measCostItemVO.setBitnumber(2); | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 精度处理 | ||||||
|  |      * | ||||||
|  |      * @param value 返回的数据 | ||||||
|  |      * @param scale 精度类型 | ||||||
|  |      */ | ||||||
|     private UFDouble setColumnScale(Object value, Integer scale) { |     private UFDouble setColumnScale(Object value, Integer scale) { | ||||||
|         if (value != null && !((UFDouble)value).equals(UFDouble.ZERO_DBL)) { |         if (value == null || ((UFDouble) value).equals(UFDouble.ZERO_DBL)) { | ||||||
|             UFDouble uf = (new UFDouble(Double.valueOf(value.toString()))).setScale(scale, 4); |  | ||||||
|             return uf; |  | ||||||
|         } else { |  | ||||||
|             return null; |             return null; | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private List<IColumnInfo> reBuildItem(Map<String, CMConditionVO> conditionMap, FactorVO[] factorVOs, Map<String, Integer> digitsMap) { |  | ||||||
|         String[] showDetailDiff = MeasCostUtil.getShowDetailDiff(conditionMap); |  | ||||||
|         Integer ishowtype = MeasCostQueryConditionVO.PRODUCT_VALUE; |  | ||||||
|         if (conditionMap.containsKey("ishowtype") && ((CMConditionVO)conditionMap.get("ishowtype")).getSingleValue() != null) { |  | ||||||
|             ishowtype = Integer.valueOf(((CMConditionVO)conditionMap.get("ishowtype")).getSingleValue()); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         List<IColumnInfo> itemsList = new ArrayList(); |  | ||||||
|         this.setCodeNameItems(itemsList, ishowtype, digitsMap, conditionMap); |  | ||||||
|         List var7; |  | ||||||
|         if (CMArrayUtil.isEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) { |  | ||||||
|             var7 = this.setSingleItems(itemsList, factorVOs, digitsMap); |  | ||||||
|         } else { |         } else { | ||||||
|             var7 = this.setDoubleItems(itemsList, factorVOs, showDetailDiff, digitsMap); |             UFDouble uf = new UFDouble(Double.valueOf(value.toString())).setScale(scale, 4); | ||||||
|  |             return uf; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         return var7; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void setCodeNameItems(List<IColumnInfo> itemsList, Integer ishowtype, Map<String, Integer> digitsMap, Map<String, CMConditionVO> conditionMap) { |     /** | ||||||
|         String[] itemNames = this.getItemNameByShowType(ishowtype); |      * 重构动态列表头 | ||||||
|         Integer isSumByCostcenter = conditionMap.containsKey("issumbycostcenter") ? Integer.valueOf(((CMConditionVO)conditionMap.get("issumbycostcenter")).getSingleValue()) : MeasCostQueryConditionVO.IS_COSTCENTER_VALUE; |      * | ||||||
|         itemsList.add(new ColumnInfo(CMLangConst1614.GET_ACCBOOK(), "bookname", ColumnInfo.LEFT)); |      * @param factorVOs    "核算要素"动态列初始化所需数据 | ||||||
|         itemsList.add(new ColumnInfo(CMLangConst1614.GET_PROFITCENTER(), "profitcentername", ColumnInfo.LEFT)); |      * @param conditionMap 逻辑查询条件 | ||||||
|         itemsList.add(new ColumnInfo(CMLangConst1614.GET_ORG(), "orgname", ColumnInfo.LEFT)); |      * @param digitsMap    列表精度----单价、数量、金额 | ||||||
|         if (MeasCostQueryConditionVO.IS_COSTCENTER_VALUE.equals(isSumByCostcenter)) { |      * @return 保存表头上下两层列的对应关系的map | ||||||
|             itemsList.add(new ColumnInfo(itemNames[0], "cccode", ColumnInfo.LEFT)); |      */ | ||||||
|             itemsList.add(new ColumnInfo(itemNames[1], "ccname", ColumnInfo.LEFT)); |     private List<IColumnInfo> reBuildItem(Map<String, CMConditionVO> conditionMap, FactorVO[] factorVOs, Map<String, Integer> digitsMap) { | ||||||
|  | 
 | ||||||
|  |         // 取得列的显示明细区分(区分本下阶、显示标准成本、区分成本中心、默认) | ||||||
|  |         String[] showDetailDiff = MeasCostUtil.getShowDetailDiff(conditionMap); | ||||||
|  |         // 取得成本对象的显示方式(成本对象、产品、产品成本分类、产品基本分类) | ||||||
|  |         Integer ishowtype = MeasCostQueryConditionVO.PRODUCT_VALUE; | ||||||
|  |         if (conditionMap.containsKey(MeasCostQueryConditionVO.ISHOWTYPE) && conditionMap.get(MeasCostQueryConditionVO.ISHOWTYPE).getSingleValue() != null) { | ||||||
|  |             ishowtype = Integer.valueOf(conditionMap.get(MeasCostQueryConditionVO.ISHOWTYPE).getSingleValue()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         itemsList.add(new ColumnInfo(itemNames[2], "vcostobjcode", ColumnInfo.LEFT)); |         // 保存列的list ----------getColumn | ||||||
|         itemsList.add(new ColumnInfo(itemNames[3], "vcostobjname", ColumnInfo.LEFT)); |         List<IColumnInfo> itemsList = new ArrayList<IColumnInfo>(); | ||||||
|  |         // // 保存两层列的对应关系 | ||||||
|  |         // MapList<String, String> itemgroupMapList = new MapList<String, String>(); | ||||||
|  |         // 设置固定的前三列,保存到list | ||||||
|  |         this.setCodeNameItems(itemsList, ishowtype, digitsMap, conditionMap); | ||||||
|  |         // 如果显示样式为单层,单层列保存到list | ||||||
|  |         if (CMArrayUtil.isEquals(CMCommonConst1614.DEFAULT_ITEMS, showDetailDiff)) { | ||||||
|  |             itemsList = this.setSingleItems(itemsList, factorVOs, digitsMap); | ||||||
|  |         } | ||||||
|  |         // 如果显示样式为双层,子父关系形式保存到list | ||||||
|  |         else { | ||||||
|  |             itemsList = this.setDoubleItems(itemsList, factorVOs, showDetailDiff, digitsMap); | ||||||
|  |         } | ||||||
|  |         // | ||||||
|  | 
 | ||||||
|  |         return itemsList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 设置固定列(包括三个列:产品编码、产品名称、产量) | ||||||
|  |      * | ||||||
|  |      * @param ishowtype 显示方式(成本对象、产品、产品成本分类、产品基本分类) | ||||||
|  |      */ | ||||||
|  |     private void setCodeNameItems(List<IColumnInfo> itemsList, Integer ishowtype, Map<String, Integer> digitsMap, Map<String, CMConditionVO> conditionMap) { | ||||||
|  |         // 取得产品编码和产品名称这两列的列名{0:产品编码列名,1:产品名称列名} | ||||||
|  |         String[] itemNames = this.getItemNameByShowType(ishowtype); | ||||||
|  | 
 | ||||||
|  |         // 是否有按成本中心汇总,有则直接汇总成本中心 | ||||||
|  |         Integer isSumByCostcenter = conditionMap.containsKey(MeasCostQueryConditionVO.ISSUMBYCOSTCENTER) ? Integer.valueOf(conditionMap.get( | ||||||
|  |                 MeasCostQueryConditionVO.ISSUMBYCOSTCENTER).getSingleValue()) : MeasCostQueryConditionVO.IS_COSTCENTER_VALUE; | ||||||
|  |         // 核算账簿 | ||||||
|  |         itemsList.add(new ColumnInfo(CMLangConst1614.GET_ACCBOOK(), CMCommonConst1614.BOOKNAME, ColumnInfo.LEFT)); | ||||||
|  |         // 利润中心 | ||||||
|  |         itemsList.add(new ColumnInfo(CMLangConst1614.GET_PROFITCENTER(), CMCommonConst1614.PROFITCENTERNAME, ColumnInfo.LEFT)); | ||||||
|  |         // 工厂 | ||||||
|  |         itemsList.add(new ColumnInfo(CMLangConst1614.GET_ORG(), CMCommonConst1614.ORGNAME, ColumnInfo.LEFT)); | ||||||
|  |         // 按照成本中心计算 | ||||||
|  |         if (MeasCostQueryConditionVO.IS_COSTCENTER_VALUE.equals(isSumByCostcenter)) { | ||||||
|  |             itemsList.add(new ColumnInfo(itemNames[0], CMCommonConst1614.CCCODE, ColumnInfo.LEFT)); | ||||||
|  |             // 设置"成本中心名称"列 | ||||||
|  |             itemsList.add(new ColumnInfo(itemNames[1], CMCommonConst1614.CCNAME, ColumnInfo.LEFT)); | ||||||
|  |         } | ||||||
|  |         // 按照成本中心计算 | ||||||
|  |         // 创建集合放列的 编码名称 | ||||||
|  |         // 设置"成本中心编码"列 | ||||||
|  |         // 设置"产品编码"列 | ||||||
|  |         itemsList.add(new ColumnInfo(itemNames[2], CMCommonConst1614.VCOSTOBJCODE, ColumnInfo.LEFT)); | ||||||
|  | 
 | ||||||
|  |         // 设置"产品名称"列 | ||||||
|  |         itemsList.add(new ColumnInfo(itemNames[3], CMCommonConst1614.VCOSTOBJNAME, ColumnInfo.LEFT)); | ||||||
|  | 
 | ||||||
|         if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype) || MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) { |         if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype) || MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) { | ||||||
|             itemsList.add(new ColumnInfo(CMLangConst1614.GET_MATERIALSPEC(), "materialspec", ColumnInfo.LEFT)); |             // 设置规格 | ||||||
|             itemsList.add(new ColumnInfo(CMLangConst1614.GET_MATERIALTYPE(), "materialtype", ColumnInfo.LEFT)); |             itemsList.add(new ColumnInfo(CMLangConst1614.GET_MATERIALSPEC(), CMCommonConst1614.MATERIALSPEC, ColumnInfo.LEFT)); | ||||||
|             itemsList.add(new ColumnInfo(CMLangConst1614.GET_MEASDOCNAME(), "measdocname", ColumnInfo.LEFT)); |             // 设置型号 | ||||||
|  |             itemsList.add(new ColumnInfo(CMLangConst1614.GET_MATERIALTYPE(), CMCommonConst1614.MATERIALTYPE, ColumnInfo.LEFT)); | ||||||
|  |             // 设置计量单位 | ||||||
|  |             itemsList.add(new ColumnInfo(CMLangConst1614.GET_MEASDOCNAME(), CMCommonConst1614.MEASDOCNAME, ColumnInfo.LEFT)); | ||||||
|         } |         } | ||||||
|         // todo 客开增加项目相关的列 |         // todo 客开增加项目相关的列 | ||||||
|         itemsList.add(new ColumnInfo("项目编码", "projectcode", ColumnInfo.LEFT)); |         itemsList.add(new ColumnInfo("项目编码", "projectcode", ColumnInfo.LEFT)); | ||||||
|         itemsList.add(new ColumnInfo("项目名称", "projectname", ColumnInfo.LEFT)); |         itemsList.add(new ColumnInfo("项目名称", "projectname", ColumnInfo.LEFT)); | ||||||
| 
 |         // 设置"产量"列 | ||||||
|         itemsList.add(new ColumnInfo(CMLangConst1614.GET_NNUM_NAME(), "nnum", ColumnInfo.RIGTH)); |         itemsList.add(new ColumnInfo(CMLangConst1614.GET_NNUM_NAME(), CMCommonConst1614.NNUM, ColumnInfo.RIGTH)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 根据显示方式不同,取前两列的列名 | ||||||
|  |      * | ||||||
|  |      * @param ishowtype 显示方式(成本对象、产品、产品成本分类、产品基本分类) | ||||||
|  |      * @return 字符串数组:{0:产品编码列名,1:产品名称列名} | ||||||
|  |      */ | ||||||
|     private String[] getItemNameByShowType(Integer ishowtype) { |     private String[] getItemNameByShowType(Integer ishowtype) { | ||||||
|         String[] itemName = new String[4]; |         String[] itemName = new String[4]; | ||||||
|         itemName[0] = CMLangConst1614.GET_CENTERCODE_NAME(); |         itemName[0] = CMLangConst1614.GET_CENTERCODE_NAME(); | ||||||
|         itemName[1] = CMLangConst1614.GET_CENTERNAME_NAME(); |         itemName[1] = CMLangConst1614.GET_CENTERNAME_NAME(); | ||||||
|  |         // 显示方式:成本对象 | ||||||
|         if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)) { |         if (MeasCostQueryConditionVO.COSTOBJECT_VALUE.equals(ishowtype)) { | ||||||
|             itemName[2] = CMLangConst1614.GET_OBJECT_CODE_NAME(); |             itemName[2] = CMLangConst1614.GET_OBJECT_CODE_NAME(); | ||||||
|             itemName[3] = CMLangConst1614.GET_OBJECT_NAME(); |             itemName[3] = CMLangConst1614.GET_OBJECT_NAME(); | ||||||
|         } else if (MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) { |         } | ||||||
|  |         // 显示方式:产品 | ||||||
|  |         else if (MeasCostQueryConditionVO.PRODUCT_VALUE.equals(ishowtype)) { | ||||||
|             itemName[2] = CMLangConst1614.GET_PRODUCT_CODE_NAME(); |             itemName[2] = CMLangConst1614.GET_PRODUCT_CODE_NAME(); | ||||||
|             itemName[3] = CMLangConst1614.GET_PRODUCT_NAME(); |             itemName[3] = CMLangConst1614.GET_PRODUCT_NAME(); | ||||||
|         } else if (MeasCostQueryConditionVO.PRODUCT_COST_VALUE.equals(ishowtype)) { |         } | ||||||
|  |         // 显示方式:产品成本分类 | ||||||
|  |         else if (MeasCostQueryConditionVO.PRODUCT_COST_VALUE.equals(ishowtype)) { | ||||||
|             itemName[2] = CMLangConst1614.GET_PRODUCT_COST_CODE_NAME(); |             itemName[2] = CMLangConst1614.GET_PRODUCT_COST_CODE_NAME(); | ||||||
|             itemName[3] = CMLangConst1614.GET_PRODUCT_COST_NAME(); |             itemName[3] = CMLangConst1614.GET_PRODUCT_COST_NAME(); | ||||||
|         } else if (MeasCostQueryConditionVO.PRODUCT_BASIC_VALUE.equals(ishowtype)) { |         } | ||||||
|  |         // 显示方式:产品基本分类 | ||||||
|  |         else if (MeasCostQueryConditionVO.PRODUCT_BASIC_VALUE.equals(ishowtype)) { | ||||||
|             itemName[2] = CMLangConst1614.GET_PRODUCT_BASIC_CODE_NAME(); |             itemName[2] = CMLangConst1614.GET_PRODUCT_BASIC_CODE_NAME(); | ||||||
|             itemName[3] = CMLangConst1614.GET_PRODUCT_BASIC_NAME(); |             itemName[3] = CMLangConst1614.GET_PRODUCT_BASIC_NAME(); | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         return itemName; |         return itemName; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 过滤要素 | ||||||
|  |      * | ||||||
|  |      * @param vos | ||||||
|  |      * @param factorMapShow | ||||||
|  |      * @param paramVO | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|     private FactorVO[] filteShowFactor(FactorVO[] vos, Map<String, String> factorMapShow, MeasCostParamVO paramVO) { |     private FactorVO[] filteShowFactor(FactorVO[] vos, Map<String, String> factorMapShow, MeasCostParamVO paramVO) { | ||||||
|  |         // 查看前端条件,【显示所有要素】,默认为否,是则展示所有要素 | ||||||
|         Map<String, CMConditionVO> conditionMap = paramVO.getConditionMap(); |         Map<String, CMConditionVO> conditionMap = paramVO.getConditionMap(); | ||||||
|         Integer isshowallfactors = conditionMap.containsKey("isshowallfactors") ? Integer.valueOf(((CMConditionVO)conditionMap.get("isshowallfactors")).getSingleValue()) : MeasCostQueryConditionVO.NO_SHOW_FACTORS_VALUE; |         Integer isshowallfactors = conditionMap.containsKey(MeasCostQueryConditionVO.ISSHOWALLFACTORS) ? Integer.valueOf(conditionMap.get( | ||||||
|         FactorVO[] result = null; |                 MeasCostQueryConditionVO.ISSHOWALLFACTORS).getSingleValue()) : MeasCostQueryConditionVO.NO_SHOW_FACTORS_VALUE; | ||||||
|         if (!MeasCostQueryConditionVO.NO_SHOW_FACTORS_VALUE.equals(isshowallfactors)) { |  | ||||||
|             result = (new MeasCostQueryVOConverter()).getShowFactorByParam(paramVO, Arrays.asList(vos), factorMapShow); |  | ||||||
|         } else { |  | ||||||
|             List<FactorVO> tmp = new ArrayList(); |  | ||||||
|             String[] factorcodes = (String[])factorMapShow.keySet().toArray(new String[0]); |  | ||||||
| 
 | 
 | ||||||
|             for(String code : factorcodes) { |         FactorVO[] result = null; | ||||||
|                 for(FactorVO vo : vos) { | 
 | ||||||
|  |         // 当该值不为默认值时 | ||||||
|  |         if (!MeasCostQueryConditionVO.NO_SHOW_FACTORS_VALUE.equals(isshowallfactors)) { | ||||||
|  |             // 不再需要对比要素,只需要将所有要素根据查询条件过滤后全部展示即可 | ||||||
|  |             result = new MeasCostQueryVOConverter().getShowFactorByParam(paramVO, Arrays.asList(vos), factorMapShow); | ||||||
|  | 
 | ||||||
|  |         } else { | ||||||
|  |             List<FactorVO> tmp = new ArrayList<FactorVO>(); | ||||||
|  |             String[] factorcodes = factorMapShow.keySet().toArray(new String[0]); | ||||||
|  |             for (String code : factorcodes) { | ||||||
|  |                 for (FactorVO vo : vos) { | ||||||
|                     if (vo.getFactorcode().equals(code)) { |                     if (vo.getFactorcode().equals(code)) { | ||||||
|                         tmp.add(vo); |                         tmp.add(vo); | ||||||
|                         break; |                         break; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 |             result = tmp.toArray(new FactorVO[0]); | ||||||
|             result = (FactorVO[])tmp.toArray(new FactorVO[0]); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // 对编码进行排序 | ||||||
|         this.sortVOByCode(result); |         this.sortVOByCode(result); | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 按照编码对VO进行排序。 | ||||||
|  |      * | ||||||
|  |      * @param vos | ||||||
|  |      */ | ||||||
|     private void sortVOByCode(FactorVO[] vos) { |     private void sortVOByCode(FactorVO[] vos) { | ||||||
|         if (vos != null && vos.length >= 2) { |         if (vos == null || vos.length < 2) { | ||||||
|             Arrays.sort(vos, new Comparator<FactorVO>() { |             return; | ||||||
|                 public int compare(FactorVO o1, FactorVO o2) { |  | ||||||
|                     String code1 = (String)o1.getAttributeValue("factorcode"); |  | ||||||
|                     String code2 = (String)o2.getAttributeValue("factorcode"); |  | ||||||
|                     return code1.compareTo(code2); |  | ||||||
|                 } |  | ||||||
|             }); |  | ||||||
|         } |         } | ||||||
|  |         Arrays.sort(vos, new Comparator<FactorVO>() { | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public int compare(FactorVO o1, FactorVO o2) { | ||||||
|  |                 String code1 = (String) o1.getAttributeValue(FactorVO.FACTORCODE); | ||||||
|  |                 String code2 = (String) o2.getAttributeValue(FactorVO.FACTORCODE); | ||||||
|  |                 return code1.compareTo(code2); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 单层列时,将列保存到list | ||||||
|  |      * | ||||||
|  |      * @param itemsList 保存基本列的list | ||||||
|  |      * @param factorVOs "核算要素"动态列初始化所需数据 | ||||||
|  |      */ | ||||||
|     private List<IColumnInfo> setSingleItems(List<IColumnInfo> itemsList, FactorVO[] factorVOs, Map<String, Integer> digitsMap) { |     private List<IColumnInfo> setSingleItems(List<IColumnInfo> itemsList, FactorVO[] factorVOs, Map<String, Integer> digitsMap) { | ||||||
|         itemsList.add(new ColumnInfo(CMLangConst1614.GET_NMEASCOST_NAME(), MeasCostUtil.getItemCodeByRule("nmeascost", "ncost"), ColumnInfo.RIGTH)); |         // 设置"单位成本"单列 | ||||||
|         itemsList.add(new ColumnInfo(CMLangConst1614.GET_NSUM_NAME(), MeasCostUtil.getItemCodeByRule("nsum", "ncost"), ColumnInfo.RIGTH)); |         itemsList.add(new ColumnInfo(CMLangConst1614.GET_NMEASCOST_NAME(), MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NMEASCOST, CMCommonConst1614.NCOST), ColumnInfo.RIGTH)); | ||||||
| 
 |         // 设置"合计"单列 | ||||||
|         for(FactorVO factorVO : factorVOs) { |         itemsList.add(new ColumnInfo(CMLangConst1614.GET_NSUM_NAME(), MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NSUM, CMCommonConst1614.NCOST), ColumnInfo.RIGTH)); | ||||||
|             String itemCode = MeasCostUtil.getItemCodeByRule(factorVO.getFactorcode(), "ncost"); |         // 设置"核算要素"列 | ||||||
|             String var10000 = factorVO.getFactorcode(); |         for (FactorVO factorVO : factorVOs) { | ||||||
|             String itemName = var10000 + "-" + CMUtil.getNameByMultiLang(factorVO, "factorname"); |             String itemCode = MeasCostUtil.getItemCodeByRule(factorVO.getFactorcode(), CMCommonConst1614.NCOST); | ||||||
|  |             String itemName = factorVO.getFactorcode() + "-" + CMUtil.getNameByMultiLang(factorVO, FactorVO.FACTORNAME); | ||||||
|  |             // 添加动态列 | ||||||
|             itemsList.add(new ColumnInfo(itemName, itemCode, ColumnInfo.RIGTH)); |             itemsList.add(new ColumnInfo(itemName, itemCode, ColumnInfo.RIGTH)); | ||||||
|             this.sumFieldCode.add(itemCode); |             this.sumFieldCode.add(itemCode); | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         return itemsList; |         return itemsList; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 双层列时,将下层列保存到list,并返回保存表头上下两层列的对应关系Map | ||||||
|  |      * | ||||||
|  |      * @param itemsList      保存基本列的list | ||||||
|  |      * @param factorVOs      "核算要素"动态列初始化所需数据 | ||||||
|  |      * @param showDetailDiff 列的显示样式(区分本下阶、显示标准成本、区分成本中心、默认) | ||||||
|  |      * @return 保存两层列的对应关系的Map | ||||||
|  |      */ | ||||||
|     private List<IColumnInfo> setDoubleItems(List<IColumnInfo> itemsList, FactorVO[] factorVOs, String[] showDetailDiff, Map<String, Integer> digitsMap) { |     private List<IColumnInfo> setDoubleItems(List<IColumnInfo> itemsList, FactorVO[] factorVOs, String[] showDetailDiff, Map<String, Integer> digitsMap) { | ||||||
|  |         // 存放多表头时的儿子信息 | ||||||
|         String[] childName = new String[showDetailDiff.length]; |         String[] childName = new String[showDetailDiff.length]; | ||||||
|         String[] childAlign = new String[showDetailDiff.length]; |         String[] childAlign = new String[showDetailDiff.length]; | ||||||
|         String[] childCode = new String[showDetailDiff.length]; |         String[] childCode = new String[showDetailDiff.length]; | ||||||
| 
 |         // 设置"单位成本"列 | ||||||
|         for(int i = 0; i < showDetailDiff.length; ++i) { |         for (int i = 0; i < showDetailDiff.length; i++) { | ||||||
|             String itemCode = MeasCostUtil.getItemCodeByRule("nmeascost", showDetailDiff[i]); |             String itemCode = MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NMEASCOST, showDetailDiff[i]); | ||||||
|             String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]); |             String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]); | ||||||
|             if (CMLangConst1614.GET_NCOST_NAME().equals(itemName)) { |             if (CMLangConst1614.GET_NCOST_NAME().equals(itemName)) { | ||||||
|                 itemName = CMLangConst1614.GET_ALL_NMEASCOST_NAME(); |                 itemName = CMLangConst1614.GET_ALL_NMEASCOST_NAME(); | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|             childName[i] = itemName; |             childName[i] = itemName; | ||||||
|             childCode[i] = itemCode; |             childCode[i] = itemCode; | ||||||
|             childAlign[i] = ColumnInfo.RIGTH; |             childAlign[i] = ColumnInfo.RIGTH; | ||||||
|  |             // itemsList.add(new ColumnInfo(itemName, itemCode, ColumnInfo.RIGTH)); | ||||||
|         } |         } | ||||||
|  |         // 多表头 时处理多表层的关系---单位成本 | ||||||
|  |         itemsList.add(MeascostcontrastComServiceImpl.getMultHeadColum(CMLangConst1614.GET_NMEASCOST_NAME(), childName, childCode, childAlign)); | ||||||
| 
 | 
 | ||||||
|         itemsList.add(getMultHeadColum(CMLangConst1614.GET_NMEASCOST_NAME(), childName, childCode, childAlign)); |         // 设置"合计"列 | ||||||
| 
 |         for (int i = 0; i < showDetailDiff.length; i++) { | ||||||
|         for(int i = 0; i < showDetailDiff.length; ++i) { |             String itemCode = MeasCostUtil.getItemCodeByRule(CMCommonConst1614.NSUM, showDetailDiff[i]); | ||||||
|             String itemCode = MeasCostUtil.getItemCodeByRule("nsum", showDetailDiff[i]); |  | ||||||
|             String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]); |             String itemName = MeasCostUtil.getItemNameByCode(showDetailDiff[i]); | ||||||
|             childName[i] = itemName; |             childName[i] = itemName; | ||||||
|             childCode[i] = itemCode; |             childCode[i] = itemCode; | ||||||
|             childAlign[i] = ColumnInfo.RIGTH; |             childAlign[i] = ColumnInfo.RIGTH; | ||||||
|  |             // itemsList.add(new ColumnInfo(itemName, itemCode, ColumnInfo.RIGTH)); | ||||||
|         } |         } | ||||||
|  |         // 多表头 时处理多表层的关系---合计 | ||||||
|  |         itemsList.add(MeascostcontrastComServiceImpl.getMultHeadColum(CMLangConst1614.GET_NSUM_NAME(), childName, childCode, childAlign)); | ||||||
| 
 | 
 | ||||||
|         itemsList.add(getMultHeadColum(CMLangConst1614.GET_NSUM_NAME(), childName, childCode, childAlign)); |         // 设置"核算要素"列 | ||||||
| 
 |         for (FactorVO factorVO : factorVOs) { | ||||||
|         for(FactorVO factorVO : factorVOs) { |  | ||||||
|             String groupItemCode = factorVO.getFactorcode(); |             String groupItemCode = factorVO.getFactorcode(); | ||||||
|             String var10000 = factorVO.getFactorcode(); |             String itemName = factorVO.getFactorcode() + "-" + CMUtil.getNameByMultiLang(factorVO, FactorVO.FACTORNAME); | ||||||
|             String itemName = var10000 + "-" + CMUtil.getNameByMultiLang(factorVO, "factorname"); |  | ||||||
| 
 | 
 | ||||||
|             for(int i = 0; i < showDetailDiff.length; ++i) { |             for (int i = 0; i < showDetailDiff.length; i++) { | ||||||
|                 String itemCode = MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[i]); |                 String itemCode = MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[i]); | ||||||
|                 String itemName1 = MeasCostUtil.getItemNameByCode(showDetailDiff[i]); |                 String itemName1 = MeasCostUtil.getItemNameByCode(showDetailDiff[i]); | ||||||
|                 childName[i] = itemName1; |                 childName[i] = itemName1; | ||||||
|                 childCode[i] = itemCode; |                 childCode[i] = itemCode; | ||||||
|                 childAlign[i] = ColumnInfo.RIGTH; |                 childAlign[i] = ColumnInfo.RIGTH; | ||||||
|  |                 // itemsList.add(new ColumnInfo(itemName1, itemCode, ColumnInfo.RIGTH)); | ||||||
|                 this.sumFieldCode.add(MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[0])); |                 this.sumFieldCode.add(MeasCostUtil.getItemCodeByRule(groupItemCode, showDetailDiff[0])); | ||||||
|             } |             } | ||||||
| 
 |             // 多表头 时处理多表层的关系---核算要素 | ||||||
|             itemsList.add(getMultHeadColum(itemName, childName, childCode, childAlign)); |             itemsList.add(MeascostcontrastComServiceImpl.getMultHeadColum(itemName, childName, childCode, childAlign)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return itemsList; |         return itemsList; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 构造子父关系 | ||||||
|  |      */ | ||||||
|     public static ColumnMultiHeadInfo getMultHeadColum(String multStr, String[] childStr, String[] childKey, String[] childAlign) { |     public static ColumnMultiHeadInfo getMultHeadColum(String multStr, String[] childStr, String[] childKey, String[] childAlign) { | ||||||
|         ColumnMultiHeadInfo multiHead = new ColumnMultiHeadInfo(multStr); |         ColumnMultiHeadInfo multiHead = new ColumnMultiHeadInfo(multStr); | ||||||
|         ColumnInfo[] children = new ColumnInfo[childStr.length]; |         ColumnInfo[] children = new ColumnInfo[childStr.length]; | ||||||
| 
 |         for (int i = 0; i < children.length; i++) { | ||||||
|         for(int i = 0; i < children.length; ++i) { |  | ||||||
|             children[i] = new ColumnInfo(childStr[i], childKey[i], childAlign[i]); |             children[i] = new ColumnInfo(childStr[i], childKey[i], childAlign[i]); | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         multiHead.setChildren(children); |         multiHead.setChildren(children); | ||||||
|         return multiHead; |         return multiHead; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue