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

131 lines
6.0 KiB
Python

#!/usr/bin/env python3
"""Generate remaining P2 Api/Executor/Controller triples."""
import os
ROOT = os.path.join(os.path.dirname(__file__), "..")
def w(rel, c):
p = os.path.join(ROOT, rel.replace('/', os.sep))
os.makedirs(os.path.dirname(p), exist_ok=True)
open(p, 'w', encoding='utf-8', newline='\n').write(c)
GET_OR_SAVE = [
("EvalContract", "EvalContract", "NODE_02", "EVAL_CONTRACT_NOT_FOUND", "业务合同", "eval-contract", "toContractCO"),
("EvalTeam", "EvalTeam", "NODE_03", "EVAL_TEAM_NOT_FOUND", "项目组成立", "eval-team", "toTeamCO"),
("EvalSurvey", "EvalSurvey", "NODE_04", "EVAL_SURVEY_NOT_FOUND", "现场踏勘", "eval-survey", "toSurveyCO"),
("EvalInternalReview", "EvalInternalReview", "NODE_06", "EVAL_INTERNAL_REVIEW_NOT_FOUND", "内部审核", "eval-internal-review", "toInternalCO"),
("EvalTechReview", "EvalTechReview", "NODE_07", "EVAL_TECH_REVIEW_NOT_FOUND", "技术审核", "eval-tech-review", "toTechCO"),
("EvalProcessControl", "EvalProcessControl", "NODE_08", "EVAL_PROCESS_NOT_FOUND", "过程控制", "eval-process-control", "toProcessCO"),
]
for entity, name, node, err, tag, path, conv in GET_OR_SAVE:
w(f"safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/{name}Api.java", f"""package org.qinan.safetyeval.client.api.institution;
import org.qinan.safetyeval.client.co.institution.{name}CO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.{name}SaveCmd;
public interface {name}Api {{
SingleResponse<{name}CO> getOrSave({name}SaveCmd cmd);
SingleResponse<{name}CO> getByProject(String projectId);
}}
""")
w(f"safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/{name}Executor.java", f"""package org.qinan.safetyeval.app.executor.institution;
import org.qinan.safetyeval.app.executor.institution.support.EvalCmdCopy;
import org.qinan.safetyeval.app.executor.institution.support.EvalNodeCoConverter;
import org.qinan.safetyeval.app.executor.institution.support.EvalProjectNodeSupport;
import org.qinan.safetyeval.client.api.institution.{name}Api;
import org.qinan.safetyeval.client.co.institution.{name}CO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.{name}SaveCmd;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.entity.{entity}Entity;
import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.gateway.{entity}Gateway;
import org.qinan.safetyeval.domain.support.EvalNodeCodes;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class {name}Executor implements {name}Api {{
@Resource
private {entity}Gateway {entity[0].lower() + entity[1:]}Gateway;
@Resource
private EvalProjectNodeSupport evalProjectNodeSupport;
@Override
public SingleResponse<{name}CO> getOrSave({name}SaveCmd cmd) {{
Long projectId = Long.parseLong(cmd.getProjectId());
EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId);
evalProjectNodeSupport.assertWrite(projectId, EvalNodeCodes.{node});
{entity}Entity entity = {entity[0].lower() + entity[1:]}Gateway.getByProjectId(projectId, project.getOrgId());
if (entity == null) {{
entity = new {entity}Entity();
entity.setOrgId(project.getOrgId());
entity.setProjectId(projectId);
entity.setStatusCode(1);
evalProjectNodeSupport.fillNodeStatus(1, entity);
entity = {entity[0].lower() + entity[1:]}Gateway.save(entity);
}}
EvalCmdCopy.apply(cmd, entity);
evalProjectNodeSupport.fillNodeStatus(entity.getStatusCode(), entity);
entity = {entity[0].lower() + entity[1:]}Gateway.modify(entity);
evalProjectNodeSupport.afterNodeSaved(projectId, EvalNodeCodes.{node}, entity.getStatusCode());
return SingleResponse.success(EvalNodeCoConverter.{conv}(entity));
}}
@Override
public SingleResponse<{name}CO> getByProject(String projectId) {{
Long pid = Long.parseLong(projectId);
evalProjectNodeSupport.assertRead(pid);
EvalProjectEntity project = evalProjectNodeSupport.requireProject(pid);
{entity}Entity entity = {entity[0].lower() + entity[1:]}Gateway.getByProjectId(pid, project.getOrgId());
if (entity == null) {{
throw new BizException(ErrorCode.{err});
}}
return SingleResponse.success(EvalNodeCoConverter.{conv}(entity));
}}
}}
""")
w(f"safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/{name}Controller.java", f"""package org.qinan.safetyeval.adapter.web.institution;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.qinan.safetyeval.client.api.institution.{name}Api;
import org.qinan.safetyeval.client.co.institution.{name}CO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.{name}SaveCmd;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "机构端-{tag}")
@RestController
@RequestMapping("/safetyEval/institution/{path}")
public class {name}Controller {{
@Resource
private {name}Api {name[0].lower() + name[1:]}Api;
@ApiOperation("按项目获取或保存")
@PostMapping("/get-or-save")
public SingleResponse<{name}CO> getOrSave(@Validated @RequestBody {name}SaveCmd cmd) {{
return {name[0].lower() + name[1:]}Api.getOrSave(cmd);
}}
@ApiOperation("按项目查询")
@GetMapping("/get")
public SingleResponse<{name}CO> get(@ApiParam("项目ID") @RequestParam String projectId) {{
return {name[0].lower() + name[1:]}Api.getByProject(projectId);
}}
}}
""")
print(name)
print("get-or-save done")