db/herb.sql
@@ -1,5 +1,5 @@ CREATE database if NOT EXISTS `herb` default character set utf8mb4 collate utf8mb4_general_ci; USE `hreb`; USE `herb`; /* db/nginx/nginx.key
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAsd7TtPzeC0RKlIt0CeBej7JauxxBWnKFSQNP0jVPp0bzANlE OW8j22s8lJshGogSiyAQcS4+uecnz/uoyIsujXhgvgUO+Mp2Q4/WC2fMhIKCSYk5 7LbARM7870XIy+9GLAapvrMwUG4vipJnQbwH0x49RtxFjsaOE6ZfmGtfU0NY+1dZ yS9Xe8AXveEQLGxB1JPwI/ocR9bxFTalp7AL1tD1UFpS5BOeShx2dKEtVnI/YMGT DeAOjcd8HjXwP6H/rGTYaW+p0yM9McLh4B2Z0eHRFblvLfKoWh8E+EBGPmn0ntuR ZKHV87i3FKO4cepuAE0Ie2ZEJPE0kmSGuG1ZYwIDAQABAoIBAA0d8pzZPQK1sY5M zmzgB/ku3PQJfGRQJ7YfsWY+Gjaqy8bXPunBYXKP8PLAketj94IdBjligKuy+UOk Omk3omI6a1/3/YepXplS5SUILZPkD/meThA/1eP9I7f9fHZVmeYrQ59VlY2I4qak b0rws98Ezt4H5nVF/TpDva7+1BPOtuO6lUa04XBPsFajKJWjYvOFa4VfgsRt3w18 AxiCfE4DRRKH+ybc2zUwtOH2C+w9E/qgpDhAWTfqvAnapz7IF9Qx+9H2jmCPe8ya pDq5hdEMYrf0a1czRLN5DxtPTSbtw3l47PdeWkKvGlfB30ZO+j4lFoW9q2lnceTi fR4Au+ECgYEA87ypudeyvFf+Ax0mlyQoLQUXeUXtN9mkaQbrSifLq7u3N/snQcKP fORD6OiqXmaGTHsxiZZ4bmGPLrR6F4JT2mgAt2AT3vza+NGp7WARKBpm7hSyN5lP /g3qw5RLXkAou+eExbg3iG1nfJBzIovc2O0gM8u4QNWJmNGidSFIUHECgYEAutHN MbL5jXal62aKvF3rKvTc3bEGXqIt5crcdlPKe7q4HOZVCXVrOzD8uhyFTTNZ9Eoe RG1B8JDdJRKCh1sVHlAbdFwhIy71xmj5E5LdpM09WVGxZDNnnB2anTguuV49R8zF Noy5CN/sAMmRaVeNeUJ1hapR1qc8NftSW0wl8RMCgYEA8lPS02h21fcOHv5ujbpv D0OOsQ4q6WpDogA1Eoc6YcXCRbA4uZK8okk4k2ovaKe6QnQBLnAh0GzCtIbPFGyI /g6FF8w4NW1kMBoUPmNS63JEf9Sn08tj0oz3qffYbx6O4TMvuHyNCeDsENZ1AhXY PvyTFawnxp4HrZ5PTPEIOqECgYBiIQGfMVtTqxbL5zjIaKy2C5hX+jxWSOnC4iOb I7gf9Zvv0iyoozyIAts9Bu4d9vMxFh1/48PXEMCYUHivkHAvU/SX0iy1xlzisxDh 7yrs/cFTwU1kTHwHzKUCIBiq1Y1qwWx1ksU+nB/i6f2vT4XIQ9hnNWd3ULCXykMg IYdscQKBgQCb4TcSFmZ1FiJEcRhe4Hi1jj3Q7gpW8fx7QH6c0Re9+FTeMnFFkNvd PWY1LL+NDphoPDBeifyxj15X6j0+wtn2mb7X2r5D8i/mEAKExKE6t9TZiqzrC3sp FOAC3sSQlfDoq2pFr9njQ0Ib3EC3DNoNbfLRM0Nb93vBhoHtYfEmpg== -----END RSA PRIVATE KEY----- db/nginx/nginx.pem
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,76 @@ -----BEGIN CERTIFICATE----- MIIHkjCCBXqgAwIBAgIQBJQUPEv6WylvZlJzpb+N6DANBgkqhkiG9w0BAQsFADBc MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xNDAyBgNVBAMT K1JhcGlkU1NMIEdsb2JhbCBUTFMgUlNBNDA5NiBTSEEyNTYgMjAyMiBDQTEwHhcN MjMwMjEwMDAwMDAwWhcNMjQwMjEyMjM1OTU5WjAYMRYwFAYDVQQDDA0qLnNobGFu YmFvLmNuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsd7TtPzeC0RK lIt0CeBej7JauxxBWnKFSQNP0jVPp0bzANlEOW8j22s8lJshGogSiyAQcS4+uecn z/uoyIsujXhgvgUO+Mp2Q4/WC2fMhIKCSYk57LbARM7870XIy+9GLAapvrMwUG4v ipJnQbwH0x49RtxFjsaOE6ZfmGtfU0NY+1dZyS9Xe8AXveEQLGxB1JPwI/ocR9bx FTalp7AL1tD1UFpS5BOeShx2dKEtVnI/YMGTDeAOjcd8HjXwP6H/rGTYaW+p0yM9 McLh4B2Z0eHRFblvLfKoWh8E+EBGPmn0ntuRZKHV87i3FKO4cepuAE0Ie2ZEJPE0 kmSGuG1ZYwIDAQABo4IDkjCCA44wHwYDVR0jBBgwFoAU8JyF/aKffY/JaLvV1IlN Hb7TkP8wHQYDVR0OBBYEFJzhNUzeA/nCFFHZ5w00mCEnr377MCUGA1UdEQQeMByC DSouc2hsYW5iYW8uY26CC3NobGFuYmFvLmNuMA4GA1UdDwEB/wQEAwIFoDAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgZ8GA1UdHwSBlzCBlDBIoEagRIZC aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xvYmFsVExTUlNBNDA5 NlNIQTI1NjIwMjJDQTEuY3JsMEigRqBEhkJodHRwOi8vY3JsNC5kaWdpY2VydC5j b20vUmFwaWRTU0xHbG9iYWxUTFNSU0E0MDk2U0hBMjU2MjAyMkNBMS5jcmwwPgYD VR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdp Y2VydC5jb20vQ1BTMIGHBggrBgEFBQcBAQR7MHkwJAYIKwYBBQUHMAGGGGh0dHA6 Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBRBggrBgEFBQcwAoZFaHR0cDovL2NhY2VydHMu ZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xvYmFsVExTUlNBNDA5NlNIQTI1NjIwMjJD QTEuY3J0MAkGA1UdEwQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB1AHb/ iD8KtvuVUcJhzPWHujS0pM27KdxoQgqf5mdMWjp0AAABhjkEJJgAAAQDAEYwRAIg D6c8bJcNM1KcgxIWSxUiB8k/iymyBFiiFKmuiiYwYZUCIGQIVF39gA3sx5l6Xb+D VdRaqfZ1weRkc2WW38DqB9oXAHYAc9meiRtMlnigIH1HneayxhzQUV5xGSqMa4AQ esF3crUAAAGGOQQkwwAABAMARzBFAiAjebSFq6by4qwW89fwpE3+Z2j37jMQRAJd fLBNqMZu/QIhAL0o9lF8nPS/Tv516LUt/yV8k3TjDiGG/SNqKIGJ5uQUAHYASLDj a9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGGOQQkiAAABAMARzBFAiAO zy7LipK499miZzKIqcU+QC8GdoUXTm3MlrWTbg+0hQIhANdOpLBwy/GfHD4i9u2O hMikx80LPL0cg7qAdJiZFVQUMA0GCSqGSIb3DQEBCwUAA4ICAQCGlBraan8PbxhV hZW0bOPxVBUx72M37mA4A3NAu0KEaboBgG1qrK835/Jp/vYZpptd4Z7maKzixCXT OL7J9+D7raN02oct6MDXb+uc+BWgYwnmwj9YgmS01Xs6UQLEAMRKaDENmt30OUXp n/ZghLRAliyGtEcyn4yJFODkUBJbi9m2VrRD+XdCZJYEStxmM2DuEVGpIAEDc+aC DoSUe/wuLJf3iUOSVQKLfYC/zNuB7FzSVSv/FphVt1EwlWD2RqSEoDgdzCwbD/pH p+8yjMDUHQZW6bSYDrwdYllq/NL/5PlDPdOiUUvmKNeOrJ1nY6vu0wkvHq55Agsl juWfyj8m2oCzURN78ONIJaEs3CR+9URM1xh+3ZjFWnzkmrc7WjGXTLDxX6tWDbcU qSBwLf4KDBwfWVcIGbXkoH/dvdF/boGJAx2ho9Sv/pMRQZ3xHjSI2MFAvGNocRBm tRN+TZXxhpQ7LSJdDyNKHvr9iV5sNTjPLpkpm2AXs3e520wXmtQyT5Hn3FmFFmt9 srERXJL9VsQj20cKQth92N0ZKwVyiPKJo0PKDDwmSzAEsFgxHHE4y4itPY/nFN7y FYrtkhSCFwUHuwFZFyv9ZWAMF5Ikv2ivk2ujIykEGTGqlinup+rJTJwb078/Psjp ndWKtX0hCd4Vscz+L5Nz68duMQXobg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFyzCCBLOgAwIBAgIQCgWbJfVLPYeUzGYxR3U4ozANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0yMjA1MDQwMDAwMDBaFw0zMTExMDkyMzU5NTlaMFwxCzAJBgNVBAYTAlVT MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE0MDIGA1UEAxMrUmFwaWRTU0wgR2xv YmFsIFRMUyBSU0E0MDk2IFNIQTI1NiAyMDIyIENBMTCCAiIwDQYJKoZIhvcNAQEB BQADggIPADCCAgoCggIBAKY5PJhwCX2UyBb1nelu9APen53D5+C40T+BOZfSFaB0 v0WJM3BGMsuiHZX2IHtwnjUhLL25d8tgLASaUNHCBNKKUlUGRXGztuDIeXb48d64 k7Gk7u7mMRSrj+yuLSWOKnK6OGKe9+s6oaVIjHXY+QX8p2I2S3uew0bW3BFpkeAr LBCU25iqeaoLEOGIa09DVojd3qc/RKqr4P11173R+7Ub05YYhuIcSv8e0d7qN1sO 1+lfoNMVfV9WcqPABmOasNJ+ol0hAC2PTgRLy/VZo1L0HRMr6j8cbR7q0nKwdbn4 Ar+ZMgCgCcG9zCMFsuXYl/rqobiyV+8U37dDScAebZTIF/xPEvHcmGi3xxH6g+dT CjetOjJx8sdXUHKXGXC9ka33q7EzQIYlZISF7EkbT5dZHsO2DOMVLBdP1N1oUp0/ 1f6fc8uTDduELoKBRzTTZ6OOBVHeZyFZMMdi6tA5s/jxmb74lqH1+jQ6nTU2/Mma hGNxUuJpyhUHezgBA6sto5lNeyqc+3Cr5ehFQzUuwNsJaWbDdQk1v7lqRaqOlYjn iomOl36J5txTs0wL7etCeMRfyPsmc+8HmH77IYVMUOcPJb+0gNuSmAkvf5QXbgPI Zursn/UYnP9obhNbHc/9LYdQkB7CXyX9mPexnDNO7pggNA2jpbEarLmZGi4grMmf AgMBAAGjggGCMIIBfjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTwnIX9 op99j8lou9XUiU0dvtOQ/zAfBgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3R VTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl cnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v RGlnaUNlcnRHbG9iYWxSb290Q0EuY3J0MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6 Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwPQYD VR0gBDYwNDALBglghkgBhv1sAgEwBwYFZ4EMAQEwCAYGZ4EMAQIBMAgGBmeBDAEC AjAIBgZngQwBAgMwDQYJKoZIhvcNAQELBQADggEBAAfjh/s1f5dDdfm0sNm74/dW MbbsxfYV1LoTpFt+3MSUWvSbiPQfUkoV57b5rutRJvnPP9mSlpFwcZ3e1nSUbi2o ITGA7RCOj23I1F4zk0YJm42qAwJIqOVenR3XtyQ2VR82qhC6xslxtNf7f2Ndx2G7 Mem4wpFhyPDT2P6UJ2MnrD+FC//ZKH5/ERo96ghz8VqNlmL5RXo8Ks9rMr/Ad9xw Y4hyRvAz5920myUffwdUqc0SvPlFnahsZg15uT5HkK48tHR0TLuLH8aRpzh4KJ/Y p0sARNb+9i1R4Fg5zPNvHs2BbIve0vkwxAy+R4727qYzl3027w9jEFC6HMXRaDc= -----END CERTIFICATE----- jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/DrySocketConst.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package org.jeecg.common.constant; /** * VXESocket 常é * @author: jeecg-boot */ public class DrySocketConst { /** * æ¶æ¯ç±»å */ public static final String TYPE = "type"; /** * æ¶æ¯æ°æ® */ public static final String DATA = "data"; /** * æ¶æ¯ç±»åï¼å¿è·³æ£æµ */ public static final String TYPE_HB = "heart_beat"; /** * æ¶æ¯ç±»åï¼éç¨æ°æ®ä¼ é */ public static final String TYPE_CSD = "common_send_date"; /** * æ¶æ¯ç±»åï¼å®æ¶æ°æ®ä¸ä¼ */ public static final String TYPE_RDT = "real_time_data"; } jeecg-boot-base-core/src/main/java/org/jeecg/config/WebSocketConfig.java
@@ -12,6 +12,7 @@ */ @Configuration public class WebSocketConfig { /** * æ³¨å ¥ServerEndpointExporterï¼ * è¿ä¸ªbeanä¼èªå¨æ³¨å使ç¨äº@ServerEndpoint注解声æçWebsocket endpoint jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java
@@ -67,6 +67,14 @@ //TENANT_TABLE.add("demo"); //3.onlineç§æ·é离æµè¯ //TENANT_TABLE.add("ceapp_issue"); TENANT_TABLE.add("dry_eqp_type"); TENANT_TABLE.add("dry_equipment"); TENANT_TABLE.add("dry_eqp_type"); TENANT_TABLE.add("dry_herb"); TENANT_TABLE.add("dry_herb_type"); TENANT_TABLE.add("dry_order"); TENANT_TABLE.add("dry_shop"); } jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -120,14 +120,14 @@ filterChainDefinitionMap.put("/swagger**/**", "anon"); filterChainDefinitionMap.put("/webjars/**", "anon"); filterChainDefinitionMap.put("/v2/**", "anon"); filterChainDefinitionMap.put("/sys/annountCement/show/**", "anon"); //ç§¯æ¨æ¥è¡¨æé¤ filterChainDefinitionMap.put("/jmreport/**", "anon"); filterChainDefinitionMap.put("/**/*.js.map", "anon"); filterChainDefinitionMap.put("/**/*.css.map", "anon"); //大屿¨¡æ¿ä¾å filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); filterChainDefinitionMap.put("/bigscreen/template1/**", "anon"); @@ -140,6 +140,7 @@ filterChainDefinitionMap.put("/websocket/**", "anon");//ç³»ç»éç¥åå ¬å filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模å filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTableæ çå·æ°ç¤ºä¾ filterChainDefinitionMap.put("/drySocket/**", "anon");//å¹²ç¥æºéä¿¡ //æ§è½çæ§ââå®å ¨éæ£æ³é²TOEKNï¼duridè¿æ¥æ± ä¹æï¼ //filterChainDefinitionMap.put("/actuator/**", "anon"); @@ -147,7 +148,12 @@ filterChainDefinitionMap.put("/test/seata/**", "anon"); // å¹²ç¥è®¾å¤å®æ¶æ°æ®ä¸ä¼ filterChainDefinitionMap.put("/dry/dryOrder/sendRealTimeData", "anon"); //filterChainDefinitionMap.put("/dry/dryOrder/**", "anon"); // å¹²ç¥æµè¯ filterChainDefinitionMap.put("/dry/dryResult/**", "anon"); filterChainDefinitionMap.put("/dry/real/**", "anon"); // æ·»å èªå·±çè¿æ»¤å¨å¹¶ä¸åå为jwt Map<String, Filter> filterMap = new HashMap<String, Filter>(1); jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package org.jeecg.modules.dry.common; public interface CacheConstants { enum RedisKeyEnum{ WORK_ORDER("workOrder","å·¥åMAP"); private String code; private String text; RedisKeyEnum(String code, String text) { this.code = code; this.text = text; } public String getCode() { return code; } public String getText() { return text; } } } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.jeecg.modules.dry.vo.RealTimeDataVo; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; @@ -82,4 +83,11 @@ @Excel(name = "ç§æ·id", width = 15) @ApiModelProperty(value = "ç§æ·id") private Integer tenantId; public DryEquipment() { } public DryEquipment(RealTimeDataVo realTimeDataVo) { this.code = realTimeDataVo.getMachineid(); this.tenantId = realTimeDataVo.getTenantid(); } } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerb.java
@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.jeecg.modules.dry.vo.RealTimeDataVo; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; @@ -61,14 +62,14 @@ @Excel(name = "å¹²ç¥æ¹æ³", width = 15) @ApiModelProperty(value = "å¹²ç¥æ¹æ³") private String dryMethod; /**å¹²ç¥æ¶é´*/ @Excel(name = "å¹²ç¥æ¶é´", width = 15) @ApiModelProperty(value = "å¹²ç¥æ¶é´") private Integer dryTime; /**å¹²ç¥æ¸©åº¦*/ @Excel(name = "å¹²ç¥æ¸©åº¦", width = 15) @ApiModelProperty(value = "å¹²ç¥æ¸©åº¦") private String dryTemp; // /**å¹²ç¥æ¶é´*/ // @Excel(name = "å¹²ç¥æ¶é´", width = 15) // @ApiModelProperty(value = "å¹²ç¥æ¶é´") // private Integer dryTime; // /**å¹²ç¥æ¸©åº¦*/ // @Excel(name = "å¹²ç¥æ¸©åº¦", width = 15) // @ApiModelProperty(value = "å¹²ç¥æ¸©åº¦") // private String dryTemp; /**注æäºé¡¹*/ @Excel(name = "注æäºé¡¹", width = 15) @ApiModelProperty(value = "注æäºé¡¹") @@ -105,4 +106,47 @@ @Excel(name = "ç®æ 嫿°´ç", width = 15) @ApiModelProperty(value = "ç®æ 嫿°´ç") private Double target; /**ææé*/ @Excel(name = "ææé", width = 15) @ApiModelProperty(value = "ææé") private Integer feed; /**é¢è®¡å¹²ç¥æ¶é´*/ @Excel(name = "é¢è®¡å¹²ç¥æ¶é´", width = 15) @ApiModelProperty(value = "é¢è®¡å¹²ç¥æ¶é´") private Integer et; /**ç飿¸©åº¦*/ @Excel(name = "ç飿¸©åº¦", width = 15) @ApiModelProperty(value = "ç飿¸©åº¦") private Double windTemp; /**ç¯å¢æ¸©åº¦*/ @Excel(name = "ç¯å¢æ¸©åº¦", width = 15) @ApiModelProperty(value = "ç¯å¢æ¸©åº¦") private Double envTemp; /**ç¯å¢æ¹¿åº¦*/ @Excel(name = "ç¯å¢æ¹¿åº¦", width = 15) @ApiModelProperty(value = "ç¯å¢æ¹¿åº¦") private Double envHum; /**è¡æå»¶æ¶ms*/ @Excel(name = "è¡æå»¶æ¶ms", width = 15) @ApiModelProperty(value = "è¡æå»¶æ¶ms") private Integer delay; /**ç¿»ææ¬¡æ°*/ @Excel(name = "ç¿»ææ¬¡æ°", width = 15) @ApiModelProperty(value = "ç¿»ææ¬¡æ°") private Integer turn; public DryHerb(){} public DryHerb(RealTimeDataVo realTimeDataVo) { this.code = realTimeDataVo.getIndex() + ""; this.delay = realTimeDataVo.getDelay(); this.name = realTimeDataVo.getName(); this.delay = realTimeDataVo.getDelay(); this.turn = realTimeDataVo.getTurntime(); this.feed = realTimeDataVo.getWeight1(); this.initial = realTimeDataVo.getMoisture1(); this.target = realTimeDataVo.getMoisture3(); this.windTemp = realTimeDataVo.getTemp3(); this.et = realTimeDataVo.getTime1(); this.tenantId = realTimeDataVo.getTenantid(); } } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryOrder.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; @@ -23,6 +24,7 @@ * @Version: V1.0 */ @Data @ToString @TableName("dry_order") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @@ -35,9 +37,9 @@ @ApiModelProperty(value = "id") private String id; /**工忶é´*/ @Excel(name = "工忶é´", width = 15, format = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @Excel(name = "工忶é´", width = 15, format = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "工忶é´") private Date orderTime; /**å·¥åå·*/ @@ -49,6 +51,9 @@ @Dict(dictTable = "dry_herb", dicText = "name", dicCode = "id") @ApiModelProperty(value = "è¯æ") private String herbId; /**è¯æ*/ @ApiModelProperty(value = "è¯æåç§°") private String herbName; /**åå§å«æ°´ç*/ @Excel(name = "åå§å«æ°´ç", width = 15) @ApiModelProperty(value = "åå§å«æ°´ç") @@ -60,7 +65,11 @@ /**ææé*/ @Excel(name = "ææé", width = 15) @ApiModelProperty(value = "ææé") private Double feed; private Integer feed; /**åå§éé*/ @Excel(name = "åå§éé", width = 15) @ApiModelProperty(value = "åå§éé") private Double originWeight; /**é¢è®¡å¹²ç¥æ¶é´*/ @Excel(name = "é¢è®¡å¹²ç¥æ¶é´", width = 15) @ApiModelProperty(value = "é¢è®¡å¹²ç¥æ¶é´") @@ -72,7 +81,27 @@ /**å¹²ç¥æ¶é´*/ @Excel(name = "å¹²ç¥æ¶é´", width = 15) @ApiModelProperty(value = "å¹²ç¥æ¶é´") private Integer drying; private Integer dryTime; /**ç飿¸©åº¦*/ @Excel(name = "ç飿¸©åº¦", width = 15) @ApiModelProperty(value = "ç飿¸©åº¦") private Double windTemp; /**ç¯å¢æ¸©åº¦*/ @Excel(name = "ç¯å¢æ¸©åº¦", width = 15) @ApiModelProperty(value = "ç¯å¢æ¸©åº¦") private Double envTemp; /**ç¯å¢æ¹¿åº¦*/ @Excel(name = "ç¯å¢æ¹¿åº¦", width = 15) @ApiModelProperty(value = "ç¯å¢æ¹¿åº¦") private Double envHum; /**è¡æå»¶æ¶ms*/ @Excel(name = "è¡æå»¶æ¶ms", width = 15) @ApiModelProperty(value = "è¡æå»¶æ¶ms") private Integer delay; /**ç¿»ææ¬¡æ°*/ @Excel(name = "ç¿»ææ¬¡æ°", width = 15) @ApiModelProperty(value = "ç¿»ææ¬¡æ°") private Integer turn; /**é¢è®¡å©ä½æ¶é´*/ @Excel(name = "é¢è®¡å©ä½æ¶é´", width = 15) @ApiModelProperty(value = "é¢è®¡å©ä½æ¶é´") @@ -116,4 +145,6 @@ @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id") @ApiModelProperty(value = "æä½äºº") private String operator; private String temps; } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryOrderTrend.java
@@ -41,18 +41,47 @@ @Excel(name = "嫿°´ç", width = 15) @ApiModelProperty(value = "嫿°´ç") private Double moisture; /**温度*/ @Excel(name = "温度", width = 15) @ApiModelProperty(value = "温度") private Double temp; /**飿ºæ¸©åº¦*/ @Excel(name = "飿ºæ¸©åº¦", width = 15) @ApiModelProperty(value = "飿ºæ¸©åº¦") private Double fanTemp; /**é£ç®±æ¸©åº¦*/ @Excel(name = "é£ç®±æ¸©åº¦", width = 15) @ApiModelProperty(value = "é£ç®±æ¸©åº¦") private Double bellowsTemp; /**æ¶é´*/ @Excel(name = "æ¶é´", width = 15, format = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @Excel(name = "æ¶é´", width = 15, format = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "æ¶é´") private Date tim; /**ç§æ·id*/ @Excel(name = "ç§æ·id", width = 15) /**æ»æ¶é´*/ @Excel(name = "æ»æ¶é´", width = 15) @ApiModelProperty(value = "æ»æ¶é´") private Integer totalTime; /**å¹²ç¥æ¶é´s*/ @Excel(name = "å¹²ç¥æ¶é´s", width = 15) @ApiModelProperty(value = "å¹²ç¥æ¶é´s") private Integer dryTime; /**ç¿»ææ¬¡æ°*/ @Excel(name = "ç¿»ææ¬¡æ°", width = 15) @ApiModelProperty(value = "ç¿»ææ¬¡æ°") private Integer turn; /**飿ºé¢ç*/ @Excel(name = "飿ºé¢ç", width = 15) @ApiModelProperty(value = "飿ºé¢ç") private Double fanFrequency; /**宿¶éé*/ @Excel(name = "宿¶éé", width = 15) @ApiModelProperty(value = "宿¶éé") private Double weight; /**çé£1/å·é£0*/ @Excel(name = "çé£1/å·é£0", width = 15) @ApiModelProperty(value = "çé£1/å·é£0") private Boolean wind; /**ç§æ·id*/ @Excel(name = "ç§æ·id", width = 15) @ApiModelProperty(value = "ç§æ·id") private Integer tenantId; } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryResult.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,99 @@ package org.jeecg.modules.dry.entity; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * @Description: æµè¯ç»æ * @Author: jeecg-boot * @Date: 2023-03-19 * @Version: V1.0 */ @Data @TableName("dry_result") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @ApiModel(value="dry_result对象", description="æµè¯ç»æ") public class DryResult implements Serializable { private static final long serialVersionUID = 1L; /**id*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "id") private String id; /**è¯æåç§°*/ @Excel(name = "è¯æåç§°", width = 15) @ApiModelProperty(value = "è¯æåç§°") private String herbName; /**è£ æé*/ @Excel(name = "è£ æé", width = 15) @ApiModelProperty(value = "è£ æé") private Integer feed; /**åå§éé*/ @Excel(name = "åå§éé", width = 15) @ApiModelProperty(value = "åå§éé") private Double weight; /**ç®æ æ°´å*/ @Excel(name = "ç®æ æ°´å", width = 15) @ApiModelProperty(value = "ç®æ æ°´å") private Double target; /**å·¥åå·*/ @Excel(name = "å·¥åå·", width = 15) @ApiModelProperty(value = "å·¥åå·") private String orderNo; /**å·¥åid*/ @Excel(name = "å·¥åid", width = 15) @ApiModelProperty(value = "å·¥åid") private String orderId; /**åå·¦*/ @Excel(name = "åå·¦", width = 15) @ApiModelProperty(value = "åå·¦") private Double frontLeft; /**åå·¦*/ @Excel(name = "åå·¦", width = 15) @ApiModelProperty(value = "åå·¦") private Double frontRight; /**ä¸å·¦*/ @Excel(name = "ä¸å·¦", width = 15) @ApiModelProperty(value = "ä¸å·¦") private Double middleLeft; /**ä¸å³*/ @Excel(name = "ä¸å³", width = 15) @ApiModelProperty(value = "ä¸å³") private Double middleRight; /**åå·¦*/ @Excel(name = "åå·¦", width = 15) @ApiModelProperty(value = "åå·¦") private Double backLeft; /**åå³*/ @Excel(name = "åå³", width = 15) @ApiModelProperty(value = "åå³") private Double backRight; /**å¹³å*/ @Excel(name = "å¹³å", width = 15) @ApiModelProperty(value = "å¹³å") private Double avg; /**æ¶é¿*/ @Excel(name = "æ¶é¿", width = 15) @ApiModelProperty(value = "æ¶é¿") private Double dryTime; /**è¸æ±½ï¼ç«æ¹ï¼*/ @Excel(name = "è¸æ±½ï¼ç«æ¹ï¼", width = 15) @ApiModelProperty(value = "è¸æ±½ï¼ç«æ¹ï¼") private Double steam; } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderTrendVo.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; @@ -13,6 +14,7 @@ @Data @ToString @NoArgsConstructor public class DryOrderTrendVo { /**id*/ @@ -25,8 +27,30 @@ @ApiModelProperty(value = "嫿°´ç", example = "33") private Double moisture; /**温度*/ @ApiModelProperty(value = "温度", example = "70") private Double temp; @ApiModelProperty(value = "飿ºæ¸©åº¦", example = "70") private Double fanTemp; /**é£ç®±æ¸©åº¦*/ @ApiModelProperty(value = "é£ç®±æ¸©åº¦") private Double bellowsTemp; /**æ»æ¶é´*/ @ApiModelProperty(value = "æ»æ¶é´") private Integer totalTime; /**å¹²ç¥æ¶é´s*/ @ApiModelProperty(value = "å¹²ç¥æ¶é´s") private Integer dryTime; /**ç¿»ææ¬¡æ°*/ @ApiModelProperty(value = "ç¿»ææ¬¡æ°") private Integer turn; /**飿ºé¢ç*/ @ApiModelProperty(value = "飿ºé¢ç") private Double fanFrequency; /**宿¶éé*/ @ApiModelProperty(value = "宿¶éé") private Double weight; /**çé£1/å·é£0*/ @ApiModelProperty(value = "çé£1/å·é£0") private Integer wind; /**æ¶é´*/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @@ -35,4 +59,19 @@ /**ç§æ·id*/ @ApiModelProperty(value = "ç§æ·id", example = "1000") private Integer tenantId; public DryOrderTrendVo(RealTimeDataVo realTimeDataVo) { this.fanFrequency = realTimeDataVo.getFanfrq(); this.weight = realTimeDataVo.getWeight3(); this.moisture = realTimeDataVo.getMoisture2(); this.fanTemp = realTimeDataVo.getTemp1(); this.bellowsTemp = realTimeDataVo.getTemp2(); this.dryTime = realTimeDataVo.getTime2(); this.wind = realTimeDataVo.getWind()?1:0; this.turn = realTimeDataVo.getTurntime(); this.totalTime = realTimeDataVo.getTime3(); this.orderId = realTimeDataVo.getOrderId(); this.tim = new Date(); } } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
@@ -1,17 +1,20 @@ package org.jeecg.modules.dry.vo; import cn.hutool.core.util.IdUtil; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; import java.util.List; import java.util.*; @Data @ToString @NoArgsConstructor public class DryOrderVo { /**id*/ @ApiModelProperty(value = "id") @@ -27,6 +30,9 @@ /**è¯æ*/ @ApiModelProperty(value = "è¯æ", example = "1085571074") private String herbId; /**è¯æåç§°*/ @ApiModelProperty(value="è¯æåç§°", example = "伸çè") private String herbName; /**åå§å«æ°´ç*/ @ApiModelProperty(value = "åå§å«æ°´ç", example = "75.51") private Double initial; @@ -34,8 +40,10 @@ @ApiModelProperty(value = "ç®æ 嫿°´ç", example="12") private Double target; /**ææé*/ @ApiModelProperty(value = "ææé", example = "32") private Double feed; @ApiModelProperty(value = "ææé", example = "16") private Integer feed; @ApiModelProperty(value = "åå§éé") private Double originWeight; /**é¢è®¡å¹²ç¥æ¶é´*/ @ApiModelProperty(value = "é¢è®¡å¹²ç¥æ¶é´(min)", example = "120") private Integer et; @@ -44,13 +52,31 @@ private Double yield; /**å¹²ç¥æ¶é´*/ @ApiModelProperty(value = "å¹²ç¥æ¶é´") private Integer drying; private Integer dryTime; /**ç飿¸©åº¦*/ @ApiModelProperty(value = "ç飿¸©åº¦") private Double windTemp; /**ç¯å¢æ¸©åº¦*/ @ApiModelProperty(value = "ç¯å¢æ¸©åº¦") private Double envTemp; /**ç¯å¢æ¹¿åº¦*/ @ApiModelProperty(value = "ç¯å¢æ¹¿åº¦") private Double envHum; /**è¡æå»¶æ¶ms*/ @ApiModelProperty(value = "è¡æå»¶æ¶ms") private Integer delay; /**ç¿»ææ¬¡æ°*/ @ApiModelProperty(value = "ç¿»ææ¬¡æ°") private Integer turn; /**é¢è®¡å©ä½æ¶é´*/ @ApiModelProperty(value = "é¢è®¡å©ä½æ¶é´") private Integer remain; /**设å¤*/ @ApiModelProperty(value = "设å¤", example = "S1001") private String equId; /**设å¤ç¼å·*/ @ApiModelProperty(value = "设å¤ç¼å·", example = "GM001") private String machineCode; /**车é´*/ @ApiModelProperty(value = "车é´", example = "S1") private String shopId; @@ -66,6 +92,49 @@ private String operator; @ApiModelProperty(value = "宿¶æç»æ°æ®") private List<DryOrderTrendVo> DetailList; @ApiModelProperty(value = "æç»æ°æ®å表") private List<DryOrderTrendVo> detailList = new ArrayList<>(); @ApiModelProperty(value = "æç»") private DryOrderTrendVo trendVo; private Map<Integer, Double> bellowsTemp = new HashMap<>(); /**å¼å§å¹²ç*/ private Boolean start; /**èªå¨ true/æå¨ false*/ private Boolean auto; /**æåæ å¿ true/false*/ private Boolean stop; /**ä¸ä½æº true/PLC false*/ private Boolean plcdisable; /**温度è¿ä½ true/æ£å¸¸ false*/ private Boolean lowalarm; /**çé£ true/å·é£ false*/ private Boolean wind; public DryOrderVo(RealTimeDataVo realTimeDataVo) { this.id = IdUtil.fastSimpleUUID(); this.code = realTimeDataVo.getWorkorder(); this.herbName = realTimeDataVo.getName(); this.delay = realTimeDataVo.getDelay(); this.turn = realTimeDataVo.getTurntime(); this.feed = realTimeDataVo.getWeight1(); this.originWeight = realTimeDataVo.getWeight2(); this.initial = realTimeDataVo.getMoisture1(); this.target = realTimeDataVo.getMoisture3(); this.windTemp = realTimeDataVo.getTemp3(); this.et = realTimeDataVo.getTime1(); this.dryTime = realTimeDataVo.getTime3(); this.start = realTimeDataVo.getStart(); this.auto = realTimeDataVo.getAuto(); this.stop = realTimeDataVo.getStop(); this.plcdisable = realTimeDataVo.getPlcdisable(); this.lowalarm = realTimeDataVo.getLowalarm(); this.wind = realTimeDataVo.getWind(); this.machineCode = realTimeDataVo.getMachineid(); this.tenantId = realTimeDataVo.getTenantid(); this.orderTime = new Date(); this.yield = realTimeDataVo.getWeight3(); } } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ package org.jeecg.modules.dry.vo; import lombok.Data; import lombok.ToString; @Data @ToString public class RealTimeDataVo { /**å·¥åID*/ private String orderId; /**å·¥åå·*/ private String workorder; /**é æ¹ç´¢å¼*/ private Integer index; /**è¯æåç§°*/ private String name; private Integer tenantid; private String machineid; /**è¡æå»¶æ¶*/ private Integer delay; /**ç¿»ææ¬¡æ°*/ private Integer turntime; /**飿ºé¢ç*/ private Double fanfrq; /**ææéï¼çï¼*/ private Integer weight1; /**åå§éé*/ private Double weight2; /**è¿ç¨å®æ¶éé*/ private Double weight3; /**åå§å«æ°´çï¼è®¾å®å¼ï¼*/ private Double moisture1; /**宿¶å«æ°´ç*/ private Double moisture2; /**ç®æ 嫿°´ç*/ private Double moisture3; /**飿ºæ¸©åº¦*/ private Double temp1; /**é£ç®±æ¸©åº¦*/ private Double temp2; /**温度设å®å¼*/ private Double temp3; /**æ¶é´è®¾å®å¼*/ private Integer time1; /**æ¶é´è®¡æ°*/ private Integer time2; /**æ»æ¶é´*/ private Integer time3; /**å¼å§å¹²ç*/ private Boolean start; /**èªå¨ true/æå¨ false*/ private Boolean auto; /**æåæ å¿ true/false*/ private Boolean stop; /**ä¸ä½æº true/PLC false*/ private Boolean plcdisable; /**温度è¿ä½ true/æ£å¸¸ false*/ private Boolean lowalarm; /**çé£ true/å·é£ false*/ private Boolean wind; } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHelloController.java
@@ -1,14 +1,16 @@ package org.jeecg.modules.dry.controller; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.dry.entity.DryHelloEntity; import org.jeecg.modules.dry.service.IDryHelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import lombok.extern.slf4j.Slf4j; import java.util.Map; @Api(tags = "dry示ä¾") @RestController @@ -26,4 +28,33 @@ return jeecgHelloService.hello(); } @ApiOperation(value="æ¥æ¶å®æ¶æ°æ®Str", notes="设å¤å®æ¶æ°æ®ä¸ä¼ ") @PostMapping("/sendRealTimeData") public Result<?> realTimeData(String orderVo) { System.out.println("æ¥æ¶å°å®æ¶æ°æ®ï¼" + orderVo.toString()); log.info("宿¶æ°æ®ï¼"+ orderVo.toString()); //service.saveRealTimeData(orderVo); return Result.ok(); } @ApiOperation(value="æ¥æ¶å®æ¶æ°æ®Map", notes="设å¤å®æ¶æ°æ®ä¸ä¼ ") @PostMapping("/sendRealTimeDataMap") public Result<?> realTimeDataMap(@RequestBody Map<String,Object> orderVo) { System.out.println("æ¥æ¶å°å®æ¶æ°æ®ï¼" + orderVo.toString()); log.info("宿¶æ°æ®ï¼"+ orderVo.toString()); //service.saveRealTimeData(orderVo); return Result.ok(); } @ApiOperation(value="æ¥æ¶å®æ¶æ°æ®Json", notes="设å¤å®æ¶æ°æ®ä¸ä¼ ") @PostMapping("/sendRealTimeDataJson") public Result<?> realTimeDataJson(@RequestBody JSONObject orderVo) { System.out.println("æ¥æ¶å°å®æ¶æ°æ®ï¼" + orderVo.toJSONString()); log.info("宿¶æ°æ®ï¼"+orderVo.toJSONString()); //service.saveRealTimeData(orderVo); return Result.ok(); } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryOrderController.java
@@ -1,8 +1,12 @@ package org.jeecg.modules.dry.controller; import java.util.Arrays; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSONObject; import org.jeecg.common.api.vo.Result; import org.jeecg.common.config.TenantContext; import org.jeecg.common.system.query.QueryGenerator; @@ -67,6 +71,16 @@ IPage<DryOrder> pageList = dryOrderService.page(page, queryWrapper); return Result.OK(pageList); } @ApiOperation(value="æç产æ 嵿¦è§", notes="") @GetMapping(value = "/monthOverview") public Result<?> queryMonthOverview(@RequestParam(name="month") String month) { int tenantId = oConvertUtils.getInt(TenantContext.getTenant(),0); List<String> list = dryOrderService.queryMonthOverview(month, tenantId); return Result.ok(list); } /** * æ·»å @@ -170,14 +184,5 @@ return super.importExcel(request, response, DryOrder.class); } @ApiOperation(value="æ¥æ¶å®æ¶æ°æ®", notes="设å¤å®æ¶æ°æ®ä¸ä¼ ") @PostMapping("/sendRealTimeData") public void realTimeData(@RequestBody DryOrderVo orderVo) { System.out.println("æ¥æ¶å°å®æ¶æ°æ®ï¼" + orderVo.toString()); service.saveRealTimeData(orderVo); } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryOrderTrendController.java
@@ -1,172 +1,172 @@ package org.jeecg.modules.dry.controller; import java.util.Arrays; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jeecg.common.api.vo.Result; import org.jeecg.common.config.TenantContext; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.mybatis.MybatisPlusSaasConfig; import org.jeecg.modules.dry.entity.DryOrderTrend; import org.jeecg.modules.dry.service.IDryOrderTrendService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; import org.apache.shiro.authz.annotation.RequiresPermissions; /** * @Description: å·¥åè¿ç¨è¶å¿ * @Author: jeecg-boot * @Date: 2023-03-08 * @Version: V1.0 */ @Api(tags="å·¥åè¿ç¨è¶å¿") @RestController @RequestMapping("/dry/dryOrderTrend") @Slf4j public class DryOrderTrendController extends JeecgController<DryOrderTrend, IDryOrderTrendService> { @Autowired private IDryOrderTrendService dryOrderTrendService; /** * å页å表æ¥è¯¢ * * @param dryOrderTrend * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "å·¥åè¿ç¨è¶å¿-å页å表æ¥è¯¢") @ApiOperation(value="å·¥åè¿ç¨è¶å¿-å页å表æ¥è¯¢", notes="å·¥åè¿ç¨è¶å¿-å页å表æ¥è¯¢") @GetMapping(value = "/list") public Result<IPage<DryOrderTrend>> queryPageList(DryOrderTrend dryOrderTrend, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { //------------------------------------------------------------------------------------------------ //æ¯å¦å¼å¯ç³»ç»ç®¡ç模åçå¤ç§æ·æ°æ®é离ãSAASå¤ç§æ·æ¨¡å¼ã if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ dryOrderTrend.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); } //------------------------------------------------------------------------------------------------ QueryWrapper<DryOrderTrend> queryWrapper = QueryGenerator.initQueryWrapper(dryOrderTrend, req.getParameterMap()); Page<DryOrderTrend> page = new Page<DryOrderTrend>(pageNo, pageSize); IPage<DryOrderTrend> pageList = dryOrderTrendService.page(page, queryWrapper); return Result.OK(pageList); } /** * æ·»å * * @param dryOrderTrend * @return */ @AutoLog(value = "å·¥åè¿ç¨è¶å¿-æ·»å ") @ApiOperation(value="å·¥åè¿ç¨è¶å¿-æ·»å ", notes="å·¥åè¿ç¨è¶å¿-æ·»å ") @RequiresPermissions("dry:dry_order_trend:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody DryOrderTrend dryOrderTrend) { dryOrderTrendService.save(dryOrderTrend); return Result.OK("æ·»å æåï¼"); } /** * ç¼è¾ * * @param dryOrderTrend * @return */ @AutoLog(value = "å·¥åè¿ç¨è¶å¿-ç¼è¾") @ApiOperation(value="å·¥åè¿ç¨è¶å¿-ç¼è¾", notes="å·¥åè¿ç¨è¶å¿-ç¼è¾") @RequiresPermissions("dry:dry_order_trend:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> edit(@RequestBody DryOrderTrend dryOrderTrend) { dryOrderTrendService.updateById(dryOrderTrend); return Result.OK("ç¼è¾æå!"); } /** * éè¿idå é¤ * * @param id * @return */ @AutoLog(value = "å·¥åè¿ç¨è¶å¿-éè¿idå é¤") @ApiOperation(value="å·¥åè¿ç¨è¶å¿-éè¿idå é¤", notes="å·¥åè¿ç¨è¶å¿-éè¿idå é¤") @RequiresPermissions("dry:dry_order_trend:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name="id",required=true) String id) { dryOrderTrendService.removeById(id); return Result.OK("å 餿å!"); } /** * æ¹éå é¤ * * @param ids * @return */ @AutoLog(value = "å·¥åè¿ç¨è¶å¿-æ¹éå é¤") @ApiOperation(value="å·¥åè¿ç¨è¶å¿-æ¹éå é¤", notes="å·¥åè¿ç¨è¶å¿-æ¹éå é¤") @RequiresPermissions("dry:dry_order_trend:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.dryOrderTrendService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("æ¹éå 餿å!"); } /** * éè¿idæ¥è¯¢ * * @param id * @return */ //@AutoLog(value = "å·¥åè¿ç¨è¶å¿-éè¿idæ¥è¯¢") @ApiOperation(value="å·¥åè¿ç¨è¶å¿-éè¿idæ¥è¯¢", notes="å·¥åè¿ç¨è¶å¿-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<DryOrderTrend> queryById(@RequestParam(name="id",required=true) String id) { DryOrderTrend dryOrderTrend = dryOrderTrendService.getById(id); if(dryOrderTrend ==null) { return Result.error("æªæ¾å°å¯¹åºæ°æ®"); } return Result.OK(dryOrderTrend); } /** * 导åºexcel * * @param request * @param dryOrderTrend */ @RequiresPermissions("dry:dry_order_trend:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, DryOrderTrend dryOrderTrend) { return super.exportXls(request, dryOrderTrend, DryOrderTrend.class, "å·¥åè¿ç¨è¶å¿"); } /** * éè¿excelå¯¼å ¥æ°æ® * * @param request * @param response * @return */ @RequiresPermissions("dry:dry_order_trend:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, DryOrderTrend.class); } } //package org.jeecg.modules.dry.controller; // //import java.util.Arrays; //import javax.servlet.http.HttpServletRequest; //import javax.servlet.http.HttpServletResponse; //import org.jeecg.common.api.vo.Result; //import org.jeecg.common.config.TenantContext; //import org.jeecg.common.system.query.QueryGenerator; //import org.jeecg.common.util.oConvertUtils; //import org.jeecg.config.mybatis.MybatisPlusSaasConfig; //import org.jeecg.modules.dry.entity.DryOrderTrend; //import org.jeecg.modules.dry.service.IDryOrderTrendService; // //import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; //import com.baomidou.mybatisplus.core.metadata.IPage; //import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //import lombok.extern.slf4j.Slf4j; // //import org.jeecg.common.system.base.controller.JeecgController; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.web.bind.annotation.*; //import org.springframework.web.servlet.ModelAndView; //import io.swagger.annotations.Api; //import io.swagger.annotations.ApiOperation; //import org.jeecg.common.aspect.annotation.AutoLog; //import org.apache.shiro.authz.annotation.RequiresPermissions; // // /** // * @Description: å·¥åè¿ç¨è¶å¿ // * @Author: jeecg-boot // * @Date: 2023-03-08 // * @Version: V1.0 // */ //@Api(tags="å·¥åè¿ç¨è¶å¿") //@RestController //@RequestMapping("/dry/dryOrderTrend") //@Slf4j //public class DryOrderTrendController extends JeecgController<DryOrderTrend, IDryOrderTrendService> { // @Autowired // private IDryOrderTrendService dryOrderTrendService; // // /** // * å页å表æ¥è¯¢ // * // * @param dryOrderTrend // * @param pageNo // * @param pageSize // * @param req // * @return // */ // //@AutoLog(value = "å·¥åè¿ç¨è¶å¿-å页å表æ¥è¯¢") // @ApiOperation(value="å·¥åè¿ç¨è¶å¿-å页å表æ¥è¯¢", notes="å·¥åè¿ç¨è¶å¿-å页å表æ¥è¯¢") // @GetMapping(value = "/list") // public Result<IPage<DryOrderTrend>> queryPageList(DryOrderTrend dryOrderTrend, // @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, // @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, // HttpServletRequest req) { // //------------------------------------------------------------------------------------------------ // //æ¯å¦å¼å¯ç³»ç»ç®¡ç模åçå¤ç§æ·æ°æ®é离ãSAASå¤ç§æ·æ¨¡å¼ã // if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ // dryOrderTrend.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); // } // //------------------------------------------------------------------------------------------------ // QueryWrapper<DryOrderTrend> queryWrapper = QueryGenerator.initQueryWrapper(dryOrderTrend, req.getParameterMap()); // Page<DryOrderTrend> page = new Page<DryOrderTrend>(pageNo, pageSize); // IPage<DryOrderTrend> pageList = dryOrderTrendService.page(page, queryWrapper); // return Result.OK(pageList); // } // // /** // * æ·»å // * // * @param dryOrderTrend // * @return // */ // @AutoLog(value = "å·¥åè¿ç¨è¶å¿-æ·»å ") // @ApiOperation(value="å·¥åè¿ç¨è¶å¿-æ·»å ", notes="å·¥åè¿ç¨è¶å¿-æ·»å ") // @RequiresPermissions("dry:dry_order_trend:add") // @PostMapping(value = "/add") // public Result<String> add(@RequestBody DryOrderTrend dryOrderTrend) { // dryOrderTrendService.save(dryOrderTrend); // return Result.OK("æ·»å æåï¼"); // } // // /** // * ç¼è¾ // * // * @param dryOrderTrend // * @return // */ // @AutoLog(value = "å·¥åè¿ç¨è¶å¿-ç¼è¾") // @ApiOperation(value="å·¥åè¿ç¨è¶å¿-ç¼è¾", notes="å·¥åè¿ç¨è¶å¿-ç¼è¾") // @RequiresPermissions("dry:dry_order_trend:edit") // @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) // public Result<String> edit(@RequestBody DryOrderTrend dryOrderTrend) { // dryOrderTrendService.updateById(dryOrderTrend); // return Result.OK("ç¼è¾æå!"); // } // // /** // * éè¿idå é¤ // * // * @param id // * @return // */ // @AutoLog(value = "å·¥åè¿ç¨è¶å¿-éè¿idå é¤") // @ApiOperation(value="å·¥åè¿ç¨è¶å¿-éè¿idå é¤", notes="å·¥åè¿ç¨è¶å¿-éè¿idå é¤") // @RequiresPermissions("dry:dry_order_trend:delete") // @DeleteMapping(value = "/delete") // public Result<String> delete(@RequestParam(name="id",required=true) String id) { // dryOrderTrendService.removeById(id); // return Result.OK("å 餿å!"); // } // // /** // * æ¹éå é¤ // * // * @param ids // * @return // */ // @AutoLog(value = "å·¥åè¿ç¨è¶å¿-æ¹éå é¤") // @ApiOperation(value="å·¥åè¿ç¨è¶å¿-æ¹éå é¤", notes="å·¥åè¿ç¨è¶å¿-æ¹éå é¤") // @RequiresPermissions("dry:dry_order_trend:deleteBatch") // @DeleteMapping(value = "/deleteBatch") // public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { // this.dryOrderTrendService.removeByIds(Arrays.asList(ids.split(","))); // return Result.OK("æ¹éå 餿å!"); // } // // /** // * éè¿idæ¥è¯¢ // * // * @param id // * @return // */ // //@AutoLog(value = "å·¥åè¿ç¨è¶å¿-éè¿idæ¥è¯¢") // @ApiOperation(value="å·¥åè¿ç¨è¶å¿-éè¿idæ¥è¯¢", notes="å·¥åè¿ç¨è¶å¿-éè¿idæ¥è¯¢") // @GetMapping(value = "/queryById") // public Result<DryOrderTrend> queryById(@RequestParam(name="id",required=true) String id) { // DryOrderTrend dryOrderTrend = dryOrderTrendService.getById(id); // if(dryOrderTrend ==null) { // return Result.error("æªæ¾å°å¯¹åºæ°æ®"); // } // return Result.OK(dryOrderTrend); // } // // /** // * 导åºexcel // * // * @param request // * @param dryOrderTrend // */ // @RequiresPermissions("dry:dry_order_trend:exportXls") // @RequestMapping(value = "/exportXls") // public ModelAndView exportXls(HttpServletRequest request, DryOrderTrend dryOrderTrend) { // return super.exportXls(request, dryOrderTrend, DryOrderTrend.class, "å·¥åè¿ç¨è¶å¿"); // } // // /** // * éè¿excelå¯¼å ¥æ°æ® // * // * @param request // * @param response // * @return // */ // @RequiresPermissions("dry:dry_order_trend:importExcel") // @RequestMapping(value = "/importExcel", method = RequestMethod.POST) // public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { // return super.importExcel(request, response, DryOrderTrend.class); // } // //} jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ package org.jeecg.modules.dry.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.dry.service.*; import org.jeecg.modules.dry.vo.RealTimeDataVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @Api(tags = "宿¶æ°æ®å¤çæ§å¶å¨") @RestController @RequestMapping("/dry/real") @Slf4j public class DryRealTimeDataController { @Autowired private IDryRealTimeDataService dryRealTimeDataService; @ApiOperation(value="æµè¯", notes="è¿åHello") @GetMapping("/hello") public Result<?> sayHello() { return Result.ok("Hello"); } @ApiOperation(value="æ¥æ¶å®æ¶æ°æ®Json", notes="设å¤å®æ¶æ°æ®ä¸ä¼ ") @PostMapping("/sendRealTimeDataJson") public Result<?> realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) { return dryRealTimeDataService.realTimeDataHandle(realTimeDataVo); } @ApiOperation(value="è·å设å¤å®æ¶æ°æ®", notes="éè¿ç§æ·IDå设å¤ç¼ç è·å宿¶æ°æ®") @GetMapping("/getRealTimeData") public Result<?> queryMachineRealTimeData(RealTimeDataVo realTimeDataVo) { return dryRealTimeDataService.queryMachineRealTImeData(realTimeDataVo); } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryResultController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,178 @@ package org.jeecg.modules.dry.controller; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.dry.entity.DryResult; import org.jeecg.modules.dry.service.IDryResultService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; import org.apache.shiro.authz.annotation.RequiresPermissions; /** * @Description: æµè¯ç»æ * @Author: jeecg-boot * @Date: 2023-03-19 * @Version: V1.0 */ @Api(tags="æµè¯ç»æ") @RestController @RequestMapping("/dry/dryResult") @Slf4j public class DryResultController extends JeecgController<DryResult, IDryResultService> { @Autowired private IDryResultService dryResultService; /** * å页å表æ¥è¯¢ * * @param dryResult * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "æµè¯ç»æ-å页å表æ¥è¯¢") @ApiOperation(value="æµè¯ç»æ-å页å表æ¥è¯¢", notes="æµè¯ç»æ-å页å表æ¥è¯¢") @GetMapping(value = "/list") public Result<IPage<DryResult>> queryPageList(DryResult dryResult, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<DryResult> queryWrapper = QueryGenerator.initQueryWrapper(dryResult, req.getParameterMap()); Page<DryResult> page = new Page<DryResult>(pageNo, pageSize); IPage<DryResult> pageList = dryResultService.page(page, queryWrapper); return Result.OK(pageList); } /** * æ·»å * * @param dryResult * @return */ @AutoLog(value = "æµè¯ç»æ-æ·»å ") @ApiOperation(value="æµè¯ç»æ-æ·»å ", notes="æµè¯ç»æ-æ·»å ") @RequiresPermissions("dry:dry_result:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody DryResult dryResult) { dryResultService.save(dryResult); return Result.OK("æ·»å æåï¼"); } /** * ç¼è¾ * * @param dryResult * @return */ @AutoLog(value = "æµè¯ç»æ-ç¼è¾") @ApiOperation(value="æµè¯ç»æ-ç¼è¾", notes="æµè¯ç»æ-ç¼è¾") @RequiresPermissions("dry:dry_result:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> edit(@RequestBody DryResult dryResult) { dryResultService.updateById(dryResult); return Result.OK("ç¼è¾æå!"); } /** * éè¿idå é¤ * * @param id * @return */ @AutoLog(value = "æµè¯ç»æ-éè¿idå é¤") @ApiOperation(value="æµè¯ç»æ-éè¿idå é¤", notes="æµè¯ç»æ-éè¿idå é¤") @RequiresPermissions("dry:dry_result:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name="id",required=true) String id) { dryResultService.removeById(id); return Result.OK("å 餿å!"); } /** * æ¹éå é¤ * * @param ids * @return */ @AutoLog(value = "æµè¯ç»æ-æ¹éå é¤") @ApiOperation(value="æµè¯ç»æ-æ¹éå é¤", notes="æµè¯ç»æ-æ¹éå é¤") @RequiresPermissions("dry:dry_result:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.dryResultService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("æ¹éå 餿å!"); } /** * éè¿idæ¥è¯¢ * * @param id * @return */ //@AutoLog(value = "æµè¯ç»æ-éè¿idæ¥è¯¢") @ApiOperation(value="æµè¯ç»æ-éè¿idæ¥è¯¢", notes="æµè¯ç»æ-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<DryResult> queryById(@RequestParam(name="id",required=true) String id) { DryResult dryResult = dryResultService.getById(id); if(dryResult==null) { return Result.error("æªæ¾å°å¯¹åºæ°æ®"); } return Result.OK(dryResult); } /** * 导åºexcel * * @param request * @param dryResult */ @RequiresPermissions("dry:dry_result:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, DryResult dryResult) { return super.exportXls(request, dryResult, DryResult.class, "æµè¯ç»æ"); } /** * éè¿excelå¯¼å ¥æ°æ® * * @param request * @param response * @return */ @RequiresPermissions("dry:dry_result:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, DryResult.class); } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryOrderMapper.java
@@ -1,7 +1,10 @@ package org.jeecg.modules.dry.mapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.dry.entity.DryOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; /** * @Description: å¹²ç¥å·¥å @@ -11,4 +14,5 @@ */ public interface DryOrderMapper extends BaseMapper<DryOrder> { List<String> queryMonthOverview(@Param("month") String month, @Param("tenantId") int tenantId); } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryResultMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package org.jeecg.modules.dry.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.dry.entity.DryResult; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @Description: æµè¯ç»æ * @Author: jeecg-boot * @Date: 2023-03-19 * @Version: V1.0 */ public interface DryResultMapper extends BaseMapper<DryResult> { } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryOrderMapper.xml
@@ -2,4 +2,10 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.dry.mapper.DryOrderMapper"> <select id="queryMonthOverview" resultType="java.lang.String"> select DATE_FORMAT(order_time, '%Y-%m-%d') as orderTime from dry_order where 1=1 and DATE_FORMAT(order_time, '%Y-%m') = #{month} and tenant_id = #{tenantId} group by orderTime order by orderTime desc </select> </mapper> jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryResultMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ <?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="org.jeecg.modules.dry.mapper.DryResultMapper"> </mapper> jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryOrderService.java
@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.dry.vo.DryOrderVo; import java.util.List; /** * @Description: å¹²ç¥å·¥å * @Author: jeecg-boot @@ -15,4 +17,6 @@ public interface IDryOrderService extends IService<DryOrder> { void saveRealTimeData(DryOrderVo orderVo); List<String> queryMonthOverview(String month, int tenantId); } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryOrderTrendService.java
@@ -2,6 +2,9 @@ import org.jeecg.modules.dry.entity.DryOrderTrend; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.dry.vo.DryOrderTrendVo; import java.util.List; /** * @Description: å·¥åè¿ç¨è¶å¿ @@ -11,4 +14,5 @@ */ public interface IDryOrderTrendService extends IService<DryOrderTrend> { List<DryOrderTrendVo> listByOrderId(String id); } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package org.jeecg.modules.dry.service; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.dry.vo.RealTimeDataVo; public interface IDryRealTimeDataService { Result<?> realTimeDataHandle(RealTimeDataVo realTimeDataVo); Result<?> queryMachineRealTImeData(RealTimeDataVo realTimeDataVo); } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryResultService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package org.jeecg.modules.dry.service; import org.jeecg.modules.dry.entity.DryResult; import com.baomidou.mybatisplus.extension.service.IService; /** * @Description: æµè¯ç»æ * @Author: jeecg-boot * @Date: 2023-03-19 * @Version: V1.0 */ public interface IDryResultService extends IService<DryResult> { } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryOrderServiceImpl.java
@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.List; /** * @Description: å¹²ç¥å·¥å * @Author: jeecg-boot @@ -23,4 +25,10 @@ public void saveRealTimeData(DryOrderVo orderVo) { log.info("ä¿å宿¶æ°æ®ï¼" + orderVo.toString()); } @Override public List<String> queryMonthOverview(String month, int tenantId) { return baseMapper.queryMonthOverview(month, tenantId); } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryOrderTrendServiceImpl.java
@@ -1,11 +1,17 @@ package org.jeecg.modules.dry.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.jeecg.modules.dry.entity.DryOrderTrend; import org.jeecg.modules.dry.mapper.DryOrderTrendMapper; import org.jeecg.modules.dry.service.IDryOrderTrendService; import org.jeecg.modules.dry.vo.DryOrderTrendVo; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.ArrayList; import java.util.List; /** * @Description: å·¥åè¿ç¨è¶å¿ @@ -16,4 +22,16 @@ @Service public class DryOrderTrendServiceImpl extends ServiceImpl<DryOrderTrendMapper, DryOrderTrend> implements IDryOrderTrendService { @Override public List<DryOrderTrendVo> listByOrderId(String id) { LambdaQueryWrapper<DryOrderTrend> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DryOrderTrend::getOrderId, id); queryWrapper.orderByDesc(DryOrderTrend::getWeight); List<DryOrderTrend> dryOrderTrends = baseMapper.selectList(queryWrapper); List<DryOrderTrendVo> vos = new ArrayList<>(); dryOrderTrends.stream().forEach(item -> { vos.add(BeanUtil.toBean(item, DryOrderTrendVo.class)); }); return vos; } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,214 @@ package org.jeecg.modules.dry.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.config.TenantContext; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.dry.common.CacheConstants; import org.jeecg.modules.dry.entity.DryEquipment; import org.jeecg.modules.dry.entity.DryHerb; import org.jeecg.modules.dry.entity.DryOrder; import org.jeecg.modules.dry.entity.DryOrderTrend; import org.jeecg.modules.dry.service.*; import org.jeecg.modules.dry.vo.DryOrderTrendVo; import org.jeecg.modules.dry.vo.DryOrderVo; import org.jeecg.modules.dry.vo.RealTimeDataVo; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @Slf4j @Service public class DryRealTimeDataServiceImpl implements IDryRealTimeDataService { @Autowired private IDryOrderService dryOrderService; @Autowired private IDryOrderTrendService dryOrderTrendService; @Autowired private IDryHerbService herbService; @Autowired private IDryEquipmentService equipmentService; @Autowired private RedisUtil redisUtil; @Override @Transactional public Result<?> realTimeDataHandle(RealTimeDataVo realTimeDataVo) { TenantContext.setTenant(realTimeDataVo.getTenantid()+""); log.info("宿¶æ°æ®ï¼"+realTimeDataVo.toString()); // 1 æ¥è¯¢æå建工å // 1.1 ä»redisååºå·¥åç¼å DryOrderVo orderVo = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid()+"_"+realTimeDataVo.getMachineid()); // 1.2 妿æç¼åè®°å½ if(orderVo != null && orderVo.getCode().equals(realTimeDataVo.getWorkorder())) { // 1.3 没æç¼åè®°å½åæ¥è¯¢æ°æ®åº } else { // æ ¹æ®ç§æ·idåå·¥åå·æ¥è¯¢æ°æ®åºæ¯å¦æè®°å½ï¼æåè¿åï¼æ²¡æåæ°å¢ä¸æ¡åè¿å orderVo = getOrSaveDryOrderVoDB(realTimeDataVo); } // 2 æ´æ°å·¥å宿¶æ°æ® // 2.1 å°å·¥åä¸çæ°æ®æ¿æ¢ä¸ºææ°æ°æ® realTimeDataVo.setOrderId(orderVo.getId()); orderVo.setInitial(realTimeDataVo.getMoisture1()); orderVo.setDryTime(realTimeDataVo.getTime3()); orderVo.setDelay(realTimeDataVo.getDelay()); orderVo.setTurn(realTimeDataVo.getTurntime()); orderVo.setYield(realTimeDataVo.getWeight3()); orderVo.setStart(realTimeDataVo.getStart()); orderVo.setAuto(realTimeDataVo.getAuto()); orderVo.setPlcdisable(realTimeDataVo.getPlcdisable()); orderVo.setLowalarm(realTimeDataVo.getLowalarm()); orderVo.setWind(realTimeDataVo.getWind()); DryOrderTrendVo trendVo = new DryOrderTrendVo(realTimeDataVo); // 2.2 ä¿åå·¥å嫿°´çåå æ ééåå saveOrderTrendVo(trendVo, orderVo); orderVo.setTrendVo(trendVo); orderVo.getBellowsTemp().put(realTimeDataVo.getTime3(), realTimeDataVo.getTemp2()); // 2.3 æ´æ°å°redisç¼å redisUtil.hset(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid()+"_"+realTimeDataVo.getMachineid(),orderVo, 600000); return Result.ok(); } /** * æ ¹æ®ç§æ·idåå·¥åå·æ¥è¯¢æ°æ®åºæ¯å¦æè®°å½ï¼æåè¿åï¼æ²¡æåæ°å¢ä¸æ¡ * @param realTimeDataVo * @return */ private DryOrderVo getOrSaveDryOrderVoDB(RealTimeDataVo realTimeDataVo) { DryOrderVo orderVo; LambdaQueryWrapper<DryOrder> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DryOrder::getCode, realTimeDataVo.getWorkorder()); queryWrapper.eq(DryOrder::getTenantId, realTimeDataVo.getTenantid()); // 1 æ¥è¯¢æ°æ®åº DryOrder one = dryOrderService.getOne(queryWrapper); // 2 æ°æ®åºæè®°å½ï¼æ´æ°å°ç¼å if (one != null) { // 转æ¢ä¸ºç¼åæ°æ®ç»æ orderVo = BeanUtil.toBean(one, DryOrderVo.class); if (one.getTemps() != null) { Map map = JSONObject.parseObject(one.getTemps(), new TypeReference<Map<Integer,Double>>(){}); orderVo.setBellowsTemp(map); } // æ¥è¯¢ç§°éè®°å½ï¼æ·»å å°ç¼åæ°æ®ç»æ List<DryOrderTrendVo> trendVos = dryOrderTrendService.listByOrderId(one.getId()); if (trendVos != null && trendVos.size() > 0) { DryOrderTrendVo oldVo = trendVos.get(trendVos.size() - 1); orderVo.setTrendVo(oldVo); orderVo.setDetailList(trendVos); } // 3 æ°æ®åºæ²¡æåæ°å¢ä¸æ¡æ°æ® } else { orderVo = saveNewOrder(realTimeDataVo); } return orderVo; } /** * ä¿åæ°å·¥å * @param realTimeDataVo * @return */ @NotNull private DryOrderVo saveNewOrder(RealTimeDataVo realTimeDataVo) { DryOrderVo orderVo; // æ¥è¯¢è¯æ DryHerb herb = queryHerbByIndexTenant(realTimeDataVo); // æ¥è¯¢è®¾å¤ DryEquipment equ = queryEquipmentByCodeTenant(realTimeDataVo); // å建æ°å·¥å orderVo = new DryOrderVo(realTimeDataVo); orderVo.setHerbId(herb.getId()); orderVo.setEquId(equ.getId()); DryOrder dryOrder = BeanUtil.toBean(orderVo, DryOrder.class); boolean save = dryOrderService.save(dryOrder); return orderVo; } /** * æ¥è¯¢è®¾å¤ï¼æ°è®¾å¤åæ·»å å°è®¾å¤ä¸»æ°æ® * @param realTimeDataVo * @return */ private DryEquipment queryEquipmentByCodeTenant(RealTimeDataVo realTimeDataVo) { LambdaQueryWrapper<DryEquipment> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DryEquipment::getTenantId, realTimeDataVo.getTenantid()); queryWrapper.eq(DryEquipment::getCode, realTimeDataVo.getMachineid()); DryEquipment one = equipmentService.getOne(queryWrapper); if (one == null) { one = new DryEquipment(realTimeDataVo); equipmentService.save(one); } return one; } /** * æ¥è¯¢è¯æï¼æ°è¯ææ·»å å°æ°æ®åº * @param realTimeDataVo * @return */ private DryHerb queryHerbByIndexTenant(RealTimeDataVo realTimeDataVo) { LambdaQueryWrapper<DryHerb> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DryHerb::getTenantId, realTimeDataVo.getTenantid()); queryWrapper.eq(DryHerb::getCode, realTimeDataVo.getIndex()); DryHerb one = herbService.getOne(queryWrapper); if (one == null) { one = new DryHerb(realTimeDataVo); herbService.save(one); } return one; } /** * ä¿å嫿°´çååè®°å½ * @param trendVo * @param orderVo */ private void saveOrderTrendVo(DryOrderTrendVo trendVo, DryOrderVo orderVo) { //夿 宿¶å«æ°´ç æ 宿¶ééææ²¡æååï¼æåååæ´æ° if(orderVo.getTrendVo() == null || trendVo.getWeight() < orderVo.getTrendVo().getWeight() ) { DryOrder byId = dryOrderService.getById(orderVo.getId()); // å°ææ°ç»ææ´æ°å°å·¥å if (byId != null) { BeanUtil.copyProperties(orderVo, byId); byId.setTemps(JSONObject.toJSONString(orderVo.getBellowsTemp())); dryOrderService.updateById(byId); } // ä¿å嫿°´çåå orderVo.getDetailList().add(trendVo); DryOrderTrend dryOrderTrend = BeanUtil.toBean(trendVo, DryOrderTrend.class); dryOrderTrendService.save(dryOrderTrend); } } /** * æ¥è¯¢æºå°å®æ¶æ°æ® * @param realTimeDataVo * @return */ @Override public Result<?> queryMachineRealTImeData(RealTimeDataVo realTimeDataVo) { TenantContext.setTenant(realTimeDataVo.getTenantid()+""); DryOrderVo orderVo = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid()+"_"+realTimeDataVo.getMachineid()); return Result.ok(orderVo); } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryResultServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package org.jeecg.modules.dry.service.impl; import org.jeecg.modules.dry.entity.DryResult; import org.jeecg.modules.dry.mapper.DryResultMapper; import org.jeecg.modules.dry.service.IDryResultService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @Description: æµè¯ç»æ * @Author: jeecg-boot * @Date: 2023-03-19 * @Version: V1.0 */ @Service public class DryResultServiceImpl extends ServiceImpl<DryResultMapper, DryResult> implements IDryResultService { } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,214 @@ package org.jeecg.modules.dry.websocket; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.DrySocketConst; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.dry.service.IDryRealTimeDataService; import org.jeecg.modules.dry.vo.RealTimeDataVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.util.Collection; import java.util.HashMap; import java.util.Map; @Slf4j @Component @ServerEndpoint("/drySocket/{tenantId}/{machineId}") public class DrySocket { /** * å½å session */ private Session session; /** * å½åç§æ·id */ private String tenantId; /** * 设å¤idï¼ç¨äºæ è¯åä¸ç§æ·ï¼ä¸å设å¤çæ°æ® */ private String machineId; /** * å½åsocketå¯ä¸id */ private String socketId; /** * ç§æ·è¿æ¥æ± ï¼å å«åä¸ªç§æ·çææsocketè¿æ¥ï¼ * å 为ä¸ä¸ªç§æ·å¯è½æå¼å¤ä¸ªè®¾å¤ï¼å¤ä¸ªè®¾å¤å°±ä¼æå¤ä¸ªè¿æ¥ï¼ * keyæ¯tenantIdï¼valueæ¯Map对象ï¼åMapçkeyæ¯machineIdï¼valueæ¯drySocket对象 */ private static Map<String, Map<String, DrySocket>> tenantPool = new HashMap<>(); /** * è¿æ¥æ± ï¼å 嫿æWebSocketè¿æ¥ï¼ * keyæ¯socketIdï¼valueæ¯drySocket对象 */ private static Map<String, DrySocket> machinePool = new HashMap<>(); /** * è·åæä¸ªç§æ·ææçè®¾å¤ */ public static Map<String, DrySocket> getTenantPool(String tenantId) { return tenantPool.computeIfAbsent(tenantId, k -> new HashMap<>(5)); } /** * åå½åç§æ·åéæ¶æ¯ * * @param message æ¶æ¯å 容 */ public void sendMessage(String message) { try { this.session.getAsyncRemote().sendText(message); } catch (Exception e) { log.error("ãdrySocketãæ¶æ¯åé失败ï¼" + e.getMessage()); } } /** * å°è£ æ¶æ¯json * * @param data æ¶æ¯å 容 */ public static String packageMessage(String type, Object data) { JSONObject message = new JSONObject(); message.put(DrySocketConst.TYPE, type); message.put(DrySocketConst.DATA, data); return message.toJSONString(); } /** * åæå®ç§æ·çææè®¾å¤åéæ¶æ¯ * * @param tenantId æ¥æ¶æ¶æ¯çç§æ·ID * @param message æ¶æ¯å 容 */ public static void sendMessageTo(String tenantId, String message) { Collection<DrySocket> values = getTenantPool(tenantId).values(); if (values.size() > 0) { for (DrySocket socketItem : values) { socketItem.sendMessage(message); } } else { log.warn("ãdrySocketãæ¶æ¯åé失败ï¼tenantId\"" + tenantId + "\"ä¸å卿æªå¨çº¿ï¼"); } } /** * åæå®ç§æ·çæå®è®¾å¤åéæ¶æ¯ * * @param tenantId æ¥æ¶æ¶æ¯çç§æ·ID * @param message æ¶æ¯å 容 */ public static void sendMessageTo(String tenantId, String machineId, String message) { DrySocket socketItem = getTenantPool(tenantId).get(machineId); if (socketItem != null) { socketItem.sendMessage(message); } else { log.warn("ãdrySocketãæ¶æ¯åé失败ï¼tenantId\"" + tenantId + "\"çmachineId\"" + machineId + "\"ä¸å卿æªå¨çº¿ï¼"); } } /** * åå¤ä¸ªç§æ·çææè®¾å¤åéæ¶æ¯ * * @param tenantIds æ¥æ¶æ¶æ¯çç§æ·IDæ°ç» * @param message æ¶æ¯å 容 */ public static void sendMessageTo(String[] tenantIds, String message) { for (String tenantId : tenantIds) { DrySocket.sendMessageTo(tenantId, message); } } /** * åææç§æ·çææè®¾å¤åéæ¶æ¯ * * @param message æ¶æ¯å 容 */ public static void sendMessageToAll(String message) { for (DrySocket socketItem : machinePool.values()) { socketItem.sendMessage(message); } } /** * websocket å¼å¯è¿æ¥ */ @OnOpen public void onOpen(Session session, @PathParam("tenantId") String tenantId, @PathParam("machineId") String machineId) { try { this.tenantId = tenantId; this.machineId = machineId; this.socketId = tenantId + machineId; this.session = session; machinePool.put(this.socketId, this); getTenantPool(tenantId).put(this.machineId, this); log.info("ãdrySocketãææ°çè¿æ¥ï¼æ»æ°ä¸º:" + machinePool.size()); } catch (Exception ignored) { } } /** * websocket æå¼è¿æ¥ */ @OnClose public void onClose() { try { machinePool.remove(this.socketId); getTenantPool(this.tenantId).remove(this.machineId); log.info("ãdrySocketãè¿æ¥æå¼ï¼æ»æ°ä¸º:" + machinePool.size()); } catch (Exception ignored) { } } /** * websocket æ¶å°æ¶æ¯ */ @OnMessage public void onMessage(String message) { log.info("ãdrySocketãonMessage:" + message); IDryRealTimeDataService realTimeDataService = SpringContextUtils.getBean(IDryRealTimeDataService.class); JSONObject json; try { json = JSON.parseObject(message); } catch (Exception e) { log.warn("ãdrySocketãæ¶å°ä¸åæ³çæ¶æ¯:" + message); return; } String type = json.getString(DrySocketConst.TYPE); switch (type) { // å¿è·³æ£æµ case DrySocketConst.TYPE_HB: this.sendMessage(DrySocket.packageMessage(type, true)); break; // 宿¶æ°æ®å¤ç case DrySocketConst.TYPE_RDT: Object o = json.get(DrySocketConst.DATA); RealTimeDataVo realTimeDataVo = BeanUtil.toBean(o, RealTimeDataVo.class); realTimeDataService.realTimeDataHandle(realTimeDataVo); break; default: log.warn("ãdrySocketãæ¶å°ä¸è¯å«çæ¶æ¯ç±»å:" + type); break; } } } jeecg-module-dry/jeecg-module-dry-start/src/main/resources/logback-spring.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,77 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--å®ä¹æ¥å¿æä»¶çåå¨å°å --> <property name="LOG_HOME" value="../logs" /> <!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />--> <!-- æ§å¶å°è¾åº --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--æ ¼å¼åè¾åºï¼%dè¡¨ç¤ºæ¥æï¼%thread表示线ç¨åï¼%-5levelï¼çº§å«ä»å·¦æ¾ç¤º5个å符宽度%msgï¼æ¥å¿æ¶æ¯ï¼%næ¯æ¢è¡ç¬¦ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern> </encoder> </appender> <!-- æç §æ¯å¤©çææ¥å¿æä»¶ --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--æ¥å¿æä»¶è¾åºçæä»¶å --> <FileNamePattern>${LOG_HOME}/herb-dry-%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--æ¥å¿æä»¶ä¿çå¤©æ° --> <MaxHistory>30</MaxHistory> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--æ ¼å¼åè¾åºï¼%dè¡¨ç¤ºæ¥æï¼%thread表示线ç¨åï¼%-5levelï¼çº§å«ä»å·¦æ¾ç¤º5个å符宽度%msgï¼æ¥å¿æ¶æ¯ï¼%næ¯æ¢è¡ç¬¦ --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern> </encoder> </appender> <!-- çæ error htmlæ ¼å¼æ¥å¿å¼å§ --> <appender name="HTML" class="ch.qos.logback.core.FileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!--设置æ¥å¿çº§å«,è¿æ»¤æinfoæ¥å¿,åªè¾å ¥erroræ¥å¿--> <level>ERROR</level> </filter> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="ch.qos.logback.classic.html.HTMLLayout"> <pattern>%p%d%msg%M%F{32}%L</pattern> </layout> </encoder> <file>${LOG_HOME}/error-log.html</file> </appender> <!-- çæ error htmlæ ¼å¼æ¥å¿ç»æ --> <!-- æ¯å¤©çæä¸ä¸ªhtmlæ ¼å¼çæ¥å¿å¼å§ --> <appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--æ¥å¿æä»¶è¾åºçæä»¶å --> <FileNamePattern>${LOG_HOME}/herb-dry-%d{yyyy-MM-dd}.%i.html</FileNamePattern> <!--æ¥å¿æä»¶ä¿çå¤©æ° --> <MaxHistory>30</MaxHistory> <MaxFileSize>10MB</MaxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="ch.qos.logback.classic.html.HTMLLayout"> <pattern>%p%d%msg%M%F{32}%L</pattern> </layout> </encoder> </appender> <!-- æ¯å¤©çæä¸ä¸ªhtmlæ ¼å¼çæ¥å¿ç»æ --> <!--myibatis log configure --> <logger name="com.apache.ibatis" level="TRACE" /> <logger name="java.sql.Connection" level="DEBUG" /> <logger name="java.sql.Statement" level="DEBUG" /> <logger name="java.sql.PreparedStatement" level="DEBUG" /> <!-- æ¥å¿è¾åºçº§å« --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="HTML" /> <appender-ref ref="FILE_HTML" /> </root> </configuration>