#!/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")