|
@@ -79,6 +79,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
private final IFormulaOptionService formulaOptionService;
|
|
|
private final ITextdictInfoService textDictInfoService;
|
|
|
private final IFormulaDataBlockService formulaDataBlockService;
|
|
|
+ private final IExcelTabService excelTabService;
|
|
|
+ private final IWbsInfoService wbsInfoService;
|
|
|
|
|
|
private TableElementConverter tec;
|
|
|
public final static String WP="WP";
|
|
@@ -168,9 +170,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
/*表格名称*/
|
|
|
List<AppWbsTreeContractVO> tableList =wbsTreeContractService.searchNodeAllTable(one.getPkId().toString(), "1", tec.getContractId().toString(),tec.getProjectId().toString());
|
|
|
tec.constantMap.put(TABLE_LIST,tableList);
|
|
|
- /*通过判断元素名称来确定,加入汇总公式延后执行*/
|
|
|
- /*tec.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));*/
|
|
|
+ /*监表质量附件,过滤掉隐藏表格*/
|
|
|
+ tec.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
|
|
|
+/*
|
|
|
tec.constantMap.put("tableNames",tableList.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
|
|
|
+*/
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -485,11 +489,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
public Map<String,Object> getWpMap(CurrentNode currentNode){
|
|
|
Map<String,Object> result = new HashMap<>(100);
|
|
|
List<WbsParam> total = new ArrayList<>();
|
|
|
- List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getId()).eq(WbsParam::getType,1));
|
|
|
+ List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getWbsNodeId()).eq(WbsParam::getType,1));
|
|
|
if(Func.isNotEmpty(wpsPublic)){
|
|
|
total.addAll(wpsPublic);
|
|
|
}
|
|
|
- List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getPrivateId()).eq(WbsParam::getType,1));
|
|
|
+ List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getWtpPkeyId()).eq(WbsParam::getType,1));
|
|
|
if(Func.isNotEmpty(wpsPrivate)){
|
|
|
total.addAll(wpsPrivate);
|
|
|
}
|
|
@@ -884,7 +888,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
data1.put("pkeyId",data.getPKeyId());
|
|
|
dataArray.add(data1);
|
|
|
}
|
|
|
- List<TableInfo> subTableInfo = FormulaUtils.getTableInfoList(dataArray);
|
|
|
+ List<TableInfo> subTableInfo = this.excelTabService.getTableInfoList(dataArray);
|
|
|
TableInfo example = tec.getTableInfoList().get(0);
|
|
|
subTableInfo.forEach(e -> {
|
|
|
e.setToBeUpdated(true);
|
|
@@ -1239,31 +1243,55 @@ public List<ElementData> setScale(Integer scale,List<ElementData> data){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public WbsTreePrivate getOriginWtp(Long pkeyId) {
|
|
|
+ WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,pkeyId));
|
|
|
+ int i=10;
|
|
|
+ WbsTreePrivate publicWtp = null;
|
|
|
+ while (i>0) {
|
|
|
+ WbsTreePrivate tmp= this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wtp.getWbsId()));
|
|
|
+ if (tmp == null) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ publicWtp = tmp;
|
|
|
+ i--;
|
|
|
+ }
|
|
|
+ if(publicWtp!=null){
|
|
|
+ /*私有引用项目的wbsId其实是被复制的项目的根节点p_key_id,只有溯源才能找到真正的wbsId*/
|
|
|
+ wtp.setWbsId(publicWtp.getWbsId());
|
|
|
+ }
|
|
|
+ return wtp;
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public WbsTreePrivate wtpId(Long pkeyId){
|
|
|
+ WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
|
|
|
+ while (wtc.getOldId()!=null){
|
|
|
+ wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getId,wtc.getOldId()).eq(WbsTreeContract::getProjectId,wtc.getProjectId()).last(" limit 1 "));
|
|
|
+ }
|
|
|
+ return this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId,wtc.getId()).eq(WbsTreePrivate::getProjectId,wtc.getProjectId()));
|
|
|
+ }
|
|
|
private List<KeyMapper> listForContract(List<Long> ids,String projectId,String nodeId){
|
|
|
String pkIds=ids.stream().map(String::valueOf).collect(Collectors.joining(","));
|
|
|
List<Map<String,Object>> listMap = listMap(ids,ExecuteType.INSPECTION);
|
|
|
- Map<String,Object> wtpMap= this.jdbcTemplate.queryForMap("select b.id parentId,b.wbs_id wbsId from m_wbs_tree_contract a join m_wbs_tree_private b on (a.id=b.id or a.old_id=b.id ) where a.p_key_id ="+nodeId+" and b.project_id="+projectId+" limit 1");
|
|
|
+ WbsTreePrivate wtp =wtpId(Long.parseLong(nodeId));
|
|
|
+ //Map<String,Object> wtpMap= this.jdbcTemplate.queryForMap("select b.id parentId,b.wbs_id wbsId from m_wbs_tree_private b where is_deleted=0 and id="+originId+" and project_id="+projectId);
|
|
|
if(Func.isNotEmpty(listMap)){
|
|
|
/*当前节点的某个元素存在多种作用域的公式,作用域范围越小优先级越高*/
|
|
|
List<KeyMapper> list= listMap.stream().map(m->BeanUtil.toBean(m,KeyMapper.class)).collect(Collectors.toList());
|
|
|
- String nodeIdStr= StringUtils.handleNull(wtpMap.get("parentId"));
|
|
|
- if(Func.isBlank(nodeIdStr)){
|
|
|
- /*暂时这么处理,严格上说要查找到项目级对应的节点*/
|
|
|
- nodeIdStr="''";
|
|
|
- }
|
|
|
- String wbsId =StringUtils.handleNull(wtpMap.get("wbsId"));
|
|
|
- if(Func.isBlank(wbsId)){
|
|
|
- /*暂时这么处理,严格上说要查找到项目级对应的节点*/
|
|
|
- wbsId="''";
|
|
|
- }
|
|
|
+ /*项目级*/
|
|
|
+ Long nodeIdPrivate= wtp.getId();
|
|
|
+ WbsTreePrivate origin =getOriginWtp(wtp.getPKeyId());
|
|
|
+ String wbsId =StringUtils.handleNull(origin.getPKeyId());
|
|
|
+ /*Wbs对应的节点*/
|
|
|
+ Long nodeIdWbs=origin.getId();
|
|
|
List<Map<String,Object>> efMap= this.jdbcTemplate.queryForList("select element_id elementId,formula_id formulaId,scope " +
|
|
|
"from m_element_formula_mapping " +
|
|
|
"where element_id in(" + list.stream().map(KeyMapper::getFieldId).map(Func::toStr).collect(Collectors.joining(",")) + ") " +
|
|
|
- "and is_deleted=0 " + " and (scope=0 or (scope=1 and wbs_id="+wbsId+") or(scope=2 and wbs_id="+wbsId+" and node_id="+nodeIdStr+")or (scope =10 and project_id = " + projectId + ") or (scope=20 and project_id =" + projectId + " and node_id=" +nodeIdStr +"))");
|
|
|
+ "and is_deleted=0 " + " and (scope=0 or (scope=1 and wbs_id="+wbsId+") or(scope=2 and wbs_id="+wbsId+" and node_id="+nodeIdWbs+")or (scope =10 and project_id = " + projectId + ") or (scope=20 and project_id =" + projectId + " and node_id=" +nodeIdPrivate +"))");
|
|
|
setFormula(list,efMap);
|
|
|
/*节点参数公式*/
|
|
|
- setParamsFormula( nodeId, list);
|
|
|
+ setParamsFormula( wtp.getPKeyId(),origin.getId(), list);
|
|
|
if(list.size()>0){
|
|
|
return list;
|
|
|
}
|
|
@@ -1271,39 +1299,30 @@ public List<ElementData> setScale(Integer scale,List<ElementData> data){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
- private void setParamsFormula(String nodeId, List<KeyMapper> list){
|
|
|
- if(StringUtils.isNotEmpty(nodeId)){
|
|
|
- /*存在工序节点id则检查节点参数*/
|
|
|
- WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,nodeId));
|
|
|
- if(wtc!=null){
|
|
|
- List<WbsParam> total = new ArrayList<>();
|
|
|
- WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId,wtc.getProjectId()).eq(WbsTreePrivate::getWbsId,wtc.getWbsId()).and(e->e.eq(WbsTreePrivate::getId,wtc.getId()).or().eq(WbsTreePrivate::getId,wtc.getOldId())));
|
|
|
- if(wtp!=null){
|
|
|
- List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,wtp.getPKeyId()));
|
|
|
- if(Func.isEmpty(wpsPrivate)){
|
|
|
- WbsTree wt = this.wbsTreeService.getOne(Wrappers.<WbsTree>lambdaQuery().and(e->e.eq(WbsTree::getId,wtc.getId()).or().eq(WbsTree::getId,wtc.getOldId())));
|
|
|
- if(wt!=null){
|
|
|
- List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,wt.getId()));
|
|
|
- if(Func.isNotEmpty(wpsPublic)){
|
|
|
- total.addAll(wpsPublic);
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- total.addAll(wpsPrivate);
|
|
|
- }
|
|
|
- }
|
|
|
- if(Func.isNotEmpty(total)){
|
|
|
- List<ElementFormulaMapping> mappingList = this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().in(ElementFormulaMapping::getParamId,total.stream().map(WbsParam::getId).collect(Collectors.toList())));
|
|
|
- if(Func.isNotEmpty(mappingList)){
|
|
|
- list.forEach(e->{
|
|
|
- mappingList.stream().filter(m->StringUtils.isEquals(m.getElementId(),e.getFieldId())).findAny().ifPresent(d->{
|
|
|
- e.setFormulaId(d.getFormulaId());
|
|
|
- });
|
|
|
+ private void setParamsFormula(Long privatePkeyId,Long wbsNodeId, List<KeyMapper> list){
|
|
|
+ if(StringUtils.isNotEmpty(privatePkeyId,wbsNodeId)){
|
|
|
+ List<WbsParam> total = new ArrayList<>();
|
|
|
+ List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,wbsNodeId));
|
|
|
+ /*同时获取WBS和 项目级的节点参数,如果存在同名则项目级覆盖WBS*/
|
|
|
+ if(Func.isNotEmpty(wpsPublic)){
|
|
|
+ total.addAll(wpsPublic);
|
|
|
+ }
|
|
|
+ List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,privatePkeyId));
|
|
|
+ if(Func.isNotEmpty(wpsPrivate)){
|
|
|
+ total.addAll(wpsPrivate);
|
|
|
+ }
|
|
|
+ if(Func.isNotEmpty(total)){
|
|
|
+ List<ElementFormulaMapping> mappingList = this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().in(ElementFormulaMapping::getParamId,total.stream().map(WbsParam::getId).collect(Collectors.toList())));
|
|
|
+ if(Func.isNotEmpty(mappingList)){
|
|
|
+ list.forEach(e->{
|
|
|
+ mappingList.stream().filter(m->StringUtils.isEquals(m.getElementId(),e.getFieldId())).findAny().ifPresent(d->{
|
|
|
+ e.setFormulaId(d.getFormulaId());
|
|
|
});
|
|
|
+ });
|
|
|
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|