Browse Source

公式相关:作用域bug

yangyj 2 năm trước cách đây
mục cha
commit
3ebc3af2b4

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -53,6 +53,7 @@ public class FormulaController {
     private final FormulaServiceImpl service;
     private final IExcelTabService tabService;
     private final  IWbsTreeService wbsTreeService;
+    private final IWbsTreePrivateService wbsTreePrivateService;
     private final IElementFormulaMappingService elementFormulaMappingService;
     private final JdbcTemplate jdbcTemplate;
     private final IContractInfoService contractInfoService;

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaService.java

@@ -35,6 +35,7 @@ public interface IFormulaService extends BaseService<Formula> {
     void format();
 
     List<Formula> getFormulaList(List<KeyMapper> keyMapperList);
+    /**ids 表流水号 projectId项目 nodeId工序节点的pkeyId ExecuteType执行模式 质检或者试验 首件*/
     List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType);
     Map<String,Object> getElementInfoByCodes(String codes);
 }

+ 9 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1157,19 +1157,24 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
     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);
-        List<Long> nodeIds= this.jdbcTemplate.queryForList("select b.parent_id from m_wbs_tree_contract  a join m_wbs_tree_private b on a.is_type_private_pid=b.p_key_id where a.p_key_id in("+pkIds+")",Long.class);
+        Map<String,Object> wtpMap= this.jdbcTemplate.queryForMap("select b.parent_id parentId,b.wbs_id wbsId from m_wbs_tree_contract  a join m_wbs_tree_private b on a.is_type_private_pid=b.p_key_id where a.p_key_id ="+ids.get(0)+" limit 1");
         if(Func.isNotEmpty(listMap)){
             /*当前节点的某个元素存在多种作用域的公式,作用域范围越小优先级越高*/
             List<KeyMapper> list= listMap.stream().map(m->BeanUtil.toBean(m,KeyMapper.class)).collect(Collectors.toList());
-            String nodeIdStr=nodeIds.stream().map(Object::toString).distinct().collect(Collectors.joining(StringPool.COMMA));
+            String nodeIdStr= StringUtils.handleNull(wtpMap.get("parentId"));
             if(Func.isBlank(nodeIdStr)){
                 /*暂时这么处理,严格上说要查找到项目级对应的节点*/
-                nodeIdStr="1";
+                nodeIdStr="''";
+            }
+            String wbsId =StringUtils.handleNull(wtpMap.get("wbsId"));
+            if(Func.isBlank(wbsId)){
+                /*暂时这么处理,严格上说要查找到项目级对应的节点*/
+                wbsId="''";
             }
             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<2 or (scope=2 and node_id in(" + nodeIdStr + ")) or (scope =10 and project_id = " + projectId + ") or (scope=20 and project_id =" + projectId + " and node_id in (" + 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="+nodeIdStr+")or (scope =10 and project_id = " + projectId + ") or (scope=20 and project_id =" + projectId + " and node_id=" +nodeIdStr +"))");
             setFormula(list,efMap);
             /*节点参数公式*/
             setParamsFormula( nodeId,  list);