فهرست منبع

公式相关调整

yangyj 2 سال پیش
والد
کامیت
0b458bbfd3
18فایلهای تغییر یافته به همراه315 افزوده شده و 106 حذف شده
  1. 25 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaBean.java
  2. 25 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ElementFormulaMapping.java
  3. 11 3
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/Formula.java
  4. 19 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ParamBean.java
  5. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsFormElementVO.java
  6. 25 6
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  7. 66 39
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java
  8. 15 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java
  9. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Container.java
  10. 9 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ElementFormulaMappingMapper.java
  11. 18 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ElementFormulaMappingMapper.xml
  12. 4 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/FormulaMapper.xml
  13. 6 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  14. 9 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IElementFormulaMappingService.java
  15. 19 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ElementFormulaMappingServiceImpl.java
  16. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  17. 33 39
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  18. 25 12
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 25 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaBean.java

@@ -1,6 +1,8 @@
 package org.springblade.manager.dto;
 
 import lombok.Data;
+import org.springblade.manager.entity.Formula;
+import org.springframework.beans.BeanUtils;
 
 import javax.validation.constraints.Size;
 
@@ -11,14 +13,35 @@ import javax.validation.constraints.Size;
  */
 @Data
 public class FormulaBean {
+    public static Integer GLOBAL=1;
+    public static Integer PART=10;
     private Long id;
     private String formula;
     private String remark;
     private String number;
-    private Long wbsId;
+    private Long nodeId;
     private Long elementId;
     private String map;
     private Integer scale;
     private Integer batch;
-    private Integer out;
+    private Integer outm;
+    private Integer scope;
+    public Formula toFormula(){
+        Formula f= new Formula();
+        BeanUtils.copyProperties(this,f);
+        return f;
+    }
+    public Boolean isGlobal(){
+        return GLOBAL.equals(this.scope);
+    }
+    public Boolean isPart(){
+        return PART.equals(this.scope);
+    }
+    public Boolean isNewOne(){
+        return this.id==null;
+    }
+    public Boolean verify(){
+        return !(this.formula==null||elementId==null||scope==null);
+    }
+
 }

+ 25 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ElementFormulaMapping.java

@@ -0,0 +1,25 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import javax.validation.constraints.Size;
+
+/**
+ * @author yangyj
+ * @Date 2022/11/15 9:16
+ * @description 点开配置页面会自动生成;同步自动生成;元素不再是表单的从表,提升到WBS全局
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("m_element_formula_mapping")
+public class ElementFormulaMapping extends BaseEntity {
+    @Size(max = 20)
+    private Long elementId;
+    @Size(max = 20)
+    private Long nodeId;
+    @Size(max = 20)
+    private Long formulaId;
+}

+ 11 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/Formula.java

@@ -19,7 +19,7 @@ import java.util.List;
 @Data
 @TableName("m_formula")
 public class Formula extends BaseEntity {
-   /*输出方式,填充*/
+   /**输出方式,填充*/
    public static Integer FULL=1;
    private static Integer AUTO=0;
    private String rely;
@@ -30,13 +30,21 @@ public class Formula extends BaseEntity {
    private Integer orderNum;
    private String remark;
    @Size(max = 20)
-   private Long wbsId;
+   private Long nodeId;
    @Size(max = 20)
    private Long elementId;
    private String map;
    private Integer scale;
    private Integer batch;
-   private Integer out;
+   private Integer scope;
+   /**
+    * 输出模式,0自动 1填充
+    * */
+   private Integer outm;
+   /**关联的节点参数id
+    * */
+   private Long paramId;
+
 
    public List<String> getRelyList(){
       if(Func.isNotBlank(rely)){

+ 19 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ParamBean.java

@@ -0,0 +1,19 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+import org.springblade.manager.dto.WbsParamBean;
+
+import java.util.List;
+
+/**
+ * @author yangyj
+ * @Date 2022/11/11 18:00
+ * @description TODO
+ */
+@Data
+public class ParamBean {
+   private List<WbsParamBean> wps ;
+   private String wbsId;
+   private String projectId;
+   private Long   nodeId;
+}

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsFormElementVO.java

@@ -24,4 +24,6 @@ public class WbsFormElementVO extends WbsFormElement {
      */
     private Integer isSaveFormula;
 
+    private Integer globalFormula;
+
 }

+ 25 - 6
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -17,11 +17,13 @@ import com.jfireel.expression.token.Token;
 import com.jfireel.expression.token.TokenType;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.poi.ss.formula.functions.T;
+import org.springblade.core.tool.utils.CharPool;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.ElementData;
 
+import java.io.File;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -1078,12 +1080,7 @@ public class CustomFunction {
 		return StringPool.EMPTY;
 	}
 
-	public static void main11(String[] args) {
-		Date d= new Date();
-		DateTime d2= new DateTime("2022-11-13 12:12:12");
-		System.out.println(dateMin(d,d2));
-		System.out.println(dateMax(d,d2));
-	}
+
 	/**
 	 * @Description 时间比较获取
 	 * @Param [list:时间集合, comparator 比较器 ]
@@ -1124,6 +1121,28 @@ public class CustomFunction {
 	}
 
 
+	public static String summary(List<String> tableNames){
+		if(ListUtils.isNotEmpty(tableNames)){
+			return tableNames.stream().map(e->e.replaceAll("_+\\d+","")).distinct().collect(Collectors.joining(StringPool.NEWLINE));
+		}
+		return StringPool.EMPTY;
+	};
+
+   public String checkItems(List<String> items,List<Object> l1,List<Object> l2,List<Object> l3,List<Object> l4,List<Object> l5,List<Object> l6,List<Object> l7,List<Object> l8,List<Object> l9,List<Object> l10,List<Object> l11,List<Object> l12){
+   	List<List<Object>> data = new ArrayList<>(Arrays.asList(l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12));
+   	List<String> result = new ArrayList<>();
+   	for(int i=0;i<data.size();i++){
+   		List<Object> list = data.get(i);
+   		if(list.stream().anyMatch(StringUtils::isNotEmpty)){
+   			result.add(items.get(i));
+		}
+	}
+   	if(ListUtils.isNotEmpty(result)){
+   		return String.join("、",result);
+	}
+   	return StringPool.EMPTY;
+   }
+
 
 	/**
 	 * @Description 计算t1~t2,t3~t4 两个时间段的合计时间,unit 输入数值的单位

+ 66 - 39
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -11,6 +11,7 @@ import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -19,7 +20,9 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.RegexUtil;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.*;
+import org.springblade.manager.entity.ElementFormulaMapping;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.service.IElementFormulaMappingService;
 import org.springblade.manager.service.IExcelTabService;
 import org.springblade.manager.service.impl.FormulaServiceImpl;
 import org.springblade.manager.wrapper.FormulaWrapper;
@@ -45,51 +48,58 @@ import java.util.stream.Collectors;
 public class FormulaController {
     private final FormulaServiceImpl service;
     private final IExcelTabService tabService;
+    private final IElementFormulaMappingService elementFormulaMappingService;
     private final JdbcTemplate jdbcTemplate;
     /**
      * 新增或修改
      */
     @PostMapping("/save")
-    @ApiOperationSupport(order = 4)
-    @ApiOperation(value = "新增或修改", notes = "传入")
-    public R save(@RequestBody Formula f) {
-        f.setFormula(StringUtils.escapeFormula(f.getFormula()));
-        if(this.service.count(Wrappers.<Formula>query().lambda().eq(Formula::getElementId,f.getElementId()))>0){
-            return R.status(false);
-        }
-        this.service.relyParse(f);
-        service.save(f);
-        return R.data(f.getId());
+    @Deprecated
+    public R save(@RequestBody FormulaBean f) {
+            return saveOrUpdate(f);
     }
 
+
+
     /**
      * 修改
      */
     @PostMapping("/update")
-    @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "修改", notes = "传入脚本")
+    @Deprecated
     public R update( @RequestBody FormulaBean f) {
-        f.setFormula(StringUtils.escapeFormula(f.getFormula()));
-        if(f.getId()!=null){
-            Formula old = this.service.getById(f.getId());
-            if(old!=null){
-                BeanUtils.copyProperties(f,old);
-                this.service.relyParse(old);
-                return R.status(service.updateById(old));
-            }
-        }
-        return R.status(false);
+           return saveOrUpdate(f);
     }
 
     @PostMapping("/saveOrUpdate")
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "保存或修改公式脚本", notes = "保存或修改公式脚本")
-    public R saveOrUpdate( @RequestBody Formula f) {
-        if(f.getId()==null){
-         return    save(f);
-        }else{
-          return   update(Objects.requireNonNull(BeanUtil.copy(f, FormulaBean.class)));
-        }
+    public R saveOrUpdate( @RequestBody FormulaBean f) {
+         if(f.verify()){
+             Formula fa  =f.toFormula();
+             fa.setFormula(StringUtils.escapeFormula(f.getFormula()));
+             this.service.relyParse(fa);
+             if(f.isNewOne()){
+                 if(f.isPart()){
+                     if(f.getNodeId()!=null){
+                         fa.setId(SnowFlakeUtil.getId());
+                         this.service.save(fa);
+                         ElementFormulaMapping efm = new ElementFormulaMapping();
+                         efm.setFormulaId(fa.getId());
+                         efm.setNodeId(f.getNodeId());
+                         efm.setElementId(f.getElementId());
+                         this.elementFormulaMappingService.save(efm);
+                         return R.success("新增成功");
+                     }else{
+                         R.fail("保存不成功,请检查nodeId字段是否为空") ;
+                     }
+                 }else{
+                      R.status(this.service.save(fa));
+                 }
+             }else{
+                 R.status(this.service.updateById(fa));
+             }
+         }
+        return R.fail("保存不成功,请检查elementId、formula、scope字段是否为空");
     }
 
     /**
@@ -99,7 +109,12 @@ public class FormulaController {
     @ApiOperationSupport(order = 6)
     @ApiOperation(value = "删除", notes = "传入id集合")
     public R remove(@RequestParam String ids) {
-        return R.status(this.service.deleteLogic(Func.toLongList(ids)));
+        if(StringUtils.isNotEmpty(ids)) {
+            List<Long> ids_d=Func.toLongList(ids);
+            this.elementFormulaMappingService.update(Wrappers.<ElementFormulaMapping>lambdaUpdate().set(ElementFormulaMapping::getIsDeleted, 1).in(ElementFormulaMapping::getFormulaId,ids_d));
+            return R.status(this.service.deleteLogic(ids_d));
+        }
+        return R.fail("无效id");
     }
     /**
      * 查询单条
@@ -107,11 +122,23 @@ public class FormulaController {
     @ApiOperationSupport(order =7)
     @ApiOperation(value = "查看详情", notes = "传入id")
     @GetMapping("/detail")
-    public R<FormulaBean> detail(Formula f) {
-        Formula detail = service.getOne(Condition.getQueryWrapper(f));
-        if(detail!=null){
-           return R.data(BeanUtil.copy(detail,FormulaBean.class));
-        }
+    public R<FormulaBean> detail(FormulaBean f) {
+         Formula data = null;
+         if(f.isGlobal()){
+             if(f.getElementId()!=null) {
+                 data = this.service.getOne(Wrappers.<Formula>lambdaQuery().eq(Formula::getElementId, f.getElementId()));
+             }
+         }else if(f.isPart()){
+             if(f.getElementId()!=null&&f.getNodeId()!=null) {
+                 ElementFormulaMapping efm = this.elementFormulaMappingService.getOne(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getElementId, f.getElementId()).eq(ElementFormulaMapping::getNodeId, f.getNodeId()));
+                 if(efm!=null){
+                     data=this.service.getById(efm.getFormulaId());
+                 }
+             }
+         }
+         if(data!=null){
+             return R.data(BeanUtil.copy(data,FormulaBean.class));
+         }
         return R.success("无数据");
     }
 
@@ -120,8 +147,8 @@ public class FormulaController {
     @GetMapping("/page")
     public IPage<FormulaBean> userSearch(@ApiIgnore FormulaBean param, @ApiIgnore Query query) {
         LambdaQueryWrapper<Formula> queryWrapper = Wrappers.<Formula>query().lambda();
-        if(Func.isNotEmpty(param.getWbsId())){
-            queryWrapper.eq(Formula::getWbsId,param.getWbsId());
+        if(Func.isNotEmpty(param.getNodeId())){
+            queryWrapper.eq(Formula::getNodeId,param.getNodeId());
         }
         if(Func.isNotEmpty(param.getFormula())){
             queryWrapper.like(Formula::getFormula,param.getFormula());
@@ -145,8 +172,8 @@ public class FormulaController {
                elementIds.forEach(e->{
                      Formula formula = new Formula();
                      formula.setElementId(e);
-                     formula.setWbsId(bean.getNodeId());
-                     formula.setOut(Formula.FULL);
+                     formula.setNodeId(bean.getNodeId());
+                     formula.setOutm(Formula.FULL);
                      Map<String,String> m= new HashMap<>();
                      m.put("name",bean.getName());
                      m.put("id",bean.getParamId().toString());
@@ -207,7 +234,7 @@ public class FormulaController {
             }
             List<Object> data = CustomFunction.b445random(info.getSize(),info.getDesign(),info.getDev(),info.getFail(),1);
             String[] dw = keymap.get(info.getKey()).split(StringPool.SEMICOLON);
-            Map<String,Object> result = new HashMap<>();
+            Map<String,Object> result = new HashMap<>(dw.length*2);
             if(dw.length==1){
                 result.put(info.getKey()+"__"+dw[0],data.stream().filter(StringUtils::isNotEmpty).map(Func::toStr).collect(Collectors.joining("、")));
             }else{

+ 15 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.CollectionUtil;
@@ -20,9 +21,11 @@ import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.IWbsParamService;
+import org.springblade.manager.vo.ParamBean;
 import org.springblade.manager.wrapper.FormulaWrapper;
 import org.springblade.manager.wrapper.WbsParamWrapper;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -43,6 +46,7 @@ import java.util.stream.Collectors;
 @Api(value = "节点参数", tags = "节点参数")
 public class WbsParamController {
     private final IWbsParamService service;
+    private final JdbcTemplate jdbcTemplate;
     private final IFormulaService formulaService;
 
     /**
@@ -73,7 +77,8 @@ public class WbsParamController {
     @PostMapping("/saveOrUpdateBatch")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "批量保存或修改参数", notes = "批量保存或修改参数")
-    public R saveOrUpdateBatch(@RequestBody List<WbsParamBean> wps) {
+    public R saveOrUpdateBatch(@RequestBody ParamBean pb) {
+        List<WbsParamBean> wps =pb.getWps();
        if(CollectionUtil.isNotEmpty(wps)){
            if(wps.size()==1){
                WbsParamBean kone = wps.get(0);
@@ -103,7 +108,15 @@ public class WbsParamController {
            if(CollectionUtil.isNotEmpty(saveList)){
                this.service.saveBatch(BeanUtil.copy(saveList,WbsParam.class));
                /*新建的时候需要初始化绑定表单元素*/
-
+               this.jdbcTemplate.queryForList("SELECT  et.id,et.e_name\n" +
+                       "        FROM m_wbs_tree_private AS wt\n" +
+                       "        inner join m_wbs_form_element et on wt.f_id=et.id \n" +
+                       "        WHERE wt.type = 2\n" +
+                       "          AND wt.is_deleted = 0\n" +
+                       "          AND wt.parent_id = #{项目集工序树id}\n" +
+                       "          AND wt.wbs_id = #{wbsId}\n" +
+                       "          AND wt.project_id = #{projectId}\n" +
+                       "          AND et.is_deleted = 0");
            }
            if(CollectionUtil.isNotEmpty(updateList)){
                List<WbsParam> ul = new ArrayList<>();

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

@@ -2,6 +2,7 @@ package org.springblade.manager.formula;
 
 import lombok.Data;
 import org.springblade.manager.dto.FormData;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ElementFormulaMappingMapper.java

@@ -0,0 +1,9 @@
+package org.springblade.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.manager.entity.ElementFormulaMapping;
+/**
+ * @author yangyj
+ */
+public interface ElementFormulaMappingMapper extends BaseMapper<ElementFormulaMapping> {
+}

+ 18 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ElementFormulaMappingMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.manager.mapper.ElementFormulaMappingMapper">
+    <resultMap id="resultMap" type="org.springblade.manager.entity.ElementFormulaMapping">
+        <result column="id" property="id"/>
+        <result column="createUser" property="create_user"/>
+        <result column="createDept" property="create_dept"/>
+        <result column="createTime" property="create_time"/>
+        <result column="updateUser" property="update_user"/>
+        <result column="updateTime" property="update_time"/>
+        <result column="status" property="status"/>
+        <result column="isDeleted" property="is_deleted"/>
+        <result column="elementId" property="element_id"/>
+        <result column="nodeId" property="node_id"/>
+        <result column="formulaId" property="formula_id"/>
+    </resultMap>
+
+</mapper>

+ 4 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/FormulaMapper.xml

@@ -15,12 +15,14 @@
         <result column="number" property="number"/>
         <result column="orderNum" property="order_num"/>
         <result column="remark" property="remark"/>
-        <result column="wbsId" property="wbs_id"/>
+        <result column="nodeId" property="node_id"/>
         <result column="elementId" property="element_id"/>
         <result column="map" property="map"/>
-        <result column="out" property="out"/>
+        <result column="paramId" property="param_Id"/>
+        <result column="outm" property="outm"/>
         <result column="scale" property="scale"/>
         <result column="batch" property="batch"/>
+        <result column="scope" property="scope"/>
     </resultMap>
 
 </mapper>

+ 6 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -364,7 +364,7 @@
     </select>
 
 
-    <select id="selectFormElements" resultMap="wbsFormElementMap">
+    <select id="selectFormElements_bak" resultMap="wbsFormElementMap">
         SELECT
             w.f_id as fId,w.e_key,w.id,w.e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,
             (select CONCAT(init_table_name,':',w.e_key) from m_wbs_tree where id = #{id} AND status = 1 AND is_deleted = 0) AS "tableElementKey",
@@ -374,6 +374,11 @@
         WHERE
             is_deleted = 0 and f_id = #{id}
     </select>
+    <select id="selectFormElements" resultMap="wbsFormElementMap">
+        select   f_id as fId,e_key,a.id,e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,CONCAT(b.init_table_name,':',e_key) as tableElementKey,init_table_name as initTableName
+        from m_wbs_form_element a inner join m_wbs_tree b on a.f_id=b.init_table_id
+        where b.id=#{id} and a.is_deleted=0
+    </select>
     <select id="selectRepeatByProjectId" resultType="java.lang.Integer">
         SELECT COUNT(*) FROM m_wbs_tree_private WHERE project_id = #{projectId} AND status = 1 AND is_deleted = 0
     </select>

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IElementFormulaMappingService.java

@@ -0,0 +1,9 @@
+package org.springblade.manager.service;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.manager.entity.ElementFormulaMapping;
+/**
+ * @author yangyj
+ */
+public interface IElementFormulaMappingService extends BaseService<ElementFormulaMapping> {
+
+}

+ 19 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ElementFormulaMappingServiceImpl.java

@@ -0,0 +1,19 @@
+package org.springblade.manager.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.manager.entity.ElementFormulaMapping;
+import org.springblade.manager.mapper.ElementFormulaMappingMapper;
+import org.springblade.manager.service.IElementFormulaMappingService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangyj
+ * @Date 2022/11/15 11:34
+ * @description TODO
+ */
+@Service
+@AllArgsConstructor
+public class ElementFormulaMappingServiceImpl extends BaseServiceImpl<ElementFormulaMappingMapper, ElementFormulaMapping> implements IElementFormulaMappingService {
+    private final ElementFormulaMappingMapper mapper;
+}

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -328,6 +328,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             StopWatch stopWatch = new StopWatch();
             String ids = tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).collect(Collectors.joining(","));
             List<Map<String, Object>> list = this.jdbcTemplate.queryForList("SELECT   a.p_key_id as nodeId,b.id as fieldId,b.e_key as field,c.init_table_name as tableName  from m_wbs_tree_contract a LEFT JOIN m_wbs_form_element b on a.id=b.f_id left JOIN m_wbs_tree c on a.id=c.id where b.is_deleted=0 and a.p_key_id in (" + ids + ")");
+
+
             List<KeyMapper> keyMappers = JSON.parseArray(JSONArray.toJSONString(list), KeyMapper.class);
             if (Func.isNotEmpty(keyMappers)) {
                 Map<String, Map<String, String>> coordinateMap = new HashMap<>(keyMappers.size() * 2);
@@ -358,6 +360,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     /**
      * 保存日志
      */
+    @Override
     public String saveOrUpdateTheLog(List<TableInfo> tableInfoList) {
         //查询绑定的节点
         WbsTreePrivate tableNode = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, tableInfoList.get(0).getPkeyId()));

+ 33 - 39
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -24,8 +24,10 @@ import org.springblade.manager.formula.impl.CompositeDataAccess;
 import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springblade.manager.mapper.FormulaMapper;
 import org.springblade.manager.service.*;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -46,6 +48,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final FormulaStrategyFactory formulaStrategyFactory;
     private final IContractInfoService contractInfoService;
     private final IProjectInfoService projectInfoService;
+    private final IWbsTreeContractService wbsTreeContractService;
+    private final JdbcTemplate jdbcTemplate;
     private final Container env;
 
 
@@ -53,6 +57,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public final static String WP="WP";
     public final static String CHAIN="trees";
     public final static String FC="FC.";
+    public final static String TABLE_LIST="TBL";
+    public final static String CHECK_ITEMS="CKI";
 
     public static final Pattern AP=Pattern.compile("(E|WP)\\[([^]]+)]");
 
@@ -60,7 +66,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public static final  Pattern IF = Pattern.compile(IF_REG);
 
     public static final String ELE_CODE_REG= "(?<=E\\[)[^]]+(?=\\])";
-    public static final  Pattern P = Pattern.compile(ELE_CODE_REG);
+    public static final Pattern P = Pattern.compile(ELE_CODE_REG);
     public static final String POLY_REG= "(checkpoints|avg|min|max|sum|join|repeat|removeEmpty|listAt)\\(([^)]+)\\)";
     public static final Pattern POLY = Pattern.compile(POLY_REG);
     public final static String CTI="ContractInfo";
@@ -70,6 +76,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
 
 
+
+
     /**
      * @Param [list: 源数据, contractId: 合同段id, primaryKeyId: wbs节点id]
      * @Author yangyj
@@ -108,6 +116,20 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         this.env.constantMap.put(CHAIN,nodes.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
         /*节点参数*/
         this.env.constantMap.put(WP,getWpMap(id,primaryKeyId));
+        /*表格名称*/
+        List<WbsTreeContract> tableList =wbsTreeContractService.searchNodeAllTable(primaryKeyId.toString(), "1", contractId.toString(),info.getPId());
+        this.env.constantMap.put(TABLE_LIST,tableList);
+//        List<String> tableNames=this.jdbcTemplate.queryForList("SELECT "+
+//                "          wt.node_name " +
+//                "          FROM m_wbs_tree_private AS wt" +
+//                "          WHERE wt.type = 2" +
+//                "          AND wt.is_deleted = 0" +
+//                "          AND wt.parent_id = "+primaryKeyId +
+//                "          AND wt.wbs_id = "+nodes.get(0).getWbsId() +
+//                "          AND wt.project_id ="+ info.getPId()+
+//                "          ORDER BY wt.sort, wt.node_name, wt.create_time",String.class);
+        this.env.constantMap.put("tableNames",tableList.stream().map(WbsTreeContract::getFullName).collect(Collectors.toList()));
+        /*检查项目*/
         return this;
     }
 
@@ -177,9 +199,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     continue;
                 }
                 String tmp =fd.getFormula().getFormula();
-                /*处理参数带负号问题s*/
-
-                /*处理参数带负号问题e*/
                 tmp = tmp.replace(FC, CustomFunction.CLASS_CALL);
                 if(tmp.contains(CustomFunction.CLASS_CALL+"ifelse")){
                     Matcher im =IF.matcher(tmp);
@@ -199,6 +218,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         tmp = tmp.replace(am.group(),am.group(1)+"['"+am.group(2)+"']");
                     }
                 }
+                if(CHECK_ITEMS.equals(tmp)){
+                   /*获取type=1的检验单或者type=4的监表*/
+                   List<WbsTreeContract> tableList= (List<WbsTreeContract>) this.env.getConstantMap().get(TABLE_LIST);
+                   Optional<WbsTreeContract> wop=tableList.stream().filter(e->e.getTableType()==1||e.getTableType()==4).findAny();
+                   if(wop.isPresent()){
+                      this.jdbcTemplate.queryForList("select *" +
+                              " from m_wbs_form_element");
+                   }
+                }
                 fd.getFormula().setFormula(tmp);
             }
         }
@@ -263,40 +291,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                             }
                         }
-//                        if(CollectionUtil.isNotEmpty(ele)){
-//                            /*每一组依赖的数据*/
-//                            Map<Integer,Map<String,List<Object>>> dataSource = new HashMap<>(20);
-//                            for(FormData e:ele){
-//                                /*分组*/
-//                                Map<Integer,List<ElementData>> m = e.getValues().stream().collect(Collectors.groupingBy(ElementData::getGroupId));
-//                                for(Map.Entry<Integer,List<ElementData>> entry:m.entrySet()){
-//                                    /*拿到每一组数据*/
-//                                    Map<String,List<Object>> t = dataSource.computeIfAbsent(entry.getKey(), k -> new HashMap<String,List<Object>>(20));
-//                                    /*步伐不为1的数据要用步伐做倍数来膨胀*/
-//                                    t.put(e.getCode(),entry.getValue().stream().map(ElementData::getValue).flatMap(o->Collections.nCopies(e.getStep(),o).stream()).collect(Collectors.toList()));
-//                                }
-//                            }
-//                            if(dataSource.size()>0){
-//                                /**{groupId:{code:List<Object>}}*/
-//                                for(Map.Entry<Integer,Map<String,List<Object>>> entry:dataSource.entrySet()){
-//                                    if(entry.getValue().keySet().size()>=ele.size()){
-//                                        List<Object> values = slice(entry.getValue(),this.env.constantMap,f,entry.getKey());
-//                                        if(values.size()>fd.getValues().size()){
-//                                            /*当生成的数据超过实际容量的时候,会自动合并到第一个单元格*/
-//                                            fd.getValues().get(0).setValue(values.stream().map(StringUtils::handleNull).collect(Collectors.joining("、")));
-//                                        }else{
-//                                            for(int n=0;n<values.size();n++){
-//                                                fd.getValues().get(n).setValue(values.get(n));
-//                                            }
-//                                        }
-//
-//                                    }
-//                                }
-//                            }
-//
-//                        }else{
-//                            fd.getValues().add(new ElementData(0,0,Expression.parse(formula.getFormula()).calculate(currentMap)));
-//                        }
                     }else{
                         Object data =Expression.parse(formula.getFormula()).calculate(currentMap);
                         write(fd,data);
@@ -321,7 +315,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
             }
         }else{
-            if(fd.getFormula().getOut().equals(Formula.FULL)){
+            if(fd.getFormula().getOutm().equals(Formula.FULL)){
                 /*填充策略*/
                 fd.getValues().forEach(e->e.setValue(data));
             }else{

+ 25 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -26,6 +26,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.utils.DiffListUtil;
 import org.springblade.manager.utils.WbsElementUtil;
 import org.springblade.manager.vo.*;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -54,6 +55,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     private final FormulaMapper formulaMapper;
     private final BladeRedis bladeRedis;
     private final WbsParamServiceImpl wbsParamService;
+    private final JdbcTemplate jdbcTemplate;
 
     @Override
     public IPage<WbsTreeVO> selectWbsTreePage(IPage<WbsTreeVO> page, WbsTreeVO wbsTree) {
@@ -313,22 +315,33 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             if (escapeChar != null) {
                 elements.setEAllowDeviation(escapeChar);
             }
-
-            //是否保存过公式
-            List<Formula> formulas = formulaMapper.selectList(Wrappers.<Formula>query().lambda()
-                    .eq(Formula::getElementId, elements.getId())
-                    .eq(Formula::getStatus, 1)
-            );
-            if (formulas.size() > 0) {
-                elements.setIsSaveFormula(1);
-            } else {
-                elements.setIsSaveFormula(0);
-            }
+//            //是否保存过公式
+//            List<Formula> formulas = formulaMapper.selectList(Wrappers.<Formula>query().lambda()
+//                    .eq(Formula::getElementId, elements.getId())
+//                    .eq(Formula::getStatus, 1)
+//            );
+//            if (formulas.size() > 0) {
+//                elements.setIsSaveFormula(1);
+//            } else {
+//                elements.setIsSaveFormula(0);
+//            }
         });
 
-        return wbsFormElements;
+             String elementIds = wbsFormElements.stream().map(WbsFormElement::getId).map(String::valueOf).collect(Collectors.joining(","));
+             List<Long> longs=  this.jdbcTemplate.queryForList("select a.id from m_wbs_form_element a INNER JOIN m_formula b on a.id=b.element_id where a.id in("+elementIds+")",Long.class);
+             wbsFormElements.forEach(e->{
+                 e.setGlobalFormula(longs.contains(e.getId())?1:0);
+             });
+             List<Long> longs2= this.jdbcTemplate.queryForList("select a.id from m_wbs_form_element a INNER JOIN m_element_formula_mapping b on a.id=b.element_id where a.id in("+elementIds+")and b.node_id="+id,Long.class);
+             wbsFormElements.forEach(e->{
+                 e.setIsSaveFormula(longs2.contains(e.getId())?1:0);
+             });
+
+             return wbsFormElements;
     }
 
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean importWbsTree(MultipartFile excelFile, WbsTree wbsTreeFu, WbsTree wbsTree1) throws IOException {