瀏覽代碼

公式参数

yangyj 2 年之前
父節點
當前提交
84491a77e2

+ 0 - 23
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaOption.java

@@ -1,23 +0,0 @@
-package org.springblade.manager.dto;
-
-import lombok.Data;
-
-/**
- * @author yangyj
- * @Date 2023/3/1 17:35
- * @description TODO
- */
-@Data
-public class FormulaOption {
-    private Long id;
-    private Long parentId;
-    private String ekey;
-    private Long contractId;
-    private String value;
-    private Long pKeyId;
-    private Integer scope;
-
-    public String toSql(){
-        return ","+parentId+",'"+ekey+"',"+contractId+",'"+value+"',"+pKeyId+","+scope;
-    }
-}

+ 43 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaOptionVo.java

@@ -0,0 +1,43 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.entity.FormulaOption;
+
+/**
+ * @author yangyj
+ * @Date 2023/3/1 17:35
+ * @description TODO
+ */
+@Data
+public class FormulaOptionVo {
+    private Long id;
+    private Long parentId;
+    private String key;
+    private Long contractId;
+    private String value;
+    private Long pKeyId;
+    private Integer scope;
+    public boolean saveChecked(){
+        if( Func.isNotBlank(value)&&contractId!=null&&parentId!=null&&pKeyId!=null&&key!=null&&scope!=null){
+            if(scope==0){
+                /*scope==0是元素范围,1是单元格范围*/
+                this.key=key.replaceAll("__[\\d_]+","");
+            }
+            return true;
+        }
+        return false;
+    }
+    public FormulaOption toFo(){
+        FormulaOption   formulaOption=new FormulaOption();
+        formulaOption.setParentId(this.parentId);
+        formulaOption.setContractId(this.contractId);
+        return formulaOption;
+    }
+    public boolean isElementScope(){
+        return this.scope==0;
+    }
+    public boolean isCellScope(){
+        return this.scope==1;
+    }
+}

+ 27 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/FormulaOption.java

@@ -0,0 +1,27 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author yangyj
+ * @Date 2023/3/6 9:17
+ * @description TODO
+ */
+@Data
+@TableName("m_formula")
+public class FormulaOption {
+    @ApiModelProperty("主键id")
+    @TableId(
+            value = "id",
+            type = IdType.ASSIGN_ID
+    )
+    private Long id;
+    private Long parentId;
+    private Long contractId;
+    private String val;
+}

+ 24 - 28
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -52,6 +52,7 @@ public class FormulaController {
     private final JdbcTemplate jdbcTemplate;
     private final IContractInfoService contractInfoService;
     private final ITextdictInfoService textdictInfoService;
+    private final IFormulaOptionService formulaOptionService;
     /**
      * 新增或修改
      */
@@ -174,8 +175,10 @@ public class FormulaController {
                 FormulaBean fb=BeanUtil.toBean(map,FormulaBean.class);
                 if(StringUtils.isNotEmpty(rely)){
                     String[] relyArr = rely.split(StringPool.COMMA);
-                   List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type from m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id  LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
-                            " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining(StringPool.COMMA,"'","'"))+")");
+                   List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type f" +
+                           "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id  " +
+                           "LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
+                           " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining(StringPool.COMMA,"'","'"))+")");
                    if(ListUtils.isNotEmpty(mapList)){
                        fb.setDict(mapList.stream().filter(e-> Arrays.stream(relyArr).anyMatch(c->StringUtils.isEquals(e.get("ekey"),c))).collect(Collectors.toMap(e->StringUtils.handleNull(e.get("ekey")), e->e)));
                    }
@@ -340,9 +343,9 @@ public class FormulaController {
     @GetMapping("/panel")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "公式交互面板", notes = "公式交互面板")
-    public R<Object> panel(FormulaOption fo)  {
+    public R<Object> panel(FormulaOptionVo fo)  {
              Map<String,Object> result = new LinkedHashMap<>();
-             String  key=fo.getEkey().replaceAll("__[\\d_]+","");;
+             String  key=fo.getKey().replaceAll("__[\\d_]+","");
               ContractInfo contract = this.contractInfoService.getById(fo.getContractId());
               List<KeyMapper> kms =  this.service.getKeyMapperList(Collections.singletonList(fo.getPKeyId()),contract.getPId());
               KeyMapper keyMapper=null;
@@ -354,28 +357,13 @@ public class FormulaController {
               }
               if(keyMapper!=null&&Func.isNotEmpty(keyMapper.getFormulaId())){
                    Formula formula = this.service.getById(keyMapper.getFormulaId());
-                   /*临时处理,等确定数据结构在优化*/
+                  String data = this.formulaOptionService.queryOption(fo.getContractId(),fo.getParentId(),fo.getPKeyId(),fo.getKey());
+                  /*临时处理,等确定数据结构在优化*/
                    if(formula.getFormula().contains(".option")){
-                       JSONObject jo =JSON.parseObject(TEMPLATE);
-                       jo.put("scope",0);
-                       JSONObject info =jo.getJSONObject("info");
-                       info.put("label","是否引用公式数据");
-                       /*针对元素级别*/
-                       List<Map<String,Object>> mapList=this.jdbcTemplate.queryForList("select id,parent_id parentId,table_id pKeyId,val value,e_key ekey,contract_id contractId,scope from m_formula_option where scope=0 and parent_id ="+fo.getParentId()+" and e_key='"+key+"' and contract_id="+fo.getContractId());
-                       if(Func.isNotEmpty(mapList)){
-                           info.put("data",mapList.get(0));
-                       }
-                     return    R.data(jo);
+                       return R.data(createRadioPanel(0,"是否引用公式数据",data));
                    }else if (StringUtils.isEquals("MILE",formula.getNumber())){
                       if(StringUtils.isEquals(key,formula.getRelyList().get(0).split(StringPool.COLON)[1])){
-                          JSONObject jo =JSON.parseObject(TEMPLATE);
-                          jo.put("scope",1);
-                          JSONObject info =jo.getJSONObject("info");
-                          info.put("label","竖直方向");
-                          List<Map<String,Object>> mapList=this.jdbcTemplate.queryForList("select id,parent_id parentId,table_id pKeyId,val value,e_key ekey,contract_id contractId,scope from m_formula_option where scope=1 and table_id="+fo.getPKeyId()+" and parent_id ="+fo.getParentId()+" and e_key='"+key+"' and contract_id="+fo.getContractId());
-                          if(Func.isNotEmpty(mapList)){
-                              result.put("data",mapList.get(0));
-                          }
+                          return R.data(createRadioPanel(1,"竖直方向",data));
                       }
                   }
               }else{
@@ -384,14 +372,22 @@ public class FormulaController {
              return R.data(result);
     }
 
+    public JSONObject createRadioPanel(Integer scope,String label,String data){
+        JSONObject jo =JSON.parseObject(TEMPLATE);
+        jo.put("scope",1);
+        JSONObject info =jo.getJSONObject("info");
+        info.put("label","竖直方向");
+        if(Func.isNotEmpty(data)){
+            info.put("data",data);
+        }
+        return jo;
+    }
+
     @PostMapping("/panel-save")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "公式交互面板参数保存", notes = "公式交互面板参数保存")
-    public R<Object> panelSave( @RequestBody FormulaOption fo){
-            if(Func.isNotEmpty(fo.getId())){
-                this.jdbcTemplate.execute("delete from m_formula_option where id="+fo.getId());
-            }
-            this.jdbcTemplate.execute("insert into m_formula_option values ("+SnowFlakeUtil.getId()+fo.toSql()+")");
+    public R<Object> panelSave( @RequestBody FormulaOptionVo fo){
+
            return    R.success("保存成功");
     }
 

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/FormulaOptionMapper.java

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

+ 14 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaOptionService.java

@@ -0,0 +1,14 @@
+package org.springblade.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.manager.dto.FormulaOptionVo;
+import org.springblade.manager.entity.FormulaOption;
+
+/**
+ * @author yangyj
+ */
+public interface IFormulaOptionService extends IService<FormulaOption> {
+    String queryOption(Long contractId,Long parentId,Long pkeyId,String key);
+    void saveOrUpdateOption(FormulaOptionVo fo);
+
+}

+ 73 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaOptionServiceImpl.java

@@ -0,0 +1,73 @@
+package org.springblade.manager.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mixsmart.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.dto.FormulaOptionVo;
+import org.springblade.manager.entity.FormulaOption;
+import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.mapper.FormulaOptionMapper;
+import org.springblade.manager.service.IFormulaOptionService;
+import org.springblade.manager.service.IWbsTreeContractService;
+import org.springframework.stereotype.Service;
+
+
+
+/**
+ * @author yangyj
+ * @Date 2023/3/6 9:37
+ * @description TODO
+ */
+@Service
+@RequiredArgsConstructor
+public class FormulaOptionServiceImpl extends ServiceImpl<FormulaOptionMapper, FormulaOption> implements IFormulaOptionService {
+    private final IWbsTreeContractService wbsTreeContractService;
+
+    @Override
+    public String queryOption(Long contractId, Long parentId,Long pkeyId, String key) {
+        if(StringUtils.isNotEmpty(contractId,parentId,pkeyId,key)){
+            WbsTreeContract wbc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
+            FormulaOption fo = this.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,parentId).eq(FormulaOption::getContractId,contractId));
+            if(fo!=null&&wbc!=null){
+                JSONObject jo = JSON.parseObject(fo.getVal());
+                 if(jo.containsKey(pkeyId.toString())){
+                     JSONObject tableJson=jo.getJSONObject(wbc.getInitTableName());
+                     if(tableJson.containsKey(pkeyId.toString())){
+                         JSONObject excel = tableJson.getJSONObject(pkeyId.toString());
+                         if(excel.containsKey(key)){
+                             return excel.getString(key);
+                         }
+                     }
+
+                 }
+
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void saveOrUpdateOption(FormulaOptionVo fo) {
+        if(fo.saveChecked()){
+            WbsTreeContract wbc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,fo.getPKeyId()));
+            FormulaOption formulaOption = this.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,fo.getParentId()).eq(FormulaOption::getContractId,fo.getContractId()));
+            if(formulaOption==null){
+                formulaOption=fo.toFo();
+                JSONObject jo = new JSONObject();
+                JSONObject table = (JSONObject) jo.computeIfAbsent(wbc.getInitTableName(),(k)->new JSONObject());
+                if(fo.isElementScope()){
+                    table.put(fo.getKey(),fo.getValue());
+                }else if(fo.isCellScope()){
+                    table.put(fo.getPKeyId()+ StringPool.AT +fo.getPKeyId(),fo.getValue());
+                }
+                formulaOption.setVal(jo.toJSONString());
+                this.saveOrUpdate(formulaOption);
+            }
+        }
+
+    }
+}