注:约定项目结构

一个工具生成项目对应一个或多个清单项

一个工清单项目对应一个或多个定额项

1.对接清单项目

根据自身界面信息 对应清单工具(项目管理中打开)中的清单项

清单项目数据结构

{
  '项目编码' => '九位数编码',
  '项目名称' => '项目名称',  # 这项如果没有给 则会取清单书籍写的清单名称
  '项目界限' => '新建',  # 新建/原有
  # 单位在清单项目中已经做了规定  多个单位时 {'m²'=>20,'m'=>200}
  '清单量' => {'m²'=>20},
  '清单量表达式' => {'m²'=>"#{20}m²"},
  '项目特征' => [{ 特征项 => 描述 },自定义描述],
  '属性' => [属性内容1,属性内容2],
  '工种计价'=>'定额工日\项目工日', # 定额工日和项目工日二选一
  '定额工日'=>[{'工种'=>'xxxx','计价单位'=>'xxxx','工日量'=>0.05}],
  '项目工日'=>[{'工种'=>'xxxx','计价单位'=>'xxxx'}],
  '机械台班'=>[{'机械'=>'xxxx机械','台班量'=>0.05}],
  '物料'=>[
    {
       '干混水泥砂浆DM2.0'=>{
          '设定甲供'=>false,  # 材料是否甲供
          '设定主材'=>true,  # 材料是否为主材
          'id'=>'', # 物料id
          '名称'=>'', # 物料名称
          '型号'=>'', # 物料型号
        },
        '定额损耗'=>0,  # 当前材料对应的损耗系数
        # 当前物料的消耗情况
        '物料统计'=>{'单位'=>'kg','值'=>10,'单位量'=>10} # 值 = 单位量*清单量  值和单位量 填一个就好  有单位量就填单位量
    }
  ],
  '人工系数'=>0.05,
  '主材系数'=>0.05,
  '辅材系数'=>0.05,
  '机械系数'=>0.05,
  '定额项' => []
}

2.对接定额项

根据自身界面信息以及清单项信息 对应项目定义中的定额项

定额项目数据结构

{
  '定额编号' => 短线分割的编号,
  '输入值' => {
    '工程量'=> 数值,
    ....其它带输入值...
    # 查询输入值 DFC::Common::Budget.get_cal_key_by_num(project_domain,number)
  },
  '材料对应' => {
    定额材料名称 => [{物料id=>,型号=>}....]
  ...
  }
}

3.案例(天棚工程)

完整的接口返回数据

[
  {
    '项目编码' => '011301001', # 代指 天棚抹灰
    # 单位在清单项目中已经做了规定  多个单位时{"m²"=>20,"m"=>200}
    '清单量' => {'m²'=>20}, # su 的单位是英寸,这里要做好转换
    '项目特征' => [
      {
        # 当特征项的值建议请求专业协助 实在不知道那就 nil
        # 特征项可以出现清单中不存在的  清单中存在的也是可选项
        '基层类型' => '界面砂浆',
        '抹灰厚度、材料种类' => '界面砂浆 厚15mm'
      },
      '自定义的一些清单描述'
    ],
    '定额项' => [
      {
        '定额编号' => '01-12-1-7',
        # 输入值里面不清楚的值 可不填该字段 
        # 查询输入值 DFC::Common::Budget.get_cal_key_by_num(project_domain,number)
        '输入值' => {
          '工程量' => 0, # su 的单位是英寸,这里要做好转换
          '人工' => 1.0,
          '材料' => 1.0,
          '机械' => 1.0
        },
        '材料对应' => {
          '干混界面砂浆' => [{物料id=>, 型号=>}]
        }
      }
    ]
  }
]

项目特征 Hash 的格式是:

{'项目特征' => '特征描述', ...}

img

4.接口说明

代码替换路径img

接口变更

DFC::Common::ProjectManage::ModuleInterface 
# 修改为 
ProjectManageModuleInterface
# 之前调用下面接口的同事记得修改
DFC::Common::ProjectManage::ModuleInterface.handle_sub_item_content
# 修改为 
ProjectManageModuleInterface.handle_sub_item_content

预算对接

# 对接预算接口说明 
# ModelInterface新增接口 budget_form_data(instance)
class ModuleInterface
    def budget_form_data(instance)
        arr = [] # 之前约定数组 清单项目数组
        ProjectManageModuleInterface.handle_budget_form_data(arr, instance)
    end
end

# 添加项目到项目管理
DFC::Common::ProjectManage.add_project_from_tool(project_domain, group) 

接口自测

# 自己测试接口代码
group = Sketchup.active_model.selection[0]   # 工具生成组
obj = DFC.module_interface.find group, :budget_form_data # 基本信息
raise "组未注册接口 <budget_form_data>" unless obj
dfc_puts obj.budget_form_data group