jh-module-ecg/jh-module-ecg-api/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>cn.lihu</groupId> <artifactId>jh-module-ecg</artifactId> <version>${revision}</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>jh-module-ecg-api</artifactId> <packaging>jar</packaging> <name>${project.artifactId}</name> <description> ecg 模å APIï¼æ´é²ç»å ¶å®æ¨¡åè°ç¨ </description> <dependencies> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-common</artifactId> </dependency> <!-- åæ°æ ¡éª --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <optional>true</optional> </dependency> </dependencies> </project> jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/ErrorCodeConstants.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,165 @@ package cn.lihu.jh.module.system.enums; import cn.lihu.jh.framework.common.exception.ErrorCode; /** * System éè¯¯ç æä¸¾ç±» * * system ç³»ç»ï¼ä½¿ç¨ 1-002-000-000 段 */ public interface ErrorCodeConstants { // ========== AUTH 模å 1-002-000-000 ========== ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_002_000_000, "ç»å½å¤±è´¥ï¼è´¦å·å¯ç 䏿£ç¡®"); ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1_002_000_001, "ç»å½å¤±è´¥ï¼è´¦å·è¢«ç¦ç¨"); ErrorCode AUTH_LOGIN_CAPTCHA_CODE_ERROR = new ErrorCode(1_002_000_004, "éªè¯ç 䏿£ç¡®ï¼åå ï¼{}"); ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1_002_000_005, "æªç»å®è´¦å·ï¼éè¦è¿è¡ç»å®"); ErrorCode AUTH_MOBILE_NOT_EXISTS = new ErrorCode(1_002_000_007, "ææºå·ä¸åå¨"); // ========== è忍¡å 1-002-001-000 ========== ErrorCode MENU_NAME_DUPLICATE = new ErrorCode(1_002_001_000, "å·²ç»åå¨è¯¥ååçèå"); ErrorCode MENU_PARENT_NOT_EXISTS = new ErrorCode(1_002_001_001, "ç¶èåä¸åå¨"); ErrorCode MENU_PARENT_ERROR = new ErrorCode(1_002_001_002, "ä¸è½è®¾ç½®èªå·±ä¸ºç¶èå"); ErrorCode MENU_NOT_EXISTS = new ErrorCode(1_002_001_003, "èåä¸åå¨"); ErrorCode MENU_EXISTS_CHILDREN = new ErrorCode(1_002_001_004, "åå¨åèåï¼æ æ³å é¤"); ErrorCode MENU_PARENT_NOT_DIR_OR_MENU = new ErrorCode(1_002_001_005, "ç¶èåçç±»åå¿ é¡»æ¯ç®å½æè èå"); // ========== è§è²æ¨¡å 1-002-002-000 ========== ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1_002_002_000, "è§è²ä¸åå¨"); ErrorCode ROLE_NAME_DUPLICATE = new ErrorCode(1_002_002_001, "å·²ç»åå¨å为ã{}ãçè§è²"); ErrorCode ROLE_CODE_DUPLICATE = new ErrorCode(1_002_002_002, "å·²ç»åå¨ç¼ç 为ã{}ãçè§è²"); ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1_002_002_003, "ä¸è½æä½ç±»å为系ç»å ç½®çè§è²"); ErrorCode ROLE_IS_DISABLE = new ErrorCode(1_002_002_004, "åå为ã{}ãçè§è²å·²è¢«ç¦ç¨"); ErrorCode ROLE_ADMIN_CODE_ERROR = new ErrorCode(1_002_002_005, "ç¼ç ã{}ãä¸è½ä½¿ç¨"); // ========== ç¨æ·æ¨¡å 1-002-003-000 ========== ErrorCode USER_USERNAME_EXISTS = new ErrorCode(1_002_003_000, "ç¨æ·è´¦å·å·²ç»åå¨"); ErrorCode USER_MOBILE_EXISTS = new ErrorCode(1_002_003_001, "ææºå·å·²ç»åå¨"); ErrorCode USER_EMAIL_EXISTS = new ErrorCode(1_002_003_002, "é®ç®±å·²ç»åå¨"); ErrorCode USER_NOT_EXISTS = new ErrorCode(1_002_003_003, "ç¨æ·ä¸åå¨"); ErrorCode USER_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_002_003_004, "å¯¼å ¥ç¨æ·æ°æ®ä¸è½ä¸ºç©ºï¼"); ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1_002_003_005, "ç¨æ·å¯ç æ ¡éªå¤±è´¥"); ErrorCode USER_IS_DISABLE = new ErrorCode(1_002_003_006, "åå为ã{}ãçç¨æ·å·²è¢«ç¦ç¨"); ErrorCode USER_COUNT_MAX = new ErrorCode(1_002_003_008, "åå»ºç¨æ·å¤±è´¥ï¼åå ï¼è¶ è¿ç§æ·æå¤§ç§æ·é é¢({})ï¼"); ErrorCode USER_IMPORT_INIT_PASSWORD = new ErrorCode(1_002_003_009, "åå§å¯ç ä¸è½ä¸ºç©º"); // ========== é¨é¨æ¨¡å 1-002-004-000 ========== ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1_002_004_000, "å·²ç»åå¨è¯¥ååçé¨é¨"); ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1_002_004_001,"ç¶çº§é¨é¨ä¸åå¨"); ErrorCode DEPT_NOT_FOUND = new ErrorCode(1_002_004_002, "å½åé¨é¨ä¸åå¨"); ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1_002_004_003, "åå¨åé¨é¨ï¼æ æ³å é¤"); ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1_002_004_004, "ä¸è½è®¾ç½®èªå·±ä¸ºç¶é¨é¨"); ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1_002_004_006, "é¨é¨({})ä¸å¤äºå¼å¯ç¶æï¼ä¸å è®¸éæ©"); ErrorCode DEPT_PARENT_IS_CHILD = new ErrorCode(1_002_004_007, "ä¸è½è®¾ç½®èªå·±çåé¨é¨ä¸ºç¶é¨é¨"); // ========== å²ä½æ¨¡å 1-002-005-000 ========== ErrorCode POST_NOT_FOUND = new ErrorCode(1_002_005_000, "å½åå²ä½ä¸åå¨"); ErrorCode POST_NOT_ENABLE = new ErrorCode(1_002_005_001, "å²ä½({}) ä¸å¤äºå¼å¯ç¶æï¼ä¸å è®¸éæ©"); ErrorCode POST_NAME_DUPLICATE = new ErrorCode(1_002_005_002, "å·²ç»åå¨è¯¥ååçå²ä½"); ErrorCode POST_CODE_DUPLICATE = new ErrorCode(1_002_005_003, "å·²ç»åå¨è¯¥æ è¯çå²ä½"); // ========== åå ¸ç±»å 1-002-006-000 ========== ErrorCode DICT_TYPE_NOT_EXISTS = new ErrorCode(1_002_006_001, "å½ååå ¸ç±»åä¸åå¨"); ErrorCode DICT_TYPE_NOT_ENABLE = new ErrorCode(1_002_006_002, "åå ¸ç±»åä¸å¤äºå¼å¯ç¶æï¼ä¸å è®¸éæ©"); ErrorCode DICT_TYPE_NAME_DUPLICATE = new ErrorCode(1_002_006_003, "å·²ç»åå¨è¯¥ååçåå ¸ç±»å"); ErrorCode DICT_TYPE_TYPE_DUPLICATE = new ErrorCode(1_002_006_004, "å·²ç»åå¨è¯¥ç±»åçåå ¸ç±»å"); ErrorCode DICT_TYPE_HAS_CHILDREN = new ErrorCode(1_002_006_005, "æ æ³å é¤ï¼è¯¥åå ¸ç±»åè¿æåå ¸æ°æ®"); // ========== åå ¸æ°æ® 1-002-007-000 ========== ErrorCode DICT_DATA_NOT_EXISTS = new ErrorCode(1_002_007_001, "å½ååå ¸æ°æ®ä¸åå¨"); ErrorCode DICT_DATA_NOT_ENABLE = new ErrorCode(1_002_007_002, "åå ¸æ°æ®({})ä¸å¤äºå¼å¯ç¶æï¼ä¸å è®¸éæ©"); ErrorCode DICT_DATA_VALUE_DUPLICATE = new ErrorCode(1_002_007_003, "å·²ç»åå¨è¯¥å¼çåå ¸æ°æ®"); // ========== éç¥å ¬å 1-002-008-000 ========== ErrorCode NOTICE_NOT_FOUND = new ErrorCode(1_002_008_001, "å½åéç¥å ¬åä¸åå¨"); // ========== çä¿¡æ¸ é 1-002-011-000 ========== ErrorCode SMS_CHANNEL_NOT_EXISTS = new ErrorCode(1_002_011_000, "çä¿¡æ¸ éä¸åå¨"); ErrorCode SMS_CHANNEL_DISABLE = new ErrorCode(1_002_011_001, "çä¿¡æ¸ éä¸å¤äºå¼å¯ç¶æï¼ä¸å è®¸éæ©"); ErrorCode SMS_CHANNEL_HAS_CHILDREN = new ErrorCode(1_002_011_002, "æ æ³å é¤ï¼è¯¥çä¿¡æ¸ éè¿æç信模æ¿"); // ========== çä¿¡æ¨¡æ¿ 1-002-012-000 ========== ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_012_000, "ç信模æ¿ä¸åå¨"); ErrorCode SMS_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_002_012_001, "å·²ç»åå¨ç¼ç 为ã{}ãçç信模æ¿"); ErrorCode SMS_TEMPLATE_API_ERROR = new ErrorCode(1_002_012_002, "çä¿¡ API 模æ¿è°ç¨å¤±è´¥ï¼åå æ¯ï¼{}"); ErrorCode SMS_TEMPLATE_API_AUDIT_CHECKING = new ErrorCode(1_002_012_003, "çä¿¡ API æ¨¡çæ æ³ä½¿ç¨ï¼åå ï¼å®¡æ¹ä¸"); ErrorCode SMS_TEMPLATE_API_AUDIT_FAIL = new ErrorCode(1_002_012_004, "çä¿¡ API æ¨¡çæ æ³ä½¿ç¨ï¼åå ï¼å®¡æ¹ä¸éè¿ï¼{}"); ErrorCode SMS_TEMPLATE_API_NOT_FOUND = new ErrorCode(1_002_012_005, "çä¿¡ API æ¨¡çæ æ³ä½¿ç¨ï¼åå ï¼æ¨¡çä¸åå¨"); // ========== çä¿¡åé 1-002-013-000 ========== ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1_002_013_000, "ææºå·ä¸åå¨"); ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_013_001, "模æ¿åæ°({})缺失"); ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_013_002, "ç信模æ¿ä¸åå¨"); // ========== çä¿¡éªè¯ç 1-002-014-000 ========== ErrorCode SMS_CODE_NOT_FOUND = new ErrorCode(1_002_014_000, "éªè¯ç ä¸åå¨"); ErrorCode SMS_CODE_EXPIRED = new ErrorCode(1_002_014_001, "éªè¯ç å·²è¿æ"); ErrorCode SMS_CODE_USED = new ErrorCode(1_002_014_002, "éªè¯ç 已使ç¨"); ErrorCode SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1_002_014_004, "è¶ è¿æ¯æ¥çä¿¡åéæ°é"); ErrorCode SMS_CODE_SEND_TOO_FAST = new ErrorCode(1_002_014_005, "çä¿¡åéè¿äºé¢ç¹"); // ========== ç§æ·ä¿¡æ¯ 1-002-015-000 ========== ErrorCode TENANT_NOT_EXISTS = new ErrorCode(1_002_015_000, "ç§æ·ä¸åå¨"); ErrorCode TENANT_DISABLE = new ErrorCode(1_002_015_001, "åå为ã{}ãçç§æ·å·²è¢«ç¦ç¨"); ErrorCode TENANT_EXPIRE = new ErrorCode(1_002_015_002, "åå为ã{}ãçç§æ·å·²è¿æ"); ErrorCode TENANT_CAN_NOT_UPDATE_SYSTEM = new ErrorCode(1_002_015_003, "ç³»ç»ç§æ·ä¸è½è¿è¡ä¿®æ¹ãå é¤çæä½ï¼"); ErrorCode TENANT_NAME_DUPLICATE = new ErrorCode(1_002_015_004, "åå为ã{}ãçç§æ·å·²åå¨"); ErrorCode TENANT_WEBSITE_DUPLICATE = new ErrorCode(1_002_015_005, "åå为ã{}ãçç§æ·å·²åå¨"); // ========== ç§æ·å¥é¤ 1-002-016-000 ========== ErrorCode TENANT_PACKAGE_NOT_EXISTS = new ErrorCode(1_002_016_000, "ç§æ·å¥é¤ä¸åå¨"); ErrorCode TENANT_PACKAGE_USED = new ErrorCode(1_002_016_001, "ç§æ·æ£å¨ä½¿ç¨è¯¥å¥é¤ï¼è¯·ç»ç§æ·éæ°è®¾ç½®å¥é¤ååå°è¯å é¤"); ErrorCode TENANT_PACKAGE_DISABLE = new ErrorCode(1_002_016_002, "åå为ã{}ãçç§æ·å¥é¤å·²è¢«ç¦ç¨"); // ========== ç¤¾äº¤ç¨æ· 1-002-018-000 ========== ErrorCode SOCIAL_USER_AUTH_FAILURE = new ErrorCode(1_002_018_000, "社交ææå¤±è´¥ï¼åå æ¯ï¼{}"); ErrorCode SOCIAL_USER_NOT_FOUND = new ErrorCode(1_002_018_001, "社交ææå¤±è´¥ï¼æ¾ä¸å°å¯¹åºçç¨æ·"); ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR = new ErrorCode(1_002_018_200, "è·å¾ææºå·å¤±è´¥"); ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_QRCODE_ERROR = new ErrorCode(1_002_018_201, "è·å¾å°ç¨åºç 失败"); ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_TEMPLATE_ERROR = new ErrorCode(1_002_018_202, "è·å¾å°ç¨åºè®¢é æ¶æ¯æ¨¡ç失败"); ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_MESSAGE_ERROR = new ErrorCode(1_002_018_203, "åéå°ç¨åºè®¢é æ¶æ¯å¤±è´¥"); ErrorCode SOCIAL_CLIENT_NOT_EXISTS = new ErrorCode(1_002_018_210, "社交客æ·ç«¯ä¸åå¨"); ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_211, "社交客æ·ç«¯å·²åå¨é ç½®"); // ========== OAuth2 客æ·ç«¯ 1-002-020-000 ========= ErrorCode OAUTH2_CLIENT_NOT_EXISTS = new ErrorCode(1_002_020_000, "OAuth2 客æ·ç«¯ä¸åå¨"); ErrorCode OAUTH2_CLIENT_EXISTS = new ErrorCode(1_002_020_001, "OAuth2 客æ·ç«¯ç¼å·å·²åå¨"); ErrorCode OAUTH2_CLIENT_DISABLE = new ErrorCode(1_002_020_002, "OAuth2 客æ·ç«¯å·²ç¦ç¨"); ErrorCode OAUTH2_CLIENT_AUTHORIZED_GRANT_TYPE_NOT_EXISTS = new ErrorCode(1_002_020_003, "䏿¯æè¯¥ææç±»å"); ErrorCode OAUTH2_CLIENT_SCOPE_OVER = new ErrorCode(1_002_020_004, "ææèå´è¿å¤§"); ErrorCode OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH = new ErrorCode(1_002_020_005, "æ æ redirect_uri: {}"); ErrorCode OAUTH2_CLIENT_CLIENT_SECRET_ERROR = new ErrorCode(1_002_020_006, "æ æ client_secret: {}"); // ========== OAuth2 ææ 1-002-021-000 ========= ErrorCode OAUTH2_GRANT_CLIENT_ID_MISMATCH = new ErrorCode(1_002_021_000, "client_id ä¸å¹é "); ErrorCode OAUTH2_GRANT_REDIRECT_URI_MISMATCH = new ErrorCode(1_002_021_001, "redirect_uri ä¸å¹é "); ErrorCode OAUTH2_GRANT_STATE_MISMATCH = new ErrorCode(1_002_021_002, "state ä¸å¹é "); // ========== OAuth2 ææ 1-002-022-000 ========= ErrorCode OAUTH2_CODE_NOT_EXISTS = new ErrorCode(1_002_022_000, "code ä¸åå¨"); ErrorCode OAUTH2_CODE_EXPIRE = new ErrorCode(1_002_022_001, "code å·²è¿æ"); // ========== é®ç®±è´¦å· 1-002-023-000 ========== ErrorCode MAIL_ACCOUNT_NOT_EXISTS = new ErrorCode(1_002_023_000, "é®ç®±è´¦å·ä¸åå¨"); ErrorCode MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS = new ErrorCode(1_002_023_001, "æ æ³å é¤ï¼è¯¥é®ç®±è´¦å·è¿æé®ä»¶æ¨¡æ¿"); // ========== é®ä»¶æ¨¡ç 1-002-024-000 ========== ErrorCode MAIL_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_024_000, "é®ä»¶æ¨¡çä¸åå¨"); ErrorCode MAIL_TEMPLATE_CODE_EXISTS = new ErrorCode(1_002_024_001, "é®ä»¶æ¨¡ç code({}) å·²åå¨"); // ========== é®ä»¶åé 1-002-025-000 ========== ErrorCode MAIL_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_025_000, "模æ¿åæ°({})缺失"); ErrorCode MAIL_SEND_MAIL_NOT_EXISTS = new ErrorCode(1_002_025_001, "é®ç®±ä¸åå¨"); // ========== ç«å 信模ç 1-002-026-000 ========== ErrorCode NOTIFY_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_026_000, "ç«å 信模çä¸åå¨"); ErrorCode NOTIFY_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_002_026_001, "å·²ç»åå¨ç¼ç 为ã{}ãçç«å 信模æ¿"); // ========== ç«å 信模ç 1-002-027-000 ========== // ========== ç«å ä¿¡åé 1-002-028-000 ========== ErrorCode NOTIFY_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_028_000, "模æ¿åæ°({})缺失"); } jh-module-ecg/jh-module-ecg-biz/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,124 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>cn.lihu</groupId> <artifactId>jh-module-ecg</artifactId> <version>${revision}</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>jh-module-ecg-biz</artifactId> <packaging>jar</packaging> <name>${project.artifactId}</name> <description> ecg 模åä¸ </description> <dependencies> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-module-ecg-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-module-infra-api</artifactId> <version>${revision}</version> </dependency> <!-- ä¸å¡ç»ä»¶ --> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-biz-data-permission</artifactId> </dependency> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-biz-tenant</artifactId> </dependency> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-biz-ip</artifactId> </dependency> <!-- Web ç¸å ³ --> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- DB ç¸å ³ --> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-mybatis</artifactId> </dependency> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-redis</artifactId> </dependency> <!-- Job 宿¶ä»»å¡ç¸å ³ --> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-job</artifactId> </dependency> <!-- æ¶æ¯éåç¸å ³ --> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-mq</artifactId> </dependency> <!-- å·¥å ·ç±»ç¸å ³ --> <dependency> <groupId>cn.lihu</groupId> <artifactId>jh-spring-boot-starter-excel</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- 䏿¹äºæå¡ç¸å ³ --> <dependency> <groupId>com.xingyuv</groupId> <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交ç»éï¼ä¾å¦è¯´ï¼ä¸ªäººå¾®ä¿¡ãä¼ä¸å¾®ä¿¡ççï¼ --> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>wx-java-mp-spring-boot-starter</artifactId> <!-- 微信ç»å½ï¼å ¬ä¼å·ï¼ --> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>wx-java-miniapp-spring-boot-starter</artifactId> <!-- 微信ç»å½ï¼å°ç¨åºï¼ --> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <!-- çä¿¡ï¼é¿éäºï¼ --> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <!-- çä¿¡ï¼é¿éäºï¼ --> </dependency> <dependency> <groupId>com.tencentcloudapi</groupId> <artifactId>tencentcloud-sdk-java-sms</artifactId> <!-- çä¿¡ï¼è ¾è®¯äºï¼ --> </dependency> <dependency> <groupId>com.xingyuv</groupId> <artifactId>spring-boot-starter-captcha-plus</artifactId> <!-- éªè¯ç ï¼ä¸è¬ç¨äºç»å½ä½¿ç¨ --> </dependency> </dependencies> </project> jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/AppointmentController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,95 @@ package cn.lihu.jh.module.ecg.controller.admin.appointment; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.constraints.*; import jakarta.validation.*; import jakarta.servlet.http.*; import java.util.*; import java.io.IOException; import cn.lihu.jh.framework.common.pojo.PageParam; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.pojo.CommonResult; import cn.lihu.jh.framework.common.util.object.BeanUtils; import static cn.lihu.jh.framework.common.pojo.CommonResult.success; import cn.lihu.jh.framework.excel.core.util.ExcelUtils; import cn.lihu.jh.framework.apilog.core.annotation.ApiAccessLog; import static cn.lihu.jh.framework.apilog.core.enums.OperateTypeEnum.*; import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO; import cn.lihu.jh.module.ecg.service.appointment.AppointmentService; @Tag(name = "管çåå° - é¢çº¦") @RestController @RequestMapping("/ecg/appointment") @Validated public class AppointmentController { @Resource private AppointmentService appointmentService; @PostMapping("/create") @Operation(summary = "å建é¢çº¦") @PreAuthorize("@ss.hasPermission('ecg:appointment:create')") public CommonResult<Integer> createAppointment(@Valid @RequestBody AppointmentSaveReqVO createReqVO) { return success(appointmentService.createAppointment(createReqVO)); } @PutMapping("/update") @Operation(summary = "æ´æ°é¢çº¦") @PreAuthorize("@ss.hasPermission('ecg:appointment:update')") public CommonResult<Boolean> updateAppointment(@Valid @RequestBody AppointmentSaveReqVO updateReqVO) { appointmentService.updateAppointment(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "å é¤é¢çº¦") @Parameter(name = "id", description = "ç¼å·", required = true) @PreAuthorize("@ss.hasPermission('ecg:appointment:delete')") public CommonResult<Boolean> deleteAppointment(@RequestParam("id") Integer id) { appointmentService.deleteAppointment(id); return success(true); } @GetMapping("/get") @Operation(summary = "è·å¾é¢çº¦") @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('ecg:appointment:query')") public CommonResult<AppointmentRespVO> getAppointment(@RequestParam("id") Integer id) { AppointmentDO appointment = appointmentService.getAppointment(id); return success(BeanUtils.toBean(appointment, AppointmentRespVO.class)); } @GetMapping("/page") @Operation(summary = "è·å¾é¢çº¦å页") @PreAuthorize("@ss.hasPermission('ecg:appointment:query')") public CommonResult<PageResult<AppointmentRespVO>> getAppointmentPage(@Valid AppointmentPageReqVO pageReqVO) { PageResult<AppointmentDO> pageResult = appointmentService.getAppointmentPage(pageReqVO); return success(BeanUtils.toBean(pageResult, AppointmentRespVO.class)); } @GetMapping("/export-excel") @Operation(summary = "导åºé¢çº¦ Excel") @PreAuthorize("@ss.hasPermission('ecg:appointment:export')") @ApiAccessLog(operateType = EXPORT) public void exportAppointmentExcel(@Valid AppointmentPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List<AppointmentDO> list = appointmentService.getAppointmentPage(pageReqVO).getList(); // å¯¼åº Excel ExcelUtils.write(response, "é¢çº¦.xls", "æ°æ®", AppointmentRespVO.class, BeanUtils.toBean(list, AppointmentRespVO.class)); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentPageReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,76 @@ package cn.lihu.jh.module.ecg.controller.admin.appointment.vo; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import cn.lihu.jh.framework.common.pojo.PageParam; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import static cn.lihu.jh.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @Schema(description = "管çåå° - é¢çº¦å页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class AppointmentPageReqVO extends PageParam { @Schema(description = "æ£è ç¼å·", example = "29034") private String patId; @Schema(description = "æ£è å§å", example = "èµµå ") private String patName; @Schema(description = "æ£è æ§å«") private Boolean patGender; @Schema(description = "æ£è çæ¥") private LocalDate patBirthday; @Schema(description = "æ£è ææº") private String patMobile; @Schema(description = "æ£è çµè¯") private String patPhone; @Schema(description = "身份è¯å·", example = "798") private String patIdentityId; @Schema(description = "æ£è å°å") private String patAddr; @Schema(description = "æ£è æå¨ç§å®¤ä»£ç ") private String patDeptCode; @Schema(description = "æ£è æå¨ç§å®¤åç§°") private String patDeptDesc; @Schema(description = "æ£è æå¨ç åºä»£ç ") private String patWardCode; @Schema(description = "æ£è æå¨ç åºåç§°") private String patWardDesc; @Schema(description = "åºå·") private String patBedNo; @Schema(description = "é¢çº¦ç¼å·", example = "27849") private String bookId; @Schema(description = "é¢çº¦æ£æ¥æ¶é´æ®µ") private LocalDateTime bookPeriodStart; @Schema(description = "é¢çº¦æ£æ¥æ¶é´æ®µ") private LocalDateTime bookPeriodEnd; @Schema(description = "é¢çº¦åçæ¶é´") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] bookTime; @Schema(description = "é¢çº¦æ£æ¥ç±»å", example = "2") private Boolean bookCheckType; @Schema(description = "é¢çº¦æ¥æºï¼Xç³»ç»ãæ¤å£«æå¨é¢çº¦") private String bookSrc; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentRespVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,95 @@ package cn.lihu.jh.module.ecg.controller.admin.appointment.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; import cn.lihu.jh.framework.excel.core.annotations.DictFormat; import cn.lihu.jh.framework.excel.core.convert.DictConvert; @Schema(description = "管çåå° - é¢çº¦ Response VO") @Data @ExcelIgnoreUnannotated public class AppointmentRespVO { @Schema(description = "æ£è ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "29034") @ExcelProperty("æ£è ç¼å·") private String patId; @Schema(description = "æ£è å§å", requiredMode = Schema.RequiredMode.REQUIRED, example = "èµµå ") @ExcelProperty("æ£è å§å") private String patName; @Schema(description = "æ£è æ§å«", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty(value = "æ£è æ§å«", converter = DictConvert.class) @DictFormat("system_user_sex") // TODO 代ç ä¼åï¼å»ºè®®è®¾ç½®å°å¯¹åºç DictTypeConstants æä¸¾ç±»ä¸ private Boolean patGender; @Schema(description = "æ£è çæ¥") @ExcelProperty("æ£è çæ¥") private LocalDate patBirthday; @Schema(description = "æ£è ææº") @ExcelProperty("æ£è ææº") private String patMobile; @Schema(description = "æ£è çµè¯") @ExcelProperty("æ£è çµè¯") private String patPhone; @Schema(description = "身份è¯å·", example = "798") @ExcelProperty("身份è¯å·") private String patIdentityId; @Schema(description = "æ£è å°å") @ExcelProperty("æ£è å°å") private String patAddr; @Schema(description = "æ£è æå¨ç§å®¤ä»£ç ") @ExcelProperty("æ£è æå¨ç§å®¤ä»£ç ") private String patDeptCode; @Schema(description = "æ£è æå¨ç§å®¤åç§°") @ExcelProperty("æ£è æå¨ç§å®¤åç§°") private String patDeptDesc; @Schema(description = "æ£è æå¨ç åºä»£ç ") @ExcelProperty("æ£è æå¨ç åºä»£ç ") private String patWardCode; @Schema(description = "æ£è æå¨ç åºåç§°") @ExcelProperty("æ£è æå¨ç åºåç§°") private String patWardDesc; @Schema(description = "åºå·") @ExcelProperty("åºå·") private String patBedNo; @Schema(description = "é¢çº¦ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "27849") @ExcelProperty("é¢çº¦ç¼å·") private String bookId; @Schema(description = "é¢çº¦æ£æ¥æ¶é´æ®µ", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("é¢çº¦æ£æ¥æ¶é´æ®µ") private LocalDateTime bookPeriodStart; @Schema(description = "é¢çº¦æ£æ¥æ¶é´æ®µ", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("é¢çº¦æ£æ¥æ¶é´æ®µ") private LocalDateTime bookPeriodEnd; @Schema(description = "é¢çº¦åçæ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("é¢çº¦åçæ¶é´") private LocalDateTime bookTime; @Schema(description = "é¢çº¦æ£æ¥ç±»å", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty(value = "é¢çº¦æ£æ¥ç±»å", converter = DictConvert.class) @DictFormat("ecg_check_type") // TODO 代ç ä¼åï¼å»ºè®®è®¾ç½®å°å¯¹åºç DictTypeConstants æä¸¾ç±»ä¸ private Boolean bookCheckType; @Schema(description = "é¢çº¦æ¥æºï¼Xç³»ç»ãæ¤å£«æå¨é¢çº¦", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("é¢çº¦æ¥æºï¼Xç³»ç»ãæ¤å£«æå¨é¢çº¦") private String bookSrc; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentSaveReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,76 @@ package cn.lihu.jh.module.ecg.controller.admin.appointment.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import jakarta.validation.constraints.*; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @Schema(description = "管çåå° - é¢çº¦æ°å¢/ä¿®æ¹ Request VO") @Data public class AppointmentSaveReqVO { @Schema(description = "æ£è ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "29034") @NotEmpty(message = "æ£è ç¼å·ä¸è½ä¸ºç©º") private String patId; @Schema(description = "æ£è å§å", requiredMode = Schema.RequiredMode.REQUIRED, example = "èµµå ") @NotEmpty(message = "æ£è å§åä¸è½ä¸ºç©º") private String patName; @Schema(description = "æ£è æ§å«", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "æ£è æ§å«ä¸è½ä¸ºç©º") private Boolean patGender; @Schema(description = "æ£è çæ¥") private LocalDate patBirthday; @Schema(description = "æ£è ææº") private String patMobile; @Schema(description = "æ£è çµè¯") private String patPhone; @Schema(description = "身份è¯å·", example = "798") private String patIdentityId; @Schema(description = "æ£è å°å") private String patAddr; @Schema(description = "æ£è æå¨ç§å®¤ä»£ç ") private String patDeptCode; @Schema(description = "æ£è æå¨ç§å®¤åç§°") private String patDeptDesc; @Schema(description = "æ£è æå¨ç åºä»£ç ") private String patWardCode; @Schema(description = "æ£è æå¨ç åºåç§°") private String patWardDesc; @Schema(description = "åºå·") private String patBedNo; @Schema(description = "é¢çº¦ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "27849") @NotEmpty(message = "é¢çº¦ç¼å·ä¸è½ä¸ºç©º") private String bookId; @Schema(description = "é¢çº¦æ£æ¥æ¶é´æ®µ", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "é¢çº¦æ£æ¥æ¶é´æ®µä¸è½ä¸ºç©º") private LocalDateTime bookPeriodStart; @Schema(description = "é¢çº¦æ£æ¥æ¶é´æ®µ", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "é¢çº¦æ£æ¥æ¶é´æ®µä¸è½ä¸ºç©º") private LocalDateTime bookPeriodEnd; @Schema(description = "é¢çº¦åçæ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "é¢çº¦åçæ¶é´ä¸è½ä¸ºç©º") private LocalDateTime bookTime; @Schema(description = "é¢çº¦æ£æ¥ç±»å", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @NotNull(message = "é¢çº¦æ£æ¥ç±»åä¸è½ä¸ºç©º") private Boolean bookCheckType; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/appointment/AppointmentDO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,119 @@ package cn.lihu.jh.module.ecg.dal.dataobject.appointment; import lombok.*; import java.util.*; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.lihu.jh.framework.mybatis.core.dataobject.BaseDO; /** * é¢çº¦ DO * * @author 马忳¢ */ @TableName("appointment") @KeySequence("appointment_seq") // ç¨äº OracleãPostgreSQLãKingbaseãDB2ãH2 æ°æ®åºç主é®èªå¢ãå¦ææ¯ MySQL çæ°æ®åºï¼å¯ä¸åã @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor public class AppointmentDO extends BaseDO { /** * id */ @TableId private Integer id; /** * æ£è ç¼å· */ private String patId; /** * æ£è å§å */ private String patName; /** * æ£è æ§å« * * æä¸¾ {@link TODO system_user_sex 对åºçç±»} */ private Boolean patGender; /** * æ£è çæ¥ */ private LocalDate patBirthday; /** * æ£è ææº */ private String patMobile; /** * æ£è çµè¯ */ private String patPhone; /** * 身份è¯å· */ private String patIdentityId; /** * æ£è å°å */ private String patAddr; /** * æ£è æå¨ç§å®¤ä»£ç */ private String patDeptCode; /** * æ£è æå¨ç§å®¤åç§° */ private String patDeptDesc; /** * æ£è æå¨ç åºä»£ç */ private String patWardCode; /** * æ£è æå¨ç åºåç§° */ private String patWardDesc; /** * åºå· */ private String patBedNo; /** * é¢çº¦ç¼å· */ private String bookId; /** * é¢çº¦æ£æ¥æ¶é´æ®µ */ private LocalDateTime bookPeriodStart; /** * é¢çº¦æ£æ¥æ¶é´æ®µ */ private LocalDateTime bookPeriodEnd; /** * é¢çº¦åçæ¶é´ */ private LocalDateTime bookTime; /** * é¢çº¦æ£æ¥ç±»å * * æä¸¾ {@link TODO ecg_check_type 对åºçç±»} */ private Boolean bookCheckType; /** * é¢çº¦æ¥æºï¼Xç³»ç»ãæ¤å£«æå¨é¢çº¦ */ private String bookSrc; /** * 仿°æ®å¹³å°åæ¥æ¶é´ */ private LocalDateTime syncTime; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/appointment/AppointmentMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package cn.lihu.jh.module.ecg.dal.mysql.appointment; import java.util.*; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.lihu.jh.framework.mybatis.core.mapper.BaseMapperX; import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO; import org.apache.ibatis.annotations.Mapper; import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*; /** * é¢çº¦ Mapper * * @author 马忳¢ */ @Mapper public interface AppointmentMapper extends BaseMapperX<AppointmentDO> { default PageResult<AppointmentDO> selectPage(AppointmentPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX<AppointmentDO>() .eqIfPresent(AppointmentDO::getPatId, reqVO.getPatId()) .likeIfPresent(AppointmentDO::getPatName, reqVO.getPatName()) .eqIfPresent(AppointmentDO::getPatGender, reqVO.getPatGender()) .eqIfPresent(AppointmentDO::getPatBirthday, reqVO.getPatBirthday()) .eqIfPresent(AppointmentDO::getPatMobile, reqVO.getPatMobile()) .eqIfPresent(AppointmentDO::getPatPhone, reqVO.getPatPhone()) .eqIfPresent(AppointmentDO::getPatIdentityId, reqVO.getPatIdentityId()) .eqIfPresent(AppointmentDO::getPatAddr, reqVO.getPatAddr()) .eqIfPresent(AppointmentDO::getPatDeptCode, reqVO.getPatDeptCode()) .eqIfPresent(AppointmentDO::getPatDeptDesc, reqVO.getPatDeptDesc()) .eqIfPresent(AppointmentDO::getPatWardCode, reqVO.getPatWardCode()) .eqIfPresent(AppointmentDO::getPatWardDesc, reqVO.getPatWardDesc()) .eqIfPresent(AppointmentDO::getPatBedNo, reqVO.getPatBedNo()) .eqIfPresent(AppointmentDO::getBookId, reqVO.getBookId()) .eqIfPresent(AppointmentDO::getBookPeriodStart, reqVO.getBookPeriodStart()) .eqIfPresent(AppointmentDO::getBookPeriodEnd, reqVO.getBookPeriodEnd()) .betweenIfPresent(AppointmentDO::getBookTime, reqVO.getBookTime()) .eqIfPresent(AppointmentDO::getBookCheckType, reqVO.getBookCheckType()) .eqIfPresent(AppointmentDO::getBookSrc, reqVO.getBookSrc()) .orderByDesc(AppointmentDO::getId)); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package cn.lihu.jh.module.ecg.service.appointment; import java.util.*; import jakarta.validation.*; import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.pojo.PageParam; /** * é¢çº¦ Service æ¥å£ * * @author 马忳¢ */ public interface AppointmentService { /** * å建é¢çº¦ * * @param createReqVO åå»ºä¿¡æ¯ * @return ç¼å· */ Integer createAppointment(@Valid AppointmentSaveReqVO createReqVO); /** * æ´æ°é¢çº¦ * * @param updateReqVO æ´æ°ä¿¡æ¯ */ void updateAppointment(@Valid AppointmentSaveReqVO updateReqVO); /** * å é¤é¢çº¦ * * @param id ç¼å· */ void deleteAppointment(Integer id); /** * è·å¾é¢çº¦ * * @param id ç¼å· * @return é¢çº¦ */ AppointmentDO getAppointment(Integer id); /** * è·å¾é¢çº¦å页 * * @param pageReqVO å页æ¥è¯¢ * @return é¢çº¦å页 */ PageResult<AppointmentDO> getAppointmentPage(AppointmentPageReqVO pageReqVO); } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,74 @@ package cn.lihu.jh.module.ecg.service.appointment; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.pojo.PageParam; import cn.lihu.jh.framework.common.util.object.BeanUtils; import cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper; import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; /** * é¢çº¦ Service å®ç°ç±» * * @author 马忳¢ */ @Service @Validated public class AppointmentServiceImpl implements AppointmentService { @Resource private AppointmentMapper appointmentMapper; @Override public Integer createAppointment(AppointmentSaveReqVO createReqVO) { // æå ¥ AppointmentDO appointment = BeanUtils.toBean(createReqVO, AppointmentDO.class); appointmentMapper.insert(appointment); // è¿å return appointment.getId(); } @Override public void updateAppointment(AppointmentSaveReqVO updateReqVO) { // æ ¡éªåå¨ validateAppointmentExists(updateReqVO.getId()); // æ´æ° AppointmentDO updateObj = BeanUtils.toBean(updateReqVO, AppointmentDO.class); appointmentMapper.updateById(updateObj); } @Override public void deleteAppointment(Integer id) { // æ ¡éªåå¨ validateAppointmentExists(id); // å é¤ appointmentMapper.deleteById(id); } private void validateAppointmentExists(Integer id) { if (appointmentMapper.selectById(id) == null) { throw exception(APPOINTMENT_NOT_EXISTS); } } @Override public AppointmentDO getAppointment(Integer id) { return appointmentMapper.selectById(id); } @Override public PageResult<AppointmentDO> getAppointmentPage(AppointmentPageReqVO pageReqVO) { return appointmentMapper.selectPage(pageReqVO); } } jh-module-ecg/jh-module-ecg-biz/src/main/resources/mapper/appointment/AppointmentMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper"> <!-- ä¸è¬æ åµä¸ï¼å°½å¯è½ä½¿ç¨ Mapper è¿è¡ CRUD å¢å æ¹æ¥å³å¯ã æ æ³æ»¡è¶³çåºæ¯ï¼ä¾å¦è¯´å¤è¡¨å ³èæ¥è¯¢ï¼æä½¿ç¨ XML ç¼å SQLã 代ç çæå¨ææ¶åªçæ Mapper XML æä»¶æ¬èº«ï¼æ´å¤æ¨è MybatisX å¿«éå¼åæä»¶æ¥çææ¥è¯¢ã ææ¡£å¯è§ï¼https://www.iocoder.cn/MyBatis/x-plugins/ --> </mapper> jh-module-ecg/jh-module-ecg-biz/src/test/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImplTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,202 @@ package cn.lihu.jh.module.ecg.service.appointment; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import jakarta.annotation.Resource; import cn.lihu.jh.framework.test.core.ut.BaseDbUnitTest; import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO; import cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper; import cn.lihu.jh.framework.common.pojo.PageResult; import jakarta.annotation.Resource; import org.springframework.context.annotation.Import; import java.util.*; import java.time.LocalDateTime; import static cn.hutool.core.util.RandomUtil.*; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; import static cn.lihu.jh.framework.test.core.util.AssertUtils.*; import static cn.lihu.jh.framework.test.core.util.RandomUtils.*; import static cn.lihu.jh.framework.common.util.date.LocalDateTimeUtils.*; import static cn.lihu.jh.framework.common.util.object.ObjectUtils.*; import static cn.lihu.jh.framework.common.util.date.DateUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; /** * {@link AppointmentServiceImpl} çåå æµè¯ç±» * * @author 马忳¢ */ @Import(AppointmentServiceImpl.class) public class AppointmentServiceImplTest extends BaseDbUnitTest { @Resource private AppointmentServiceImpl appointmentService; @Resource private AppointmentMapper appointmentMapper; @Test public void testCreateAppointment_success() { // åå¤åæ° AppointmentSaveReqVO createReqVO = randomPojo(AppointmentSaveReqVO.class).setId(null); // è°ç¨ Integer appointmentId = appointmentService.createAppointment(createReqVO); // æè¨ assertNotNull(appointmentId); // æ ¡éªè®°å½ç屿§æ¯å¦æ£ç¡® AppointmentDO appointment = appointmentMapper.selectById(appointmentId); assertPojoEquals(createReqVO, appointment, "id"); } @Test public void testUpdateAppointment_success() { // mock æ°æ® AppointmentDO dbAppointment = randomPojo(AppointmentDO.class); appointmentMapper.insert(dbAppointment);// @Sql: å æå ¥åºä¸æ¡åå¨çæ°æ® // åå¤åæ° AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class, o -> { o.setId(dbAppointment.getId()); // è®¾ç½®æ´æ°ç ID }); // è°ç¨ appointmentService.updateAppointment(updateReqVO); // æ ¡éªæ¯å¦æ´æ°æ£ç¡® AppointmentDO appointment = appointmentMapper.selectById(updateReqVO.getId()); // è·åææ°ç assertPojoEquals(updateReqVO, appointment); } @Test public void testUpdateAppointment_notExists() { // åå¤åæ° AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class); // è°ç¨, å¹¶æè¨å¼å¸¸ assertServiceException(() -> appointmentService.updateAppointment(updateReqVO), APPOINTMENT_NOT_EXISTS); } @Test public void testDeleteAppointment_success() { // mock æ°æ® AppointmentDO dbAppointment = randomPojo(AppointmentDO.class); appointmentMapper.insert(dbAppointment);// @Sql: å æå ¥åºä¸æ¡åå¨çæ°æ® // åå¤åæ° Integer id = dbAppointment.getId(); // è°ç¨ appointmentService.deleteAppointment(id); // æ ¡éªæ°æ®ä¸åå¨äº assertNull(appointmentMapper.selectById(id)); } @Test public void testDeleteAppointment_notExists() { // åå¤åæ° Integer id = randomIntegerId(); // è°ç¨, å¹¶æè¨å¼å¸¸ assertServiceException(() -> appointmentService.deleteAppointment(id), APPOINTMENT_NOT_EXISTS); } @Test @Disabled // TODO è¯·ä¿®æ¹ null 为éè¦çå¼ï¼ç¶åå é¤ @Disabled 注解 public void testGetAppointmentPage() { // mock æ°æ® AppointmentDO dbAppointment = randomPojo(AppointmentDO.class, o -> { // ç伿¥è¯¢å° o.setPatId(null); o.setPatName(null); o.setPatGender(null); o.setPatBirthday(null); o.setPatMobile(null); o.setPatPhone(null); o.setPatIdentityId(null); o.setPatAddr(null); o.setPatDeptCode(null); o.setPatDeptDesc(null); o.setPatWardCode(null); o.setPatWardDesc(null); o.setPatBedNo(null); o.setBookId(null); o.setBookPeriodStart(null); o.setBookPeriodEnd(null); o.setBookTime(null); o.setBookCheckType(null); o.setBookSrc(null); }); appointmentMapper.insert(dbAppointment); // æµè¯ patId ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatId(null))); // æµè¯ patName ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatName(null))); // æµè¯ patGender ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatGender(null))); // æµè¯ patBirthday ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBirthday(null))); // æµè¯ patMobile ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatMobile(null))); // æµè¯ patPhone ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatPhone(null))); // æµè¯ patIdentityId ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatIdentityId(null))); // æµè¯ patAddr ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatAddr(null))); // æµè¯ patDeptCode ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptCode(null))); // æµè¯ patDeptDesc ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptDesc(null))); // æµè¯ patWardCode ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardCode(null))); // æµè¯ patWardDesc ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardDesc(null))); // æµè¯ patBedNo ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBedNo(null))); // æµè¯ bookId ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookId(null))); // æµè¯ bookPeriodStart ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodStart(null))); // æµè¯ bookPeriodEnd ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodEnd(null))); // æµè¯ bookTime ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookTime(null))); // æµè¯ bookCheckType ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookCheckType(null))); // æµè¯ bookSrc ä¸å¹é appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookSrc(null))); // åå¤åæ° AppointmentPageReqVO reqVO = new AppointmentPageReqVO(); reqVO.setPatId(null); reqVO.setPatName(null); reqVO.setPatGender(null); reqVO.setPatBirthday(null); reqVO.setPatMobile(null); reqVO.setPatPhone(null); reqVO.setPatIdentityId(null); reqVO.setPatAddr(null); reqVO.setPatDeptCode(null); reqVO.setPatDeptDesc(null); reqVO.setPatWardCode(null); reqVO.setPatWardDesc(null); reqVO.setPatBedNo(null); reqVO.setBookId(null); reqVO.setBookPeriodStart(null); reqVO.setBookPeriodEnd(null); reqVO.setBookTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); reqVO.setBookCheckType(null); reqVO.setBookSrc(null); // è°ç¨ PageResult<AppointmentDO> pageResult = appointmentService.getAppointmentPage(reqVO); // æè¨ assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); assertPojoEquals(dbAppointment, pageResult.getList().get(0)); } } jh-module-ecg/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>cn.lihu</groupId> <artifactId>jh</artifactId> <version>${revision}</version> </parent> <modelVersion>4.0.0</modelVersion> <modules> <module>jh-module-ecg-api</module> <module>jh-module-ecg-biz</module> </modules> <artifactId>jh-module-ecg</artifactId> <packaging>pom</packaging> <name>${project.artifactId}</name> <description> XXå»é¢å¿çµç§æ¨¡å </description> </project> sql/mysql/jh.sql
@@ -11,7 +11,7 @@ `pat_id` varchar(30) NOT NULL COMMENT 'æ£è ç¼å·', `pat_name` varchar(10) NOT NULL COMMENT 'æ£è å§å', `pat_gender` bit(1) NOT NULL COMMENT 'æ£è æ§å«', `pat_birthday` date DEFAULT NULL COMMENT 'æ£è çæ¥', `pat_birthday` datetime DEFAULT NULL COMMENT 'æ£è çæ¥', `pat_mobile` char(11) DEFAULT NULL COMMENT 'æ£è ææº', `pat_phone` varchar(20) DEFAULT NULL COMMENT 'æ£è çµè¯', `pat_identity_id` varchar(20) DEFAULT NULL COMMENT '身份è¯å·',