You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
8.1 KiB
183 lines
8.1 KiB
|
1 week ago
|
# -*- coding: utf-8 -*-
|
||
|
|
"""详情子域 - 勘察 + 附件 (6 个接口)."""
|
||
|
|
import io, sys
|
||
|
|
sys.path.insert(0, 'D:/code/crm-backend-matt/.scratch')
|
||
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||
|
|
from bru_lib import (
|
||
|
|
write_bru, bru_form, build_docs, env_json,
|
||
|
|
req_form_example, req_query_example,
|
||
|
|
)
|
||
|
|
|
||
|
|
# ---------- 勘察 Tab ----------
|
||
|
|
print('== 详情子域 / 勘察 ==')
|
||
|
|
|
||
|
|
SURVEY_ROWS = [
|
||
|
|
('id','string','勘察记录ID'),
|
||
|
|
('createTime','string','创建时间'),
|
||
|
|
('updateTime','string','更新时间'),
|
||
|
|
('oppId','string','所属商机ID'),
|
||
|
|
('surveyDate','string','现场勘察日期 yyyy-MM-dd'),
|
||
|
|
('engineerUserId','string','主要工程师用户ID(引用 crm-auth SysUser)'),
|
||
|
|
('applyWay','string','申请方式字典 code(工单申请/线下申请等)'),
|
||
|
|
('surveySeq','string','勘察次数字典 code(第一次/第二次/第三次/三次以上)'),
|
||
|
|
('applyNo','string','申请单号(可空)'),
|
||
|
|
('surveyDesc','string','勘察补充说明(可空,长文本)'),
|
||
|
|
]
|
||
|
|
SURVEY_ONE = (
|
||
|
|
'{\n'
|
||
|
|
' "id": "1",\n'
|
||
|
|
' "createTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "updateTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "oppId": "1",\n'
|
||
|
|
' "surveyDate": "2024-01-15",\n'
|
||
|
|
' "engineerUserId": "1",\n'
|
||
|
|
' "applyWay": "apply_01",\n'
|
||
|
|
' "surveySeq": "seq_01",\n'
|
||
|
|
' "applyNo": "SS20240115001",\n'
|
||
|
|
' "surveyDesc": "现场环境符合安装要求;客户需要三期设备"\n'
|
||
|
|
' }'
|
||
|
|
)
|
||
|
|
SURVEY_PAGE_JSON = (
|
||
|
|
'{\n'
|
||
|
|
f' "content": [\n{SURVEY_ONE}\n ],\n'
|
||
|
|
' "total": 1,\n'
|
||
|
|
' "size": 10,\n'
|
||
|
|
' "current": 1,\n'
|
||
|
|
' "pages": 1,\n'
|
||
|
|
' "empty": false\n'
|
||
|
|
' }'
|
||
|
|
)
|
||
|
|
docs = build_docs(
|
||
|
|
'勘察分页', 'POST', '/api/opportunity/site-survey/page',
|
||
|
|
'商机详情「勘察」Tab:分页拉取该商机的现场勘察记录(多次勘察保留历史不覆盖)。列表「联系方式」由 `engineerUserId` 反查 SysUser 电话脱敏展示,不冗余存。',
|
||
|
|
[('oppId','string','是','-','商机ID'),
|
||
|
|
('pageNum','number','否','1','页码'),
|
||
|
|
('pageSize','number','否','10','每页条数')],
|
||
|
|
req_form_example('POST','/api/opportunity/site-survey/page',
|
||
|
|
[('oppId','1'),('pageNum','1'),('pageSize','10')]),
|
||
|
|
[('content','array<object>','勘察记录数组')] + [('content[].'+r[0],r[1],r[2]) for r in SURVEY_ROWS] + [
|
||
|
|
('total','number','总条数'),
|
||
|
|
('size','number','每页条数'),
|
||
|
|
('current','number','当前页码'),
|
||
|
|
('pages','number','总页数'),
|
||
|
|
('empty','boolean','是否为空结果'),
|
||
|
|
],
|
||
|
|
env_json(SURVEY_PAGE_JSON),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '勘察分页.bru',
|
||
|
|
bru_form(5, '勘察分页', 'post', '/api/opportunity/site-survey/page',
|
||
|
|
[('oppId','1'),('pageNum','1'),('pageSize','10')], docs))
|
||
|
|
|
||
|
|
add_survey_params = [
|
||
|
|
('oppId','string','是','-','商机ID'),
|
||
|
|
('surveyDate','string','是','-','现场勘察日期 yyyy-MM-dd'),
|
||
|
|
('engineerUserId','string','是','-','主要工程师用户ID(引用 crm-auth SysUser,可跨部门选人)'),
|
||
|
|
('applyWay','string','是','-','申请方式字典 code'),
|
||
|
|
('surveySeq','string','是','-','勘察次数字典 code'),
|
||
|
|
('applyNo','string','否','-','申请单号(人工录入,线下拿到后补录)'),
|
||
|
|
('surveyDesc','string','否','-','勘察补充说明(长文本)'),
|
||
|
|
]
|
||
|
|
add_survey_kv = [
|
||
|
|
('oppId','1'),('surveyDate','2024-01-15'),('engineerUserId','1'),
|
||
|
|
('applyWay','apply_01'),('surveySeq','seq_01'),
|
||
|
|
('applyNo','SS20240115001'),('surveyDesc','现场环境符合安装要求'),
|
||
|
|
]
|
||
|
|
docs = build_docs(
|
||
|
|
'新增勘察', 'POST', '/api/opportunity/site-survey/add',
|
||
|
|
'新建现场勘察记录(无状态机,填完即完整记录,不联动阶段轴 2)。附件走统一附件表 `opportunity_attachment`(`bizType=SITE_SURVEY`,`bizId`=本记录 id)。',
|
||
|
|
add_survey_params,
|
||
|
|
req_form_example('POST','/api/opportunity/site-survey/add', add_survey_kv),
|
||
|
|
'新增勘察记录ID(Long,序列化为 string)',
|
||
|
|
env_json('"1"'),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '新增勘察.bru',
|
||
|
|
bru_form(6, '新增勘察', 'post', '/api/opportunity/site-survey/add', add_survey_kv, docs))
|
||
|
|
|
||
|
|
docs = build_docs(
|
||
|
|
'删除勘察', 'POST', '/api/opportunity/site-survey/delete',
|
||
|
|
'逻辑删除勘察记录(走 BaseEntity 逻辑删)。',
|
||
|
|
[('id','string','是','-','勘察记录ID')],
|
||
|
|
req_form_example('POST','/api/opportunity/site-survey/delete',[('id','1')]),
|
||
|
|
None, env_json('null'),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '删除勘察.bru',
|
||
|
|
bru_form(7, '删除勘察', 'post', '/api/opportunity/site-survey/delete',
|
||
|
|
[('id','1')], docs))
|
||
|
|
|
||
|
|
# ---------- 附件 Tab ----------
|
||
|
|
print('== 详情子域 / 附件 ==')
|
||
|
|
|
||
|
|
ATT_ROWS = [
|
||
|
|
('id','string','附件行ID'),
|
||
|
|
('createTime','string','创建时间(上传时间)'),
|
||
|
|
('updateTime','string','更新时间'),
|
||
|
|
('oppId','string','所属商机ID'),
|
||
|
|
('bizType','string','业务归属类型:OPP/FOLLOW_UP/SITE_SURVEY/SCHEME_CARD'),
|
||
|
|
('bizId','string','业务对象ID(跟进/勘察/方案卡 id;bizType=OPP 时=opp_id 或空)'),
|
||
|
|
('materialType','string','资料类型字典 code(现场资料/设计清单-图纸/客户需求资料等)'),
|
||
|
|
('fileId','string','文件ID(引用 crm-file 文件本体)'),
|
||
|
|
('remark','string','附件说明(可空)'),
|
||
|
|
]
|
||
|
|
ATT_ONE = (
|
||
|
|
'{\n'
|
||
|
|
' "id": "1",\n'
|
||
|
|
' "createTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "updateTime": "2024-01-01 12:00:00",\n'
|
||
|
|
' "oppId": "1",\n'
|
||
|
|
' "bizType": "OPP",\n'
|
||
|
|
' "bizId": "1",\n'
|
||
|
|
' "materialType": "material_01",\n'
|
||
|
|
' "fileId": "1",\n'
|
||
|
|
' "remark": "客户需求文档"\n'
|
||
|
|
' }'
|
||
|
|
)
|
||
|
|
docs = build_docs(
|
||
|
|
'附件列表', 'GET', '/api/opportunity/attachment/list',
|
||
|
|
'商机详情「附件」Tab:按 `bizType` 过滤附件列表;不传 `bizType` 返回该商机全部附件。文件本体走 crm-file 单独拉取。',
|
||
|
|
[('oppId','string','是','-','商机ID'),
|
||
|
|
('bizType','string','否','-','业务归属类型过滤:OPP/FOLLOW_UP/SITE_SURVEY/SCHEME_CARD')],
|
||
|
|
req_query_example('GET','/api/opportunity/attachment/list',
|
||
|
|
[('oppId','1'),('bizType','OPP')]),
|
||
|
|
ATT_ROWS,
|
||
|
|
env_json(f'[\n{ATT_ONE}\n ]'),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '附件列表.bru',
|
||
|
|
bru_form(8, '附件列表', 'get', '/api/opportunity/attachment/list',
|
||
|
|
[('oppId','1'),('bizType','OPP')], docs))
|
||
|
|
|
||
|
|
add_att_params = [
|
||
|
|
('oppId','string','是','-','商机ID'),
|
||
|
|
('fileId','string','是','-','文件ID(先调 crm-file 上传拿到)'),
|
||
|
|
('bizType','string','否','-','业务归属类型:OPP/FOLLOW_UP/SITE_SURVEY/SCHEME_CARD'),
|
||
|
|
('bizId','string','否','-','业务对象ID'),
|
||
|
|
('materialType','string','否','-','资料类型字典 code'),
|
||
|
|
('remark','string','否','-','附件说明'),
|
||
|
|
]
|
||
|
|
add_att_kv = [
|
||
|
|
('oppId','1'),('fileId','1'),('bizType','OPP'),('bizId','1'),
|
||
|
|
('materialType','material_01'),('remark','客户需求文档'),
|
||
|
|
]
|
||
|
|
docs = build_docs(
|
||
|
|
'新增附件', 'POST', '/api/opportunity/attachment/add',
|
||
|
|
'将已上传到 crm-file 的文件挂到商机某业务对象下。跟进附件(bizType=FOLLOW_UP)应用层限 10 个/条(原型明画)。',
|
||
|
|
add_att_params,
|
||
|
|
req_form_example('POST','/api/opportunity/attachment/add', add_att_kv),
|
||
|
|
'新增附件行ID(Long,序列化为 string)',
|
||
|
|
env_json('"1"'),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '新增附件.bru',
|
||
|
|
bru_form(9, '新增附件', 'post', '/api/opportunity/attachment/add', add_att_kv, docs))
|
||
|
|
|
||
|
|
docs = build_docs(
|
||
|
|
'删除附件', 'POST', '/api/opportunity/attachment/delete',
|
||
|
|
'逻辑删除附件行;文件本体不动,由 crm-file 侧独立管理生命周期。',
|
||
|
|
[('id','string','是','-','附件行ID')],
|
||
|
|
req_form_example('POST','/api/opportunity/attachment/delete',[('id','1')]),
|
||
|
|
None, env_json('null'),
|
||
|
|
)
|
||
|
|
write_bru('商机管理/详情子域', '删除附件.bru',
|
||
|
|
bru_form(10, '删除附件', 'post', '/api/opportunity/attachment/delete',
|
||
|
|
[('id','1')], docs))
|
||
|
|
|
||
|
|
print('part3b done — 勘察 + 附件 6 个接口完成')
|