safety-eval-service/scripts/gen-p2-impl.py

466 lines
17 KiB
Python

#!/usr/bin/env python3
"""Generate P2 gateway impl, query, domain service, client and adapter layers."""
import os
import re
ROOT = os.path.join(os.path.dirname(__file__), "..")
ENTITIES = [
("EvalRiskAnalysis", "NODE_01", True, None),
("EvalRiskParticipant", "NODE_01", False, "risk"),
("EvalContract", "NODE_02", True, None),
("EvalTeam", "NODE_03", True, None),
("EvalSurvey", "NODE_04", True, None),
("EvalSurveyNotice", "NODE_04", False, "survey_unique"),
("EvalSurveyCheckin", "NODE_04", False, "survey"),
("EvalSurveyAttach", "NODE_04", False, "survey"),
("EvalReportDraft", "NODE_05", False, None),
("EvalInternalReview", "NODE_06", True, None),
("EvalTechReview", "NODE_07", True, None),
("EvalProcessControl", "NODE_08", True, None),
("EvalSignTask", "SIGN", False, None),
("EvalSignRecord", "SIGN", False, "task"),
("EvalReport", "NODE_08", False, None),
]
def kebab(name):
s = re.sub('(.)([A-Z][a-z]+)', r'\1-\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1-\2', s).lower().replace('eval-', 'eval-')
def resource_path(name):
mapping = {
"EvalRiskAnalysis": "eval-risk-analysis",
"EvalRiskParticipant": "eval-risk-participant",
"EvalContract": "eval-contract",
"EvalTeam": "eval-team",
"EvalSurvey": "eval-survey",
"EvalSurveyNotice": "eval-survey-notice",
"EvalSurveyCheckin": "eval-survey-checkin",
"EvalSurveyAttach": "eval-survey-attach",
"EvalReportDraft": "eval-report-draft",
"EvalInternalReview": "eval-internal-review",
"EvalTechReview": "eval-tech-review",
"EvalProcessControl": "eval-process-control",
"EvalSignTask": "eval-sign-task",
"EvalSignRecord": "eval-sign-record",
"EvalReport": "eval-report",
}
return mapping[name]
def write(rel, content):
full = os.path.join(ROOT, rel.replace("/", os.sep))
os.makedirs(os.path.dirname(full), exist_ok=True)
with open(full, "w", encoding="utf-8", newline="\n") as f:
f.write(content)
def gen_query(name):
content = f"""package org.qinan.safetyeval.domain.query;
import lombok.Data;
@Data
public class {name}Query {{
private Long pageNum;
private Long pageSize;
private Long orgId;
private Long projectId;
private Long riskId;
private Long surveyId;
private Long signTaskId;
}}
"""
write(f"safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/{name}Query.java", content)
def gen_gateway(name, by_project, list_by):
methods = [f" {name}Entity save({name}Entity entity);",
f" {name}Entity get(Long id);",
f" {name}Entity modify({name}Entity entity);",
" void delete(Long id);"]
if by_project:
methods.append(f" {name}Entity getByProjectId(Long projectId, Long orgId);")
if list_by == "risk":
methods.append(f" java.util.List<{name}Entity> listByRiskId(Long riskId, Long orgId);")
elif list_by == "survey":
methods.append(f" java.util.List<{name}Entity> listBySurveyId(Long surveyId, Long orgId);")
elif list_by == "task":
methods.append(f" java.util.List<{name}Entity> listBySignTaskId(Long signTaskId, Long orgId);")
if name == "EvalSurveyNotice":
methods.append(f" {name}Entity getBySurveyId(Long surveyId, Long orgId);")
if name in ("EvalReportDraft", "EvalSignTask"):
methods.append(f" PageResult<{name}Entity> page({name}Query query);")
if name == "EvalReportDraft":
methods.append(" int nextDraftVersionNo(Long projectId, Long orgId);")
if name == "EvalReport":
methods.append(f" {name}Entity saveInternal({name}Entity entity);")
body = "\n".join(methods)
content = f"""package org.qinan.safetyeval.domain.gateway;
import org.qinan.safetyeval.domain.entity.{name}Entity;
import org.qinan.safetyeval.domain.query.{name}Query;
import org.qinan.safetyeval.domain.query.PageResult;
import java.util.List;
public interface {name}Gateway {{
{body}
}}
"""
write(f"safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/{name}Gateway.java", content)
def gen_gateway_impl(name, by_project, list_by, has_delete_list):
mapper_var = name[0].lower() + name[1:] + "Mapper"
extra_methods = ""
if by_project:
extra_methods += f"""
@Override
public {name}Entity getByProjectId(Long projectId, Long orgId) {{
LambdaQueryWrapper<{name}DO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq({name}DO::getDeleteEnum, "false");
wrapper.eq({name}DO::getProjectId, projectId);
if (orgId != null) {{
wrapper.eq({name}DO::getOrgId, orgId);
}}
return toEntity({mapper_var}.selectOne(wrapper));
}}
"""
if name == "EvalSurveyNotice":
extra_methods += f"""
@Override
public {name}Entity getBySurveyId(Long surveyId, Long orgId) {{
LambdaQueryWrapper<{name}DO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq({name}DO::getDeleteEnum, "false");
wrapper.eq({name}DO::getSurveyId, surveyId);
if (orgId != null) {{
wrapper.eq({name}DO::getOrgId, orgId);
}}
return toEntity({mapper_var}.selectOne(wrapper));
}}
"""
if list_by == "risk":
extra_methods += f"""
@Override
public List<{name}Entity> listByRiskId(Long riskId, Long orgId) {{
LambdaQueryWrapper<{name}DO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq({name}DO::getDeleteEnum, "false");
wrapper.eq({name}DO::getRiskId, riskId);
if (orgId != null) {{
wrapper.eq({name}DO::getOrgId, orgId);
}}
wrapper.orderByAsc({name}DO::getSortOrder);
return {mapper_var}.selectList(wrapper).stream().map(this::toEntity).collect(Collectors.toList());
}}
"""
elif list_by == "survey":
extra_methods += f"""
@Override
public List<{name}Entity> listBySurveyId(Long surveyId, Long orgId) {{
LambdaQueryWrapper<{name}DO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq({name}DO::getDeleteEnum, "false");
wrapper.eq({name}DO::getSurveyId, surveyId);
if (orgId != null) {{
wrapper.eq({name}DO::getOrgId, orgId);
}}
wrapper.orderByDesc({name}DO::getCreateTime);
return {mapper_var}.selectList(wrapper).stream().map(this::toEntity).collect(Collectors.toList());
}}
"""
elif list_by == "task":
extra_methods += f"""
@Override
public List<{name}Entity> listBySignTaskId(Long signTaskId, Long orgId) {{
LambdaQueryWrapper<{name}DO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq({name}DO::getDeleteEnum, "false");
wrapper.eq({name}DO::getSignTaskId, signTaskId);
if (orgId != null) {{
wrapper.eq({name}DO::getOrgId, orgId);
}}
wrapper.orderByDesc({name}DO::getCreateTime);
return {mapper_var}.selectList(wrapper).stream().map(this::toEntity).collect(Collectors.toList());
}}
"""
page_method = ""
if name in ("EvalReportDraft", "EvalSignTask"):
page_method = f"""
@Override
public PageResult<{name}Entity> page({name}Query query) {{
Page<{name}DO> page = new Page<>(query.getPageNum(), query.getPageSize());
LambdaQueryWrapper<{name}DO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq({name}DO::getDeleteEnum, "false");
if (query.getOrgId() != null) {{
wrapper.eq({name}DO::getOrgId, query.getOrgId());
}}
if (query.getProjectId() != null) {{
wrapper.eq({name}DO::getProjectId, query.getProjectId());
}}
wrapper.orderByDesc({name}DO::getCreateTime);
IPage<{name}DO> result = {mapper_var}.selectPage(page, wrapper);
List<{name}Entity> records = result.getRecords().stream().map(this::toEntity).collect(Collectors.toList());
return PageResult.of(records, result.getTotal(), result.getCurrent(), result.getSize());
}}
"""
version_method = ""
if name == "EvalReportDraft":
version_method = """
@Override
public int nextDraftVersionNo(Long projectId, Long orgId) {
LambdaQueryWrapper<EvalReportDraftDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EvalReportDraftDO::getDeleteEnum, "false");
wrapper.eq(EvalReportDraftDO::getProjectId, projectId);
if (orgId != null) {
wrapper.eq(EvalReportDraftDO::getOrgId, orgId);
}
wrapper.orderByDesc(EvalReportDraftDO::getDraftVersionNo);
wrapper.last("LIMIT 1");
EvalReportDraftDO latest = evalReportDraftMapper.selectOne(wrapper);
return latest == null || latest.getDraftVersionNo() == null ? 1 : latest.getDraftVersionNo() + 1;
}
"""
internal_save = ""
if name == "EvalReport":
internal_save = f"""
@Override
public {name}Entity saveInternal({name}Entity entity) {{
return save(entity);
}}
"""
content = f"""package org.qinan.safetyeval.infrastructure.gatewayimpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.qinan.safetyeval.domain.entity.{name}Entity;
import org.qinan.safetyeval.domain.gateway.{name}Gateway;
import org.qinan.safetyeval.domain.query.{name}Query;
import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.infrastructure.dataobject.{name}DO;
import org.qinan.safetyeval.infrastructure.mapper.{name}Mapper;
import org.qinan.safetyeval.infrastructure.support.EvalBeanCopy;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
import org.qinan.safetyeval.infrastructure.support.OrgContextResolver;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class {name}GatewayImpl implements {name}Gateway {{
@Resource
private {name}Mapper {mapper_var};
@Resource
private OrgContextResolver orgContextResolver;
@Override
public {name}Entity save({name}Entity entity) {{
{name}DO dataObject = toDO(entity);
InsertFieldDefaults.apply(dataObject);
{mapper_var}.insert(dataObject);
entity.setId(dataObject.getId());
return entity;
}}
@Override
public {name}Entity get(Long id) {{
{name}DO dataObject = {mapper_var}.selectById(id);
if (dataObject == null || !"false".equals(dataObject.getDeleteEnum())) {{
return null;
}}
return toEntity(dataObject);
}}
@Override
public {name}Entity modify({name}Entity entity) {{
{name}DO dataObject = toDO(entity);
dataObject.setId(entity.getId());
InsertFieldDefaults.applyForUpdate(dataObject);
{mapper_var}.updateById(dataObject);
return get(entity.getId());
}}
@Override
public void delete(Long id) {{
{mapper_var}.deleteById(id);
}}
{extra_methods}{page_method}{version_method}{internal_save}
private {name}DO toDO({name}Entity entity) {{
{name}DO dataObject = EvalBeanCopy.toNew(entity, {name}DO.class);
dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId()));
return dataObject;
}}
private {name}Entity toEntity({name}DO dataObject) {{
if (dataObject == null) {{
return null;
}}
return EvalBeanCopy.toNew(dataObject, {name}Entity.class);
}}
}}
"""
write(f"safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/{name}GatewayImpl.java", content)
def gen_co(name):
content = f"""package org.qinan.safetyeval.client.co.institution;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class {name}CO {{
private String id;
private String orgId;
private String projectId;
private String riskId;
private String surveyId;
private String signTaskId;
private LocalDate analysisDate;
private String evalTypeCode;
private String evalTypeName;
private String industryCode;
private String industryName;
private String evalScope;
private Integer inBizScopeFlag;
private String unitOverview;
private String industryRiskDesc;
private Integer staffMatchCode;
private Integer needExpertCode;
private Integer capabilityCode;
private Integer feasibleCode;
private Integer economicCode;
private Integer riskLevelCode;
private String riskLevelName;
private Integer signContractCode;
private String conclusionContent;
private String approverName;
private Integer approvalOpinionCode;
private String approvalOpinionName;
private LocalDate approvalDate;
private Integer statusCode;
private String statusName;
private String personnelId;
private String personnelName;
private String deptName;
private Integer signStatusCode;
private String signStatusName;
private String signFileUrl;
private Integer sortOrder;
private String orgName;
private String contractNo;
private String projectName;
private String projectIntro;
private Long amountFen;
private String projectTypeCode;
private String projectTypeName;
private String riskSummary;
private String projectRegion;
private String projectAddress;
private LocalDate contractStartDate;
private LocalDate contractEndDate;
private Integer toxicFlag;
private Integer precursorFlag;
private Integer crossProvinceFlag;
private String businessScope;
private String enterpriseName;
private String industryCategory;
private String officeAddress;
private String creditCode;
private String postCode;
private String enterprisePhone;
private String fax;
private String legalPerson;
private String contactName;
private Integer staffCount;
private String scanFileUrl;
private String leaderPersonnelId;
private String leaderName;
private String controlPersonnelId;
private String controlName;
private Integer memberCount;
private LocalDateTime finishTime;
private LocalDate planSurveyDate;
private String surveyPlace;
private Integer noticeDoneFlag;
private Integer inspectDoneFlag;
private Integer rectifyDoneFlag;
private Integer enterpriseDoneFlag;
private Integer reviewDoneFlag;
private String noticeContent;
private String memberSnapshot;
private String stampFileUrl;
private Integer taskStatusCode;
private String taskStatusName;
private LocalDateTime planTime;
private Integer checkinTypeCode;
private String checkinTypeName;
private LocalDateTime checkinTime;
private java.math.BigDecimal longitude;
private java.math.BigDecimal latitude;
private String address;
private Integer facePassFlag;
private String photoUrls;
private String signImageUrl;
private String attachTypeCode;
private String attachTypeName;
private String fileName;
private String fileUrl;
private Integer reviewResultCode;
private String reviewResultName;
private String reviewContent;
private Integer draftVersionNo;
private String templateCode;
private String templateName;
private String contentUrl;
private String hintContent;
private String draftId;
private String reviewerPersonnelId;
private String reviewerName;
private Integer resultCode;
private String resultName;
private String opinionContent;
private LocalDateTime reviewTime;
private String controllerPersonnelId;
private String controllerName;
private Integer precheckPassFlag;
private Integer archiveFlag;
private LocalDateTime controlTime;
private String nodeCode;
private String nodeName;
private String bizTypeCode;
private String bizTypeName;
private String bizRefId;
private String signerPersonnelId;
private String signerName;
private String taskTitle;
private LocalDateTime expireTime;
private LocalDateTime signTime;
private Integer clientTypeCode;
private String clientTypeName;
private String customerId;
private String reportNo;
private String reportName;
private Integer reportYear;
private Integer publicFlag;
private Integer completeFlag;
private Integer reportStatusCode;
private String reportStatusName;
private LocalDateTime archiveTime;
}}
"""
write(f"safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/{name}CO.java", content)
for e in ENTITIES:
name, node, by_project, list_by = e
gen_query(name)
gen_gateway(name, by_project, list_by)
gen_gateway_impl(name, by_project, list_by if list_by not in ("survey_unique",) else "survey", False)
gen_co(name)
print(name)
print("done")