diff --git b/pom.xml a/pom.xml new file mode 100644 index 0000000..7920aab --- /dev/null +++ a/pom.xml @@ -0,0 +1,163 @@ + + + 4.0.0 + + + com.zteits + zteits-maven-parent + 0.0.1-SNAPSHOT + ../zteits-cloud/zteits-maven-parent/pom.xml + + + zteits-park-portal + zteits-park-portal + http://maven.apache.org + + UTF-8 + + + + + com.zteits + zteits-framework + + + com.zteits + zteits-tool-swagger + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + com.alibaba + dubbo + + + org.springframework + spring + + + + + org.apache.zookeeper + zookeeper + + + log4j + log4j + + + + + com.alibaba + fastjson + + + mysql + mysql-connector-java + runtime + + + com.alibaba + druid + + + org.mybatis + mybatis + + + com.github.sgroschupf + zkclient + + + + org.springframework.session + spring-session + + + javax.servlet + servlet-api + 3.0-alpha-1 + + + org.aspectj + aspectjrt + + + org.aspectj + aspectjweaver + + + org.springframework.boot + spring-boot-starter-security + + + + org.apache.httpcomponents + httpclient + + + + org.springframework.boot + spring-boot-starter-actuator + + + + commons-codec + commons-codec + + + + org.springframework.boot + spring-boot-starter-websocket + + + org.webjars + webjars-locator + + + org.webjars + sockjs-client + 1.0.2 + + + org.webjars + stomp-websocket + 2.3.3 + + + org.webjars + bootstrap + 3.3.7 + + + org.webjars + jquery + 3.1.0 + + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.zteits.irain.portal.ParkPortalApplication + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + \ No newline at end of file diff --git b/src/main/java/com/zteits/irain/portal/ParkPortalApplication.java a/src/main/java/com/zteits/irain/portal/ParkPortalApplication.java new file mode 100644 index 0000000..f5c75cb --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/ParkPortalApplication.java @@ -0,0 +1,47 @@ +package com.zteits.irain.portal; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.context.annotation.ImportResource; + +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: IRainPortalApplication.java + * @Description: + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 上午11:44:00 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +@SpringBootApplication +@ImportResource(value={"classpath:dubbo/dubbo-park-consumer.xml"}) +@EnableAspectJAutoProxy +@ComponentScan(basePackages={"com.zteits.irain.portal","com.clouds.common.redis","com.clouds.common.web"}) +public class ParkPortalApplication { + + public static void main(String[] args) { + SpringApplication.run(ParkPortalApplication.class, args); + + + } + @Bean + public EmbeddedServletContainerFactory servletContainer() { + TomcatEmbeddedServletContainerFactory factory = + new TomcatEmbeddedServletContainerFactory(); + return factory; + } + + + +} diff --git b/src/main/java/com/zteits/irain/portal/common/AESPlus.java a/src/main/java/com/zteits/irain/portal/common/AESPlus.java new file mode 100644 index 0000000..ce8971d --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/common/AESPlus.java @@ -0,0 +1,64 @@ +package com.zteits.irain.portal.common; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; +/** + * + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: AESPlus.java + * @Description: 艾润 使用的aes加密算法 不够完美 请使用 AESUtils + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月24日 下午5:26:10 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月24日 wangbiao v1.0.0 创建 + */ +public class AESPlus { + + public static String encrypt(String strKey, String strIn) throws Exception { + SecretKeySpec skeySpec = getKey(strKey); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + IvParameterSpec iv = new IvParameterSpec(strKey.getBytes()); + cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); + byte[] encrypted = cipher.doFinal(strIn.getBytes()); + return Base64.encodeBase64String(encrypted); + } + + public static String decrypt(String strKey, String strIn) throws Exception { + SecretKeySpec skeySpec = getKey(strKey); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + IvParameterSpec iv = new IvParameterSpec(strKey.getBytes()); + cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); + byte[] encrypted1 = Base64.decodeBase64(strIn); + byte[] original = cipher.doFinal(encrypted1); + String originalString = new String(original); + return originalString; + } + + private static SecretKeySpec getKey(String strKey) throws Exception { + byte[] arrBTmp = strKey.getBytes(); + byte[] arrB = new byte[16]; + for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) { + arrB[i] = arrBTmp[i]; + } + SecretKeySpec skeySpec = new SecretKeySpec(arrB, "AES"); + return skeySpec; + } + + public static void main(String[] args) throws Exception { + String key = "123456789ABCDEFG"; + String content = "{\"aaa\":1,\"bbb\":\"dd\",\"ccc\":\"subing\",\"dddd\":23123}"; + + String jiamijieguo = AESPlus.encrypt(key,content); + System.out.println("jiemi:"+jiamijieguo); + String jiemijieguo = AESPlus.decrypt(key,jiamijieguo); + System.out.println("jiemi:"+jiemijieguo); + } +} \ No newline at end of file diff --git b/src/main/java/com/zteits/irain/portal/common/HttpClientTutorial.java a/src/main/java/com/zteits/irain/portal/common/HttpClientTutorial.java new file mode 100644 index 0000000..97623f7 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/common/HttpClientTutorial.java @@ -0,0 +1,182 @@ +package com.zteits.irain.portal.common; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.springframework.util.CollectionUtils; + +import com.alibaba.fastjson.JSONObject; + +public class HttpClientTutorial { + private static PoolingHttpClientConnectionManager cm; + private static String EMPTY_STR = ""; + private static String UTF_8 = "UTF-8"; + + private static void init() { + if (cm == null) { + cm = new PoolingHttpClientConnectionManager(); + cm.setMaxTotal(50);// 整个连接池最大连接数 + cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2 + } + } + + /** + * 通过连接池获取HttpClient + * + * @return + */ + private static CloseableHttpClient getHttpClient() { + init(); + return HttpClients.custom().setConnectionManager(cm).build(); + } + + /** + * + * @param url + * @return + */ + public static String httpGetRequest(String url) { + HttpGet httpGet = new HttpGet(url); + return getResult(httpGet); + } + + public static String httpGetRequest(String url, Map params) throws URISyntaxException { + URIBuilder ub = new URIBuilder(); + ub.setPath(url); + + ArrayList pairs = covertParams2NVPS(params); + ub.setParameters(pairs); + + HttpGet httpGet = new HttpGet(ub.build()); + return getResult(httpGet); + } + + public static String httpGetRequest(String url, Map headers, Map params) + throws URISyntaxException { + URIBuilder ub = new URIBuilder(); + ub.setPath(url); + + ArrayList pairs = covertParams2NVPS(params); + ub.setParameters(pairs); + + HttpGet httpGet = new HttpGet(ub.build()); + for (Map.Entry param : headers.entrySet()) { + httpGet.addHeader(param.getKey(), String.valueOf(param.getValue())); + } + return getResult(httpGet); + } + + public static String httpPostRequest(String url) { + HttpPost httpPost = new HttpPost(url); + return getResult(httpPost); + } + + public static String httpPostRequest(String url, Map params) throws UnsupportedEncodingException { + HttpPost httpPost = new HttpPost(url); + ArrayList pairs = covertParams2NVPS(params); + httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8)); + return getResult(httpPost); + } + + + public static String httpPostRequest(String url, Map headers, String paramStr) throws UnsupportedEncodingException { + HttpPost httpPost = new HttpPost(url); + + if(!CollectionUtils.isEmpty(headers)){ + for (Map.Entry param : headers.entrySet()) { + httpPost.addHeader(param.getKey(), String.valueOf(param.getValue())); + } + } + if (null != paramStr) { + //解决中文乱码问题 + StringEntity entity = new StringEntity(paramStr, "utf-8"); + entity.setContentEncoding("UTF-8"); + entity.setContentType("application/json"); + httpPost.setEntity(entity); + } + return getResult(httpPost); + } + + + + public static String httpPostRequest(String url, Map headers, JSONObject jsonParam) throws UnsupportedEncodingException { + return httpPostRequest(url,headers,jsonParam.toJSONString()); + } + + public static String httpPostRequest(String url, JSONObject jsonParam) throws UnsupportedEncodingException { + return httpPostRequest(url,null,jsonParam); + } + + public static String httpPostRequest(String url, Map headers, Map params) + throws UnsupportedEncodingException { + HttpPost httpPost = new HttpPost(url); + + for (Map.Entry param : headers.entrySet()) { + httpPost.addHeader(param.getKey(), String.valueOf(param.getValue())); + } + + ArrayList pairs = covertParams2NVPS(params); + httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8)); + + return getResult(httpPost); + } + + private static ArrayList covertParams2NVPS(Map params) { + ArrayList pairs = new ArrayList(); + for (Map.Entry param : params.entrySet()) { + pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue()))); + } + + return pairs; + } + + /** + * 处理Http请求 + * + * @param request + * @return + */ + private static String getResult(HttpRequestBase request) { + // CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpClient httpClient = getHttpClient(); + try { + CloseableHttpResponse response = httpClient.execute(request); + // response.getStatusLine().getStatusCode(); + HttpEntity entity = response.getEntity(); + if (entity != null) { + // long len = entity.getContentLength();// -1 表示长度未知 + String result = EntityUtils.toString(entity); + response.close(); + // httpClient.close(); + return result; + } + } catch (ClientProtocolException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + + } + + return EMPTY_STR; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/config/FilterRegistrationConfig.java a/src/main/java/com/zteits/irain/portal/config/FilterRegistrationConfig.java new file mode 100644 index 0000000..1a6ec2c --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/FilterRegistrationConfig.java @@ -0,0 +1,22 @@ +package com.zteits.irain.portal.config; + +import com.zteits.irain.portal.config.filter.ResponseHeaderFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FilterRegistrationConfig { + /** + * 添加响应请求头Filter + * @return + * 2017年5月8日 zhaowg + */ + @Bean + public FilterRegistrationBean ResponseHeaderFilterRegistration() { + FilterRegistrationBean registration = new FilterRegistrationBean(new ResponseHeaderFilter()); + registration.addServletRegistrationBeans(); + registration.addUrlPatterns("/*"); + return registration; + } +} diff --git b/src/main/java/com/zteits/irain/portal/config/RedisMsgListenerContainer.java a/src/main/java/com/zteits/irain/portal/config/RedisMsgListenerContainer.java new file mode 100644 index 0000000..fd7214e --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/RedisMsgListenerContainer.java @@ -0,0 +1,44 @@ +package com.zteits.irain.portal.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.PatternTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; + +import com.clouds.common.constants.RedisKeyEnum; +import com.zteits.irain.portal.config.listener.FreeBrethsListener; + +/** + * redis 消息队列监听容器 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: RedisMessageListenerContainer.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月7日 下午3:06:30 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月7日 zhaowg v1.0.0 创建 + */ +@Configuration +public class RedisMsgListenerContainer { + + /** + * 空闲车位监听容器 + * @param connectionFactory + * @param brethsListener + * @return + * 2017年6月7日 zhaowg + */ + @Bean + RedisMessageListenerContainer freeBrethscontainer(RedisConnectionFactory connectionFactory,FreeBrethsListener brethsListener) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + container.addMessageListener(brethsListener, new PatternTopic(RedisKeyEnum.PARK_FREEBERTH_PLNO_FREEBERTH_TOPIC.key())); + return container; + } +} diff --git b/src/main/java/com/zteits/irain/portal/config/WebSecurityConfig.java a/src/main/java/com/zteits/irain/portal/config/WebSecurityConfig.java new file mode 100644 index 0000000..63d5dfc --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/WebSecurityConfig.java @@ -0,0 +1,31 @@ +package com.zteits.irain.portal.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: WebSecurityConfig.java + * @Description: srping boot 安全控制 + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 下午4:22:27 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +@Configuration +@EnableWebSecurity +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + http.headers() + .frameOptions().sameOrigin() + .httpStrictTransportSecurity().disable(); + http.csrf().disable(); + } +} diff --git b/src/main/java/com/zteits/irain/portal/config/WebSocketConfig.java a/src/main/java/com/zteits/irain/portal/config/WebSocketConfig.java new file mode 100644 index 0000000..712c322 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/WebSocketConfig.java @@ -0,0 +1,38 @@ +package com.zteits.irain.portal.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { + /** + * 配置了一个简单的消息代理,如果不重载,默认情况下回自动配置一个简单的内存消息代理,用来处理以"/topic"为前缀的消息。这里重载configureMessageBroker()方法, + * 消息代理将会处理前缀为"/topic"和"/queue"的消息。 + * @param registry + */ + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + //这句话表示在topic和queue这两个域上可以向客户端发消息。 + config.enableSimpleBroker("/queue","/topic"); + //这句话表示给指定用户发送一对一的主题前缀是"/user"。 + config.setUserDestinationPrefix("/user"); + //这句话表示客户单向服务器端发送时的主题上面需要加"/park"作为前缀 + config.setApplicationDestinationPrefixes("/park"); + } + /** + * 将"/park-websocket"路径注册为STOMP端点,这个路径与发送和接收消息的目的路径有所不同,这是一个端点,客户端在订阅或发布消息到目的地址前,要连接该端点, + * 即用户发送请求url="/applicationName/park-websocket"与STOMP server进行连接。之后再转发到订阅url; + * PS:端点的作用——客户端在订阅或发布消息到目的地址前,要连接该端点。 + * @param stompEndpointRegistry + */ + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + //这个和客户端创建连接时的url有关,其中setAllowedOrigins()方法表示允许连接的域名,withSockJS()方法表示支持以SockJS方式连接服务器。 + registry.addEndpoint("/park-websocket").setAllowedOrigins("*").withSockJS(); + } + +} \ No newline at end of file diff --git b/src/main/java/com/zteits/irain/portal/config/filter/ResponseHeaderFilter.java a/src/main/java/com/zteits/irain/portal/config/filter/ResponseHeaderFilter.java new file mode 100644 index 0000000..6ae0fe5 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/filter/ResponseHeaderFilter.java @@ -0,0 +1,47 @@ +package com.zteits.irain.portal.config.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; + +/** + * 添加响应统一请求头 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ResponseHeaderFilter.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月8日 下午3:17:18 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月8日 zhaowg v1.0.0 创建 + */ +public class ResponseHeaderFilter implements Filter{ + + @Override + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + HttpServletResponse res = (HttpServletResponse) response; + res.addHeader("Access-Control-Allow-Origin", "*"); + res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); + res.addHeader("Access-Control-Allow-Headers", "Content-Type, X-Auth-Token, x-requested-with ,Authorization"); + chain.doFilter(request, response); + } + + @Override + public void destroy() { + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } +} diff --git b/src/main/java/com/zteits/irain/portal/config/listener/FreeBrethsListener.java a/src/main/java/com/zteits/irain/portal/config/listener/FreeBrethsListener.java new file mode 100644 index 0000000..d2b6837 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/listener/FreeBrethsListener.java @@ -0,0 +1,67 @@ +package com.zteits.irain.portal.config.listener; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.dto.run.dto.ParkSpaceStateDTO; +import com.zteits.irain.portal.service.interfaces.induction.InductionService; +import com.zteits.irain.portal.service.interfaces.induction.param.DoLevelTwoAndThreeInductionReleaseBatchRequest; +import com.zteits.irain.portal.service.interfaces.induction.param.InductionRelease; + +/** + * 空闲车位监听器
+ * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: FreeBrethsListener.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月7日 下午2:41:39 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月7日 zhaowg v1.0.0 创建 + */ +@Component +public class FreeBrethsListener implements MessageListener{ + private static final Logger logger = LoggerFactory.getLogger(FreeBrethsListener.class); + @Autowired + private InductionService inductionService; + @Autowired + private RedisTemplate redisTemplate; + @Override + public void onMessage(Message message, byte[] pattern) { + logger.info("空闲车位消息队列,接收到的数据为:"+new String(message.getBody())); + JSONObject jsonObject = (JSONObject)redisTemplate.getValueSerializer().deserialize(message.getBody()); + //空闲车位数 + Integer freeBerths = jsonObject.getInteger("freeBerths"); + //停车场编号 + String plNo = jsonObject.getString("plNo"); + + DoLevelTwoAndThreeInductionReleaseBatchRequest releaseBatchRequest = new DoLevelTwoAndThreeInductionReleaseBatchRequest(); + List list = new ArrayList<>(); + //传固定值 + InductionRelease inductionRelease = new InductionRelease(); + inductionRelease.setOwner_code("1001"); + inductionRelease.setRange_code(plNo); + inductionRelease.setBerth_left(String.valueOf(freeBerths)); + inductionRelease.setParking_code(plNo); + list.add(inductionRelease); + releaseBatchRequest.setJsonStr(list); + //开始调用二级诱导批量发布接口 + inductionService.doLevelTwoAndThreeInductionReleaseBatch(releaseBatchRequest); + } +} diff --git b/src/main/java/com/zteits/irain/portal/config/session/HttpSessionConfig.java a/src/main/java/com/zteits/irain/portal/config/session/HttpSessionConfig.java new file mode 100644 index 0000000..5d23422 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/config/session/HttpSessionConfig.java @@ -0,0 +1,30 @@ +package com.zteits.irain.portal.config.session; + +import org.springframework.context.annotation.Bean; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import org.springframework.session.web.http.HeaderHttpSessionStrategy; +import org.springframework.session.web.http.HttpSessionStrategy; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.oauth.portal.config.session + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/5/16 下午9:23 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/5/16 atao v1.0.0 创建 + */ +//maxInactiveIntervalInSeconds +@EnableRedisHttpSession +public class HttpSessionConfig { + + @Bean + public HttpSessionStrategy httpSessionStrategy() { + return new HeaderHttpSessionStrategy(); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/constant/IRainResultEnum.java a/src/main/java/com/zteits/irain/portal/constant/IRainResultEnum.java new file mode 100644 index 0000000..10347c1 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/constant/IRainResultEnum.java @@ -0,0 +1,39 @@ +package com.zteits.irain.portal.constant; + +import com.zteits.clouds.api.apibase.bean.ErrorCode; + +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: IRainResultEnum.java + * @Description: + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 下午2:30:53 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +public enum IRainResultEnum implements ErrorCode{ + /**接口调用成功*/ + SUCCESS("ok", "success"); + + private String code; + private String msg; + + private IRainResultEnum(String code, String name) { + this.code = code; + this.msg = name; + } + @Override + public String getCode() { + return code; + } + + @Override + public String getMsg() { + return msg; + } +} diff --git b/src/main/java/com/zteits/irain/portal/constant/ParkConstant.java a/src/main/java/com/zteits/irain/portal/constant/ParkConstant.java new file mode 100644 index 0000000..960352a --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/constant/ParkConstant.java @@ -0,0 +1,102 @@ +package com.zteits.irain.portal.constant; + +import java.util.HashMap; +import java.util.Map; + +public class ParkConstant { + /**接口表相关常量*/ + public static class InterfaceLog{ + + public static class Type{ + /**进场*/ + public static final int TYPE_IN_PARKING = 1; + /**出场*/ + public static final int TYPE_OUT_PARKING = 2; + } + + public static class Status{ + /**成功*/ + public static final Byte SUCCESS = 1; + /**失败*/ + public static final Byte FAIL = 0; + } + + public static class FromType{ + /**艾润*/ + public static final int IRAIN = 1; + /**青岛*/ + public static final int QINGDAO = 2; + /**捷商*/ + public static final int JIESHANG =3; + } + + public static class SourceType{ + /**道闸*/ + public static final int GATEWAY = 1; + /**地磁*/ + public static final int GEO = 2; + } + } + + /**停车场经纬度表相关常量*/ + public static class ParkingLotGeo{ + + public static class GeoType{ + /**停车场坐标*/ + public static final int TYPE_PARKINGLOT = 1; + /**停车场入口坐标*/ + public static final int TYPE_PARKINGLOT_IN = 2; + } + + } + public static class ParkingLotUseStatistic{ + //统计类型:1:每20分钟;2:每1小时;3:每天 + public static class StatisticType{ + public static final int PER20MINUTE = 1; + public static final int PER1HOUR = 2; + public static final int PER1DAY = 3; + } + //比率:1:空置率,2:周转率 + public static class BerthRatioType{ + public static final int FREE = 1; + public static final int TURNOVER = 2; + } + } + /**青岛进出场上报相关常量*/ + public static class QDInOutParkLot{ + public static class InOutType{ + /**进场*/ + public static final String INPARKLOT ="1"; + /**出场-正常*/ + public static final String OUTPARKLOT_NOMAL = "2"; + /**出场-逃逸*/ + public static final String OUTPARKLOT_ESCAPE = "3"; + } + } + /**停车场设备表相关常量*/ + public static class ParkingLotEqp{ + + public static class EqpType{ + /**地磁*/ + public static final int GEO = 1; + /**pos机*/ + public static final int POS = 2; + } + + } + /**空闲车位表相关常量*/ + public static class ParkFreeBerths{ + /**更新空闲车位方式*/ + public static class UpdateMethod{ + /**自己根据进出场计算*/ + public static final String AUTOCALC = "AUTOCALC"; + /**根据上报的空闲车位直接覆盖*/ + public static final String COVER = "COVER"; + } + } + /**城市ID*/ + public static class CityId{ + /**赤峰*/ + public static final Long CHIFENG = 91L; + } +} diff --git b/src/main/java/com/zteits/irain/portal/service/impl/induction/InductionServiceImpl.java a/src/main/java/com/zteits/irain/portal/service/impl/induction/InductionServiceImpl.java new file mode 100644 index 0000000..8802aa2 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/impl/induction/InductionServiceImpl.java @@ -0,0 +1,116 @@ +package com.zteits.irain.portal.service.impl.induction; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.irain.portal.common.HttpClientTutorial; +import com.zteits.irain.portal.service.interfaces.induction.InductionService; +import com.zteits.irain.portal.service.interfaces.induction.param.DoLevelTwoAndThreeInductionReleaseBatchRequest; +import com.zteits.irain.portal.service.interfaces.induction.param.InductionLevelOneShow; +import com.zteits.irain.portal.service.interfaces.induction.param.InductionResponse; + +/** + * 对接智慧停车诱导服务管理系统 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InductionService.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月24日 上午9:28:48 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月24日 zhaowg v1.0.0 创建 + */ +@Component +public class InductionServiceImpl implements InductionService{ + + private static final Logger logger = LoggerFactory.getLogger(InductionServiceImpl.class); + + /**一级诱导回显地址*/ + @Value("${induction.showLevelOneInductionReleaseUrl}") + private String showLevelOneInductionReleaseUrl; + + /**二级三级诱导批量发布地址*/ + @Value("${induction.doLevelTwoAndThreeInductionReleaseBatchUrl}") + private String doLevelTwoAndThreeInductionReleaseBatchUrl; + + @Override + public BizResultVO doLevelTwoAndThreeInductionReleaseBatch(DoLevelTwoAndThreeInductionReleaseBatchRequest request) { + logger.info("开始调用二级、三级诱导批量发布接口"); + BizResultVO result = new BizResultVO<>(); + try { + Map params = new HashMap<>(); + params.put("owner_code", request.getOwner_code()); + params.put("pwd", request.getPwd()); + params.put("jsonStr", JSONObject.toJSONString(request.getJsonStr())); + logger.info("二级、三级诱导批量发布接口地址:"+doLevelTwoAndThreeInductionReleaseBatchUrl); + logger.info("二级、三级诱导批量发布接口请求参数:" + JSONObject.toJSONString(params)); + String rs = HttpClientTutorial.httpPostRequest(doLevelTwoAndThreeInductionReleaseBatchUrl, params); + logger.info("二级、三级诱导批量发布接口响应参数:" + rs); + InductionResponse inductionResponse = JSONObject.parseObject(rs, InductionResponse.class); + String code = inductionResponse.getSys_code(); + if("100".equals(code)){ + result.setCode(ErrorType.BIZ_SUCCESS.getCode()); + result.setMsg(ErrorType.BIZ_SUCCESS.getMsg()); + }else{ + result.setCode(code); + result.setMsg(inductionResponse.getSys_msg()); + } + + } catch (Exception e) { + logger.error("调用二级、三级诱导批量发布接口报错:",e); + result.setCode(ErrorType.BIZ_ERROR.getCode()); + result.setMsg(ErrorType.BIZ_ERROR.getMsg()); + } + logger.info("调用二级、三级诱导批量发布接口成功,返回封装后的数据:"+JSONObject.toJSONString(result)); + return result; + } + + @Override + public BizResultVO showLevelOneInductionRelease(String eqpCode) { + logger.info("开始调用一级诱导发布回显接口"); + BizResultVO result = new BizResultVO<>(); + try { + Map params = new HashMap<>(); + //TODO accessToken获取 + params.put("accessToken", "ffa51bdd90e86577812dddff0829941ca9"); + params.put("eqpCode", eqpCode); + logger.info("一级诱导发布回显接口地址:"+showLevelOneInductionReleaseUrl); + logger.info("一级诱导发布回显接口请求参数:" + JSONObject.toJSONString(params)); + String rs = HttpClientTutorial.httpPostRequest(showLevelOneInductionReleaseUrl, params); + logger.info("一级诱导发布回显接口响应参数:" + rs); + InductionResponse inductionResponse = JSONObject.parseObject(rs, InductionResponse.class); + + String code = inductionResponse.getSys_code(); + if("100".equals(code)){ + result.setCode(ErrorType.BIZ_SUCCESS.getCode()); + result.setMsg(ErrorType.BIZ_SUCCESS.getMsg()); + //获取数据 + String dataStr = JSONObject.toJSONString(inductionResponse.getData()); + InductionLevelOneShow inductionLevelOneShow = JSONObject.parseObject(dataStr, InductionLevelOneShow.class); + result.setData(inductionLevelOneShow); + }else{ + result.setCode(code); + result.setMsg(inductionResponse.getSys_msg()); + } + + } catch (Exception e) { + logger.error("调用一级诱导发布回显接口报错:",e); + result.setCode(ErrorType.BIZ_ERROR.getCode()); + result.setMsg(ErrorType.BIZ_ERROR.getMsg()); + } + logger.info("调用一级诱导发布回显接口成功,返回封装后的数据:"+JSONObject.toJSONString(result)); + return result; + } +} diff --git b/src/main/java/com/zteits/irain/portal/service/impl/inoutparklot/InOutParkLotReportServiceImpl.java a/src/main/java/com/zteits/irain/portal/service/impl/inoutparklot/InOutParkLotReportServiceImpl.java new file mode 100644 index 0000000..783b0fa --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/impl/inoutparklot/InOutParkLotReportServiceImpl.java @@ -0,0 +1,223 @@ +package com.zteits.irain.portal.service.impl.inoutparklot; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.utils.BeanValidatorsUtils; +import com.clouds.common.utils.ResultUtils; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.InParkingRequest; +import com.zteits.clouds.api.dto.park.param.OutParkingRequest; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkOutNoRequest; +import com.zteits.clouds.api.dto.park.param.UpdateParkingPlaceStatusRequest; +import com.zteits.clouds.api.service.park.IInOutParkingService; +import com.zteits.clouds.api.service.park.ParkingLotBerthsService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.clouds.api.service.pay.ParkOrderService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.constant.ParkConstant.InterfaceLog; +import com.zteits.irain.portal.service.interfaces.inoutparklot.InOutParkLotReportService; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordInParkLotRequest; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordOutParkLotRequest; +import com.zteits.irain.portal.service.interfaces.parklotidleberths.ParkLotIdleBerthsService; + +@Component +public class InOutParkLotReportServiceImpl implements InOutParkLotReportService { + + private static final Logger logger = LoggerFactory.getLogger(InOutParkLotReportServiceImpl.class); + @Value("${project.syscode}") + private String sysCode; + /**进出场记录*/ + @Autowired + private IInOutParkingService iInOutParkingService; + /**停车场订单service*/ + @Autowired + private ParkOrderService parkOrderService; + /**空闲车位*/ + @Autowired + private ParkLotIdleBerthsService lotIdleBerthsService; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + + /** + * 车位操作服务 + */ + @Autowired + private ParkingLotBerthsService parkinglotBerthsService; + + @Override + public Long InParkLotRecord(RecordInParkLotRequest request) throws Exception { + BeanValidatorsUtils.validateWithException(request); + BaseInfo baseInfo = new BaseInfo(); + + InParkingRequest InParkingRequest = request.getInParkLotReq(); + InParkingRequest.setBaseRequest(baseInfo); + InParkingRequest.setSysCode(request.getSysCode()); + InParkingRequest.setFromType(request.getFromType()); + InParkingRequest.setSourceType(request.getSourceType()); + //设置停车场编号和名称 + ParkingLotDTO parkingLotDTO = this.getOurParkLotInfoByOutNo(request.getInParkLotReq().getParkCode()); + InParkingRequest.setPlNo(parkingLotDTO.getPlNo()); + InParkingRequest.setPlName(parkingLotDTO.getPlName()); + logger.info("更新空闲车位"); + int totalFreeBerths = lotIdleBerthsService.updateAndGetIdleBerthByParkNo(InParkingRequest.getInTime(),InParkingRequest.getPlNo(), ParkConstant.InterfaceLog.Type.TYPE_IN_PARKING, + InParkingRequest.getFromType(), InParkingRequest.getFreeBerths()); + //设置总空闲车位数 + InParkingRequest.setFreeBerths(totalFreeBerths); + + logger.info("记录进场日志请求参数:"+JSON.toJSON(InParkingRequest)); + BizResult bizResult = iInOutParkingService.SaveIRainInParking(InParkingRequest); + + logger.info("插入停车订单--begin----"); + BizResult orderResult = parkOrderService.insertParkingOrder(InParkingRequest); + logger.info("插入停车订单--end----结果=[errorMsg={},orderId={}]",orderResult.getErrMsg(),orderResult.getData()); + // 数据来源青岛,则更新进场车位状态 + if (InterfaceLog.FromType.QINGDAO == request.getFromType()) { + updateBerthsStatus(baseInfo, InParkingRequest.getParkCode(),InParkingRequest.getParkingPlaceCode(),InParkingRequest.getParkingPlaceStatus()); + try { + //特殊停车场的车位更新以及空闲车位数量更新 + this.updateBerthsNum(baseInfo, InParkingRequest.getParkCode(), InParkingRequest.getParkingPlaceCode(), InParkingRequest.getParkingPlaceStatus()); + } catch (Exception e) { + logger.error("特殊停车场的车位更新以及空闲车位数量更新异常!",e); + } + } + + if(!orderResult.isSuccess()){ + throw new BizException(orderResult.getErrCode(), orderResult.getErrMsg()); + } + + if(!bizResult.isSuccess()){ + throw new BizException(bizResult.getErrCode(), bizResult.getErrMsg()); + } + return bizResult.getData(); + } + /** + * 更新空闲车位 + * @param baseInfo + * @param foreignParkinglotNo + * @param foreignParkingPlaceNo + * @param parkingPlaceStatus + */ + private void updateBerthsStatus(BaseInfo baseInfo, String foreignParkinglotNo,String foreignParkingPlaceNo,Integer parkingPlaceStatus) { + logger.info("数据来源青岛,则更新出场车位状态"); + UpdateParkingPlaceStatusRequest updateRequest = new UpdateParkingPlaceStatusRequest(); + updateRequest.setBaseRequest(baseInfo); + updateRequest.setSysCode(sysCode); + updateRequest.setForeignParkinglotNo(foreignParkinglotNo); + updateRequest.setForeignParkingPlaceNo(foreignParkingPlaceNo); + updateRequest.setParkingPlaceStatus(parkingPlaceStatus); + + BizResult updateResult = parkinglotBerthsService.UpdateParkingPlaceStatus(updateRequest); + + if (!updateResult.isSuccess()) { + throw new BizException(updateResult.getErrCode(), updateResult.getErrMsg()); + } + } + + @Override + public Long OutParkLotRecord(RecordOutParkLotRequest request) throws Exception{ + BeanValidatorsUtils.validateWithException(request); + BaseInfo baseInfo = new BaseInfo(); + + OutParkingRequest OutParkingRequest = request.getOutParkLotReq(); + OutParkingRequest.setBaseRequest(baseInfo); + OutParkingRequest.setSysCode(request.getSysCode()); + OutParkingRequest.setFromType(request.getFromType()); + OutParkingRequest.setSourceType(request.getSourceType()); + //根据外部停车场编号获取自己的停车场编号和名称 + ParkingLotDTO parkingLotDTO = this.getOurParkLotInfoByOutNo(request.getOutParkLotReq().getParkCode()); + OutParkingRequest.setPlNo(parkingLotDTO.getPlNo()); + OutParkingRequest.setPlName(parkingLotDTO.getPlName()); + + logger.info("更新空闲车位"); + int totalFreeBerths = lotIdleBerthsService.updateAndGetIdleBerthByParkNo(OutParkingRequest.getOutTime(),OutParkingRequest.getPlNo(), ParkConstant.InterfaceLog.Type.TYPE_OUT_PARKING, + request.getFromType(), OutParkingRequest.getFreeBerths()); + //设置总空闲车位数 + OutParkingRequest.setFreeBerths(totalFreeBerths); + + logger.info("记录出车日志请求参数:"+JSON.toJSONString(OutParkingRequest)); + BizResult bizResult = iInOutParkingService.SaveIRainOutParking(OutParkingRequest); + logger.info("记录出车日志响应信息:"+JSON.toJSONString(bizResult)); + + logger.info("出车上报更新停车订单."); + BizResult orderResult = parkOrderService.updateParkingOrder(OutParkingRequest); + logger.info("出车上报更新订单响应信息:"+JSON.toJSONString(orderResult)); + + // 数据来源青岛,则更新出场车位状态 + if (InterfaceLog.FromType.QINGDAO == request.getFromType()) { + logger.info("数据来源青岛,则更新出场车位状态"); + this.updateBerthsStatus(baseInfo, OutParkingRequest.getParkCode(), OutParkingRequest.getParkingPlaceCode(), OutParkingRequest.getParkingPlaceStatus()); + try { + //特殊停车场的车位更新以及空闲车位数量更新 + //20170714 zhaowg 目前没有特殊停车场,不考虑 + //this.updateBerthsNum(baseInfo, OutParkingRequest.getParkCode(), OutParkingRequest.getParkingPlaceCode(), OutParkingRequest.getParkingPlaceStatus()); + } catch (Exception e) { + logger.error("特殊停车场的车位更新以及空闲车位数量更新异常!",e); + } + } + + + if(!orderResult.isSuccess()){ + throw new BizException(bizResult.getErrCode(), bizResult.getErrMsg()); + } + if(!bizResult.isSuccess()){ + throw new BizException(bizResult.getErrCode(), bizResult.getErrMsg()); + } + + return bizResult.getData(); + } + + /** + * 根据上报的停车场查询对应的我们自己的停车场信息 + * @param parkCode + * @return + * 2017年6月7日 zhaowg + */ + private ParkingLotDTO getOurParkLotInfoByOutNo(String parkCode) { + logger.info("根据上报的停车场编号["+parkCode+"]查询对应的我们自己的停车场编号"); + //先查询缓存 + ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlOutNo(parkCode); + if(parkingLotDTO != null){ + return parkingLotDTO; + } + //查询数据库 + logger.info("根据上报的停车场编号["+parkCode+"]在缓存总没有查询到对应的停车场信息,开始查询数据库"); + QueryParkLotInfoByPkOutNoRequest request = new QueryParkLotInfoByPkOutNoRequest(); + request.setSysCode(sysCode); + request.setPklOutNo(parkCode); + BizResult bizResult = parkingLotQueryService.QueryParkingLotByPkOutNo(request ); + parkingLotDTO = ResultUtils.getBizResultData(bizResult); + return parkingLotDTO; + } + + /** + * 更新park_free_berth表中空闲车位个数(特殊) + * @param baseInfo + * @param foreignParkinglotNo + * @param foreignParkingPlaceNo + * @param parkingPlaceStatus + */ + private void updateBerthsNum(BaseInfo baseInfo, String foreignParkinglotNo,String foreignParkingPlaceNo,Integer parkingPlaceStatus) { + logger.info("数据来源青岛,则更新出场车位状态以及空闲停车位个数"); + UpdateParkingPlaceStatusRequest updateRequest = new UpdateParkingPlaceStatusRequest(); + updateRequest.setBaseRequest(baseInfo); + updateRequest.setSysCode(sysCode); + updateRequest.setForeignParkinglotNo(foreignParkinglotNo); + updateRequest.setForeignParkingPlaceNo(foreignParkingPlaceNo); + updateRequest.setParkingPlaceStatus(parkingPlaceStatus); + + BizResult updateResult = parkinglotBerthsService.updateFreeBerthNum(updateRequest); + + if (!updateResult.isSuccess()) { + throw new BizException(updateResult.getErrCode(), updateResult.getErrMsg()); + } + } +} diff --git b/src/main/java/com/zteits/irain/portal/service/impl/parklotidleberths/ParkLotIdleBerthsServiceImpl.java a/src/main/java/com/zteits/irain/portal/service/impl/parklotidleberths/ParkLotIdleBerthsServiceImpl.java new file mode 100644 index 0000000..38b4b5a --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/impl/parklotidleberths/ParkLotIdleBerthsServiceImpl.java @@ -0,0 +1,141 @@ +package com.zteits.irain.portal.service.impl.parklotidleberths; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.cache.park.ParkFreeBerthsCacheUtil; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.cache.sys.SysCodeValueCacheUtil; +import com.clouds.common.constants.CodeValKindEnum; +import com.clouds.common.constants.RedisKeyEnum; +import com.clouds.common.redis.RedisCacheUtil; +import com.clouds.common.utils.ResultUtils; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.dto.TabParkinglotDTO; +import com.zteits.clouds.api.dto.park.param.FreeBerthNumUpdateByFreeBerthNumRequest; +import com.zteits.clouds.api.dto.park.param.FreeBerthNumUpdateByInOutTypeRequest; +import com.zteits.clouds.api.service.park.ParkFreeBerthService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.service.interfaces.parklotidleberths.ParkLotIdleBerthsService; +@Component +public class ParkLotIdleBerthsServiceImpl implements ParkLotIdleBerthsService { + + private static final Logger logger = LoggerFactory.getLogger(ParkLotIdleBerthsServiceImpl.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private ParkFreeBerthService parkFreeBerthService; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + @Autowired + private RedisCacheUtil redisCacheUtil; + + @Override + @Deprecated + public Map getIdleBerthFromRedisByParkNos(List parkNos) { + Map result = new HashMap<>(); + BaseInfo info = new BaseInfo(); + //从缓存中获取 + for (String plNo : parkNos) { + ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(plNo); + if(parkingLotDTO==null){ + continue; + } + TabParkinglotDTO tabdto = new TabParkinglotDTO(); + tabdto.setPklNo(parkingLotDTO.getPlNo()); + tabdto.setPklName(parkingLotDTO.getPlName()); + //获取空闲车位数 + Integer idleberths = ParkFreeBerthsCacheUtil.getFreeBerthsByPlNo(parkingLotDTO.getPlNo()); + tabdto.setIdleberths(idleberths); + result.put(parkingLotDTO.getPlNo(), tabdto); + } + logger.info("["+info.getRequestId()+"]开始通过key获取停车场信息结束"); + return result; + } + + @Override + public int updateAndGetIdleBerthByParkNo(Date inoutTime,String plNo, Integer type, Integer fromType,Integer freeBerths) { + logger.info("开始通过key:"+plNo+" 更新空闲车位,类型:"+type+"(1:进场;2:出场),来源:"+fromType+"(1:艾润;2:青岛)"); +/* logger.info("进/出场时间:"+DateUtil.getDateString(inoutTime, DateUtil.YYYYMMDDHHMMSS)+",当前时间:"+DateUtil.getDateString(DateUtil.YYYYMMDDHHMMSS)); + Calendar inOutCalendTime = Calendar.getInstance(); + inOutCalendTime.setTime(inoutTime); + Calendar currentTime = Calendar.getInstance(); + //当前时间-30分钟(防止艾润网络延迟上报) + currentTime.add(Calendar.MINUTE, -30); + if(inOutCalendTime.before(currentTime)){ + logger.info("进/出场时间和当前时间误差大于1小时,不更新空闲车位数"); + return ParkFreeBerthsCacheUtil.getFreeBerthsByPlNo(plNo); + }*/ + + Integer idleberth = 0; + try{ + freeBerths = freeBerths==null?0:freeBerths; + //更新redis中空闲车位数,返回当前总的空闲车位数 + idleberth = updateRedisFreeBerthNum(type, plNo,fromType,freeBerths); + + //向Redis消息队列发送空闲车位数 + ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(plNo); + //判断停车场是否为赤峰 + if(parkingLotDTO!=null && parkingLotDTO.getPlCityId()==ParkConstant.CityId.CHIFENG){ + JSONObject jsonObject = new JSONObject(); + //空闲车位数 + jsonObject.put("freeBerths", idleberth); + //停车场编号 + jsonObject.put("plNo", plNo); + redisCacheUtil.convertAndSend(RedisKeyEnum.PARK_FREEBERTH_PLNO_FREEBERTH_TOPIC.key(),jsonObject); + } + }catch(Exception e){ + logger.error("根据停车场编号["+plNo+"]更新空闲车位报错:",e); + } + return idleberth; + } + /** + * 更新redis中空闲车位数,返回当前总的空闲车位数 + * @param type 1:进场;2:出场 + * @param info + * @param parkNo 自己内部停车场编号 + * @param fromType 1:艾润;2:青岛 + * @return + * 2017年6月7日 zhaowg + */ + private Integer updateRedisFreeBerthNum(Integer type, String parkNo,Integer fromType,Integer freeBerths) { + //通过来源类型判断更新空闲车位的方式,直接覆盖还是自己计算 + String updateFreeMethods = SysCodeValueCacheUtil.queryCodeNameByCodeValue(CodeValKindEnum.UPDATE_FREEBERTHS_BY_FROMTYPE,fromType.toString()); + if(StringUtils.isBlank(updateFreeMethods)){ + logger.error("通过来源类型【"+fromType+"】从缓存中获取对应的更新空闲车位方式失败。",new Exception("通过来源类型判断更新空闲车位的方式失败,没有找到来源类型【"+fromType+"】对应的更新空闲车位方式")); + return 0; + } + BizResult bizResult = new BizResult<>(); + //直接覆盖 + if(updateFreeMethods.equals(ParkConstant.ParkFreeBerths.UpdateMethod.COVER)){ + FreeBerthNumUpdateByFreeBerthNumRequest request = new FreeBerthNumUpdateByFreeBerthNumRequest(); + request.setFreeBerthNum(freeBerths); + request.setPlNo(parkNo); + request.setSysCode(sysCode); + bizResult = parkFreeBerthService.updateFreeBerthNumByFreeBerthNum(request ); + }else if(updateFreeMethods.equals(ParkConstant.ParkFreeBerths.UpdateMethod.AUTOCALC)){ + //自己计算 + FreeBerthNumUpdateByInOutTypeRequest request = new FreeBerthNumUpdateByInOutTypeRequest(); + request.setInOutType(type); + request.setPlNo(parkNo); + request.setSysCode(sysCode); + bizResult = parkFreeBerthService.updateFreeBerthNumByInOutType(request); + } + + return ResultUtils.getBizResultData(bizResult); + } +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/induction/InductionService.java a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/InductionService.java new file mode 100644 index 0000000..15ad591 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/InductionService.java @@ -0,0 +1,37 @@ +package com.zteits.irain.portal.service.interfaces.induction; + +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.irain.portal.service.interfaces.induction.param.DoLevelTwoAndThreeInductionReleaseBatchRequest; +/** + * 对接智慧停车诱导服务管理系统 + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InductionService.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月24日 上午10:03:03 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月24日 zhaowg v1.0.0 创建 + */ +public interface InductionService { + /** + * 二级、三级诱导批量发布 + * @param owner_code + * @param pwd + * @param inductionServices + * @return + * 2017年5月24日 zhaowg + */ + public BizResultVO doLevelTwoAndThreeInductionReleaseBatch(DoLevelTwoAndThreeInductionReleaseBatchRequest request); + /** + * 一级诱导发布回显 + * @param eqpCode 诱导设备编码 + * @return + * 2017年5月24日 zhaowg + */ + public BizResultVO showLevelOneInductionRelease(String eqpCode); + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/DoLevelTwoAndThreeInductionReleaseBatchRequest.java a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/DoLevelTwoAndThreeInductionReleaseBatchRequest.java new file mode 100644 index 0000000..e6e92c1 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/DoLevelTwoAndThreeInductionReleaseBatchRequest.java @@ -0,0 +1,48 @@ +package com.zteits.irain.portal.service.interfaces.induction.param; + +import java.util.List; + +import io.swagger.annotations.ApiModelProperty; + +/** + * 二级、三级诱导批量发布请求参数 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: DoLevelTwoAndThreeInductionReleaseBatchReq.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月25日 上午9:22:20 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月25日 zhaowg v1.0.0 创建 + */ +public class DoLevelTwoAndThreeInductionReleaseBatchRequest { + @ApiModelProperty(value="用户编码") + private String owner_code; + @ApiModelProperty(value="密码") + private String pwd; + @ApiModelProperty(value="停车场剩余泊位数") + private List jsonStr; + public String getOwner_code() { + return owner_code; + } + public void setOwner_code(String owner_code) { + this.owner_code = owner_code; + } + public String getPwd() { + return pwd; + } + public void setPwd(String pwd) { + this.pwd = pwd; + } + public List getJsonStr() { + return jsonStr; + } + public void setJsonStr(List jsonStr) { + this.jsonStr = jsonStr; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionLevelOneShow.java a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionLevelOneShow.java new file mode 100644 index 0000000..11d1add --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionLevelOneShow.java @@ -0,0 +1,38 @@ +package com.zteits.irain.portal.service.interfaces.induction.param; +/** + * 一级诱导回显 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InductionLevelOneShow.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月24日 上午10:40:07 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月24日 zhaowg v1.0.0 创建 + */ +public class InductionLevelOneShow { + /** + * 诱导设备编码 + */ + private String eqpCode; + /** + * 一级诱导发布的base64图片 + */ + private String imageBase64; + public String getEqpCode() { + return eqpCode; + } + public void setEqpCode(String eqpCode) { + this.eqpCode = eqpCode; + } + public String getImageBase64() { + return imageBase64; + } + public void setImageBase64(String imageBase64) { + this.imageBase64 = imageBase64; + } +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionRelease.java a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionRelease.java new file mode 100644 index 0000000..8a9a51d --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionRelease.java @@ -0,0 +1,67 @@ +package com.zteits.irain.portal.service.interfaces.induction.param; + +import io.swagger.annotations.ApiModelProperty; + +/** + * 诱导发布VO + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InductionRelease.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月24日 上午9:31:55 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月24日 zhaowg v1.0.0 创建 + */ +public class InductionRelease { + @ApiModelProperty(value="用户编号") + private String owner_code; + @ApiModelProperty(value="密码") + private String pwd; + @ApiModelProperty(value="停车场编码") + private String parking_code; + @ApiModelProperty(value="泊位区间编号") + private String range_code; + @ApiModelProperty(value="剩余泊位数") + private String berth_left; + public String getOwner_code() { + return owner_code; + } + public void setOwner_code(String owner_code) { + this.owner_code = owner_code; + } + public String getPwd() { + return pwd; + } + public void setPwd(String pwd) { + this.pwd = pwd; + } + public String getParking_code() { + return parking_code; + } + public void setParking_code(String parking_code) { + this.parking_code = parking_code; + } + public String getRange_code() { + return range_code; + } + public void setRange_code(String range_code) { + this.range_code = range_code; + } + public String getBerth_left() { + return berth_left; + } + public void setBerth_left(String berth_left) { + this.berth_left = berth_left; + } + @Override + public String toString() { + return "InductionRelease [owner_code=" + owner_code + ", pwd=" + pwd + ", parking_code=" + parking_code + + ", range_code=" + range_code + ", berth_left=" + berth_left + "]"; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionResponse.java a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionResponse.java new file mode 100644 index 0000000..db17cfd --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/induction/param/InductionResponse.java @@ -0,0 +1,44 @@ +package com.zteits.irain.portal.service.interfaces.induction.param; + +import java.io.Serializable; + +public class InductionResponse implements Serializable{ + + private static final long serialVersionUID = 1L; + /**100为成功,其他错误*/ + private String sys_code; + + private String sys_msg; + + private T data; + + public String getSys_code() { + return sys_code; + } + + public void setSys_code(String sys_code) { + this.sys_code = sys_code; + } + + public String getSys_msg() { + return sys_msg; + } + + public void setSys_msg(String sys_msg) { + this.sys_msg = sys_msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @Override + public String toString() { + return "InductionResponse [sys_code=" + sys_code + ", sys_msg=" + sys_msg + ", data=" + data + "]"; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/InOutParkLotReportService.java a/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/InOutParkLotReportService.java new file mode 100644 index 0000000..e31f8f1 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/InOutParkLotReportService.java @@ -0,0 +1,39 @@ +package com.zteits.irain.portal.service.interfaces.inoutparklot; + +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordInParkLotRequest; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordOutParkLotRequest; + +/** + * 进出场上报接口 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InOutParkingLotService.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月7日 上午10:02:23 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月7日 zhaowg v1.0.0 创建 + */ +public interface InOutParkLotReportService { + /** + * 进车上报 + * @param request + * @return 插入记录表主键 + * 2017年6月7日 zhaowg + */ + Long InParkLotRecord(RecordInParkLotRequest request) throws Exception; + + /** + * 出车上报 + * @param request + * @return 插入记录表主键 + * 2017年6月7日 zhaowg + */ + Long OutParkLotRecord(RecordOutParkLotRequest request) throws Exception; + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/param/RecordInParkLotRequest.java a/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/param/RecordInParkLotRequest.java new file mode 100644 index 0000000..560a9ee --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/param/RecordInParkLotRequest.java @@ -0,0 +1,49 @@ +package com.zteits.irain.portal.service.interfaces.inoutparklot.param; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import com.zteits.clouds.api.dto.park.param.InParkingRequest; + +public class RecordInParkLotRequest implements Serializable{ + + private static final long serialVersionUID = 1L; + /**系统编码*/ + @NotNull + private String sysCode; + /**来源:1艾润;2青岛*/ + @NotNull + private Integer fromType; + /**数据来源来源类型 1、道闸 2、地磁 等'*/ + private Integer sourceType; + /**进车上报参数*/ + private InParkingRequest inParkLotReq; + + public Integer getSourceType() { + return sourceType; + } + + public void setSourceType(Integer sourceType) { + this.sourceType = sourceType; + } + public String getSysCode() { + return sysCode; + } + public void setSysCode(String sysCode) { + this.sysCode = sysCode; + } + public InParkingRequest getInParkLotReq() { + return inParkLotReq; + } + public void setInParkLotReq(InParkingRequest inParkLotReq) { + this.inParkLotReq = inParkLotReq; + } + public Integer getFromType() { + return fromType; + } + public void setFromType(Integer fromType) { + this.fromType = fromType; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/param/RecordOutParkLotRequest.java a/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/param/RecordOutParkLotRequest.java new file mode 100644 index 0000000..735c527 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/inoutparklot/param/RecordOutParkLotRequest.java @@ -0,0 +1,49 @@ +package com.zteits.irain.portal.service.interfaces.inoutparklot.param; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import com.zteits.clouds.api.dto.park.param.OutParkingRequest; + +public class RecordOutParkLotRequest implements Serializable{ + + private static final long serialVersionUID = 1L; + /**系统编码*/ + @NotNull + private String sysCode; + /**来源:1艾润;2青岛*/ + @NotNull + private Integer fromType; + /**数据来源来源类型 1、道闸 2、地磁 等'*/ + private Integer sourceType; + /**进车上报参数*/ + private OutParkingRequest outParkLotReq; + + public Integer getSourceType() { + return sourceType; + } + public void setSourceType(Integer sourceType) { + this.sourceType = sourceType; + } + public String getSysCode() { + return sysCode; + } + public void setSysCode(String sysCode) { + this.sysCode = sysCode; + } + public Integer getFromType() { + return fromType; + } + public void setFromType(Integer fromType) { + this.fromType = fromType; + } + public OutParkingRequest getOutParkLotReq() { + return outParkLotReq; + } + public void setOutParkLotReq(OutParkingRequest outParkLotReq) { + this.outParkLotReq = outParkLotReq; + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/service/interfaces/parklotidleberths/ParkLotIdleBerthsService.java a/src/main/java/com/zteits/irain/portal/service/interfaces/parklotidleberths/ParkLotIdleBerthsService.java new file mode 100644 index 0000000..1d370a3 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/service/interfaces/parklotidleberths/ParkLotIdleBerthsService.java @@ -0,0 +1,46 @@ +package com.zteits.irain.portal.service.interfaces.parklotidleberths; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.zteits.clouds.api.dto.park.dto.TabParkinglotDTO; + +/** + * 停车场空闲车位数 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkLotIdleBerths.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月25日 上午10:11:09 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月25日 zhaowg v1.0.0 创建 + */ +public interface ParkLotIdleBerthsService { + /** + * 通过停车场编号查询空闲车位信息(临时演示使用) + * @param parkNos + * @return map key为停车场编号,value为对应的停车场信息 + * 2017年5月25日 zhaowg + */ + @Deprecated + Map getIdleBerthFromRedisByParkNos(List parkNos); + + /** + * 通过停车场编号更新空闲车位信息 + * @param inoutTime 进出场时间 + * @param plNo 自己内部停车场编号 + * @param type 类型:1:进场;2:出场 + * @param fromType 1:艾润;2:青岛 + * @param freeBerths 空闲车位数,来源为青岛时,直接将空闲车位数替换为freeBerths + * @return 更新后的空闲车位数 + */ + int updateAndGetIdleBerthByParkNo(Date inoutTime,String plNo,Integer type,Integer fromType,Integer freeBerths); + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/EBoChongEnum.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/EBoChongEnum.java new file mode 100644 index 0000000..ce9cb63 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/EBoChongEnum.java @@ -0,0 +1,45 @@ +package com.zteits.irain.portal.vo.ebochong; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:28 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public enum EBoChongEnum { + + COMMAND_GO(1, "放行"), + COMMAND_NOT_GO(2, "不放行"), + CODE_SUCCESS(0, "成功"), + AMOUNTTYPE_PARK(0, "停车收费"), + AMOUNTTYPE_RENEW(1, "长期续费"), + REDUCTIONTYPE_NO(0, "无减免"), + REDUCTIONTYPE_ALL(1, "全免"), + REDUCTIONTYPE_TIME(2, "免时间"), + REDUCTIONTYPE_DISCOUNT(3, "折扣"), + REDUCTIONTYPE_MONEY(4, "金额"), + CODE_FAIL(1, "失败"), + CAROUT_IN(0, "入场"), + CAROUT_OUT(1, "出场"), + PAYTYPE_PARK(0, "停车场自收费"), + PAYTYPE_EBOCHONG(1, "停车场自收费"); + + private Integer value; + private String desc; + + EBoChongEnum(Integer value, String desc) { + this.desc = desc; + this.value = value; + } + + public Integer val() { + return this.value; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListDetail.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListDetail.java new file mode 100644 index 0000000..eb049bb --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListDetail.java @@ -0,0 +1,160 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import java.io.Serializable; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:57 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class ChargeListDetail implements Serializable { + + //车牌号 + private String plateNo; + //卡片号码 + private String cardNo; + //出入口编号 + private String parkIndex; + //出入口编号 + private String entranceIndex; + //过车时间,时间格式:YYYY-MM-DD HH:MM:SS + private String passTime; + //(可选)入场时间,如果入场则 该字段为空,时间格式:YYYY-MM-DD HH:MM:SS + private String inTime; + //出入方向,0-入场,1-出场 + private Integer carOut; + //可选)车牌图片 URL,没有图片,则为空 + private String vehicleUrl; + //实际缴费金额,单位为分,不收费, 填为 0 + private Integer receivable; + //缴费类型 0:停车场自收费 1:易泊充平台缴费 + private Integer payType; + //车辆唯一ID + private String uuid; + //费用类型 0:停车收费 1:长期续费 + private Integer amountType; + //减免类型 0:无减免 1:全免 2:免时间 3:折扣 4:金额 + private Integer reductionType; + //减免金额,单位为分 + private Integer reductionMoney; + + public String getPlateNo() { + return plateNo; + } + + public void setPlateNo(String plateNo) { + this.plateNo = plateNo; + } + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } + + public String getEntranceIndex() { + return entranceIndex; + } + + public void setEntranceIndex(String entranceIndex) { + this.entranceIndex = entranceIndex; + } + + public String getPassTime() { + return passTime; + } + + public void setPassTime(String passTime) { + this.passTime = passTime; + } + + public String getInTime() { + return inTime; + } + + public void setInTime(String inTime) { + this.inTime = inTime; + } + + public Integer getCarOut() { + return carOut; + } + + public void setCarOut(Integer carOut) { + this.carOut = carOut; + } + + public String getVehicleUrl() { + return vehicleUrl; + } + + public void setVehicleUrl(String vehicleUrl) { + this.vehicleUrl = vehicleUrl; + } + + public Integer getReceivable() { + return receivable; + } + + public void setReceivable(Integer receivable) { + this.receivable = receivable; + } + + public Integer getPayType() { + return payType; + } + + public void setPayType(Integer payType) { + this.payType = payType; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Integer getAmountType() { + return amountType; + } + + public void setAmountType(Integer amountType) { + this.amountType = amountType; + } + + public Integer getReductionType() { + return reductionType; + } + + public void setReductionType(Integer reductionType) { + this.reductionType = reductionType; + } + + public Integer getReductionMoney() { + return reductionMoney; + } + + public void setReductionMoney(Integer reductionMoney) { + this.reductionMoney = reductionMoney; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListReq.java new file mode 100644 index 0000000..e8c4ce2 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListReq.java @@ -0,0 +1,89 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:54 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class ChargeListReq extends CommonReq { + //停车场编号 + private String parkIndex; + // 账单日期 例子:2016-06-30 + private String date; + //停车场自收费总额,包括:现金收费、支付宝、微信缴费等除易泊充支付的所有支付方式的收费总额。单位为分 + private Integer selfTotal; + //自收费笔数 + private Integer selfTrans; + //易泊充支付总额,单位为分 + private Integer ebcTotal; + //易泊充交易笔数 + private Integer ebcTrans; + //账单列表 + private List chargeList; + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getSelfTotal() { + return selfTotal; + } + + public void setSelfTotal(Integer selfTotal) { + this.selfTotal = selfTotal; + } + + public Integer getSelfTrans() { + return selfTrans; + } + + public void setSelfTrans(Integer selfTrans) { + this.selfTrans = selfTrans; + } + + public Integer getEbcTotal() { + return ebcTotal; + } + + public void setEbcTotal(Integer ebcTotal) { + this.ebcTotal = ebcTotal; + } + + public Integer getEbcTrans() { + return ebcTrans; + } + + public void setEbcTrans(Integer ebcTrans) { + this.ebcTrans = ebcTrans; + } + + public List getChargeList() { + return chargeList; + } + + public void setChargeList(List chargeList) { + this.chargeList = chargeList; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListRes.java new file mode 100644 index 0000000..aaf6bde --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ChargeListRes.java @@ -0,0 +1,19 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonRes; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.res + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午4:22 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class ChargeListRes extends CommonRes { +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/CommonReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/CommonReq.java new file mode 100644 index 0000000..8fbe723 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/CommonReq.java @@ -0,0 +1,21 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import java.io.Serializable; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:25 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class CommonReq implements Serializable { + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/CommonRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/CommonRes.java new file mode 100644 index 0000000..942a26b --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/CommonRes.java @@ -0,0 +1,45 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import java.io.Serializable; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong + * @Description: 公共返回 + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/22 下午5:10 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/22 atao v1.0.0 创建 + */ +public class CommonRes implements Serializable { + /** + * 返回错误代码 + * 必填 + */ + private Integer code; + /** + * 返回信息 + * 非必填 + */ + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/HandledVehicleInfoReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/HandledVehicleInfoReq.java new file mode 100644 index 0000000..289d30a --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/HandledVehicleInfoReq.java @@ -0,0 +1,139 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonReq; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:41 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class HandledVehicleInfoReq extends CommonReq { + //车牌号 + private String plateNo; + //parkIndex + private String cardNo; + //出入口编号 + private String parkIndex; + //出入口编号 + private String entranceIndex; + //过车时间,时间格式:YYYY-MM-DD HH:MM:SS + private String passTime; + //(可选)入场时间,如果入场则 该字段为空,时间格式:YYYY-MM-DD HH:MM:SS + private String inTime; + //出入方向,0-入场,1-出场 + private Integer carOut; + //可选)车牌图片 URL,没有图片,则为空 + private String vehicleUrl; + //实际缴费金额,单位为分,不收费, 填为 0 + private Integer receivable; + //缴费类型 0:停车场自收费 1:易泊充平台缴费 + private Integer payType; + //剩余车位数 + private Integer remaining; + //车辆唯一ID + private String uuid; + + public String getPlateNo() { + return plateNo; + } + + public void setPlateNo(String plateNo) { + this.plateNo = plateNo; + } + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } + + public String getEntranceIndex() { + return entranceIndex; + } + + public void setEntranceIndex(String entranceIndex) { + this.entranceIndex = entranceIndex; + } + + public String getPassTime() { + return passTime; + } + + public void setPassTime(String passTime) { + this.passTime = passTime; + } + + public String getInTime() { + return inTime; + } + + public void setInTime(String inTime) { + this.inTime = inTime; + } + + public Integer getCarOut() { + return carOut; + } + + public void setCarOut(Integer carOut) { + this.carOut = carOut; + } + + public String getVehicleUrl() { + return vehicleUrl; + } + + public void setVehicleUrl(String vehicleUrl) { + this.vehicleUrl = vehicleUrl; + } + + public Integer getReceivable() { + return receivable; + } + + public void setReceivable(Integer receivable) { + this.receivable = receivable; + } + + public Integer getPayType() { + return payType; + } + + public void setPayType(Integer payType) { + this.payType = payType; + } + + public Integer getRemaining() { + return remaining; + } + + public void setRemaining(Integer remaining) { + this.remaining = remaining; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/HandledVehicleInfoRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/HandledVehicleInfoRes.java new file mode 100644 index 0000000..a48fc59 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/HandledVehicleInfoRes.java @@ -0,0 +1,19 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonRes; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.res + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:47 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class HandledVehicleInfoRes extends CommonRes { +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/RemainingInfoReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/RemainingInfoReq.java new file mode 100644 index 0000000..14c8333 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/RemainingInfoReq.java @@ -0,0 +1,40 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonReq; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:52 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class RemainingInfoReq extends CommonReq { + + //停车场编号 + private String parkIndex; + //剩余车位数 + private Integer remaining; + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } + + public Integer getRemaining() { + return remaining; + } + + public void setRemaining(Integer remaining) { + this.remaining = remaining; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/RemainingInfoRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/RemainingInfoRes.java new file mode 100644 index 0000000..90b1ba5 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/RemainingInfoRes.java @@ -0,0 +1,20 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonRes; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.res + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:53 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class RemainingInfoRes extends CommonRes { + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ResendVehicleInfoReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ResendVehicleInfoReq.java new file mode 100644 index 0000000..12248af --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ResendVehicleInfoReq.java @@ -0,0 +1,140 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonReq; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午4:08 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class ResendVehicleInfoReq extends CommonReq { + + //返回当前补发序号 + private Integer SendNo; + //车牌号 + private String plateNo; + //parkIndex + private String cardNo; + //出入口编号 + private String parkIndex; + //出入口编号 + private String entranceIndex; + //过车时间,时间格式:YYYY-MM-DD HH:MM:SS + private String passTime; + //(可选)入场时间,如果入场则 该字段为空,时间格式:YYYY-MM-DD HH:MM:SS + private String inTime; + //出入方向,0-入场,1-出场 + private Integer carOut; + //可选)车牌图片 URL,没有图片,则为空 + private String vehicleUrl; + //实际缴费金额,单位为分,不收费, 填为 0 + private Integer receivable; + //缴费类型 0:停车场自收费 1:易泊充平台缴费 + private Integer payType; + //车辆唯一ID + private String uuid; + + public Integer getSendNo() { + return SendNo; + } + + public void setSendNo(Integer sendNo) { + SendNo = sendNo; + } + + public String getPlateNo() { + return plateNo; + } + + public void setPlateNo(String plateNo) { + this.plateNo = plateNo; + } + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } + + public String getEntranceIndex() { + return entranceIndex; + } + + public void setEntranceIndex(String entranceIndex) { + this.entranceIndex = entranceIndex; + } + + public String getPassTime() { + return passTime; + } + + public void setPassTime(String passTime) { + this.passTime = passTime; + } + + public String getInTime() { + return inTime; + } + + public void setInTime(String inTime) { + this.inTime = inTime; + } + + public Integer getCarOut() { + return carOut; + } + + public void setCarOut(Integer carOut) { + this.carOut = carOut; + } + + public String getVehicleUrl() { + return vehicleUrl; + } + + public void setVehicleUrl(String vehicleUrl) { + this.vehicleUrl = vehicleUrl; + } + + public Integer getReceivable() { + return receivable; + } + + public void setReceivable(Integer receivable) { + this.receivable = receivable; + } + + public Integer getPayType() { + return payType; + } + + public void setPayType(Integer payType) { + this.payType = payType; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ResendVehicleInfoRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ResendVehicleInfoRes.java new file mode 100644 index 0000000..342195f --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/ResendVehicleInfoRes.java @@ -0,0 +1,29 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonRes; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.res + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午4:08 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class ResendVehicleInfoRes extends CommonRes{ + //返回当前补发序号 + private Integer SendNo; + + public Integer getSendNo() { + return SendNo; + } + + public void setSendNo(Integer sendNo) { + SendNo = sendNo; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/UnhandledVehicleInfoReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/UnhandledVehicleInfoReq.java new file mode 100644 index 0000000..9b91695 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/UnhandledVehicleInfoReq.java @@ -0,0 +1,129 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonReq; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 上午10:18 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class UnhandledVehicleInfoReq extends CommonReq { + //车牌号 + private String plateNo; + //parkIndex + private String cardNo; + //出入口编号 + private String parkIndex; + //出入口编号 + private String entranceIndex; + //过车时间,时间格式:YYYY-MM-DD HH:MM:SS + private String passTime; + //(可选)入场时间,如果入场则 该字段为空,时间格式:YYYY-MM-DD HH:MM:SS + private String inTime; + //出入方向,0-入场,1-出场 + private Integer carOut; + //可选)车牌图片 URL,没有图片,则为空 + private String vehicleUrl; + //实际缴费金额,单位为分,不收费, 填为 0 + private Integer receivable; + //缴费类型 0:停车场自收费 1:易泊充平台缴费 + private Integer payType; + //车辆唯一ID + private String uuid; + + public String getPlateNo() { + return plateNo; + } + + public void setPlateNo(String plateNo) { + this.plateNo = plateNo; + } + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } + + public String getEntranceIndex() { + return entranceIndex; + } + + public void setEntranceIndex(String entranceIndex) { + this.entranceIndex = entranceIndex; + } + + public String getPassTime() { + return passTime; + } + + public void setPassTime(String passTime) { + this.passTime = passTime; + } + + public String getInTime() { + return inTime; + } + + public void setInTime(String inTime) { + this.inTime = inTime; + } + + public Integer getCarOut() { + return carOut; + } + + public void setCarOut(Integer carOut) { + this.carOut = carOut; + } + + public String getVehicleUrl() { + return vehicleUrl; + } + + public void setVehicleUrl(String vehicleUrl) { + this.vehicleUrl = vehicleUrl; + } + + public Integer getReceivable() { + return receivable; + } + + public void setReceivable(Integer receivable) { + this.receivable = receivable; + } + + public Integer getPayType() { + return payType; + } + + public void setPayType(Integer payType) { + this.payType = payType; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/UnhandledVehicleInfoRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/UnhandledVehicleInfoRes.java new file mode 100644 index 0000000..f693407 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/receive/UnhandledVehicleInfoRes.java @@ -0,0 +1,40 @@ +package com.zteits.irain.portal.vo.ebochong.receive; + +import com.zteits.irain.portal.vo.ebochong.receive.CommonRes; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.receive.res + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:24 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class UnhandledVehicleInfoRes extends CommonRes { + //是否放行, 0 – 放行,1 – 不放行 + private Integer command; + + //授权金额 + private String creditLimit; + + public Integer getCommand() { + return command; + } + + public void setCommand(Integer command) { + this.command = command; + } + + public String getCreditLimit() { + return creditLimit; + } + + public void setCreditLimit(String creditLimit) { + this.creditLimit = creditLimit; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddChargeInfoReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddChargeInfoReq.java new file mode 100644 index 0000000..ca92d06 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddChargeInfoReq.java @@ -0,0 +1,72 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.send + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午6:15 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class AddChargeInfoReq extends CommonReq { + + //实收金额,单位为分 + private Integer received; + + //入场时间 例:2016-04-15 12:22:15 + private String inTime; + + //缴费时间 例:2016-04-16 12:22:15 + private String chargingTime; + + //允许驶出时间 例:2016-04-16 12:32:15 + private String allowTime; + + //支付宝/桑德平台 + private String type; + + public Integer getReceived() { + return received; + } + + public void setReceived(Integer received) { + this.received = received; + } + + public String getInTime() { + return inTime; + } + + public void setInTime(String inTime) { + this.inTime = inTime; + } + + public String getChargingTime() { + return chargingTime; + } + + public void setChargingTime(String chargingTime) { + this.chargingTime = chargingTime; + } + + public String getAllowTime() { + return allowTime; + } + + public void setAllowTime(String allowTime) { + this.allowTime = allowTime; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddChargeInfoRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddChargeInfoRes.java new file mode 100644 index 0000000..1202ec3 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddChargeInfoRes.java @@ -0,0 +1,18 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.send + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/26 上午9:41 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/26 atao v1.0.0 创建 + */ +public class AddChargeInfoRes extends CommonRes{ + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddVehicleReservationReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddVehicleReservationReq.java new file mode 100644 index 0000000..63cfdb7 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddVehicleReservationReq.java @@ -0,0 +1,39 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +import com.zteits.irain.portal.vo.ebochong.send.CommonReq; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.send.req + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午5:56 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class AddVehicleReservationReq extends CommonReq { + //失效时间 + private String expireTime; + //预约费用 + private Double fee; + + public String getExpireTime() { + return expireTime; + } + + public void setExpireTime(String expireTime) { + this.expireTime = expireTime; + } + + public Double getFee() { + return fee; + } + + public void setFee(Double fee) { + this.fee = fee; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddVehicleReservationRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddVehicleReservationRes.java new file mode 100644 index 0000000..eccf30d --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/AddVehicleReservationRes.java @@ -0,0 +1,22 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +import com.zteits.irain.portal.vo.ebochong.send.CommonRes; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.send.res + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午5:58 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class AddVehicleReservationRes extends CommonRes { + + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/CommonReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/CommonReq.java new file mode 100644 index 0000000..377574b --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/CommonReq.java @@ -0,0 +1,39 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +import java.io.Serializable; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午3:25 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class CommonReq implements Serializable { + //车牌号 + private String plateNo; + //停车场编号 + private String parkIndex; + + public String getPlateNo() { + return plateNo; + } + + public void setPlateNo(String plateNo) { + this.plateNo = plateNo; + } + + public String getParkIndex() { + return parkIndex; + } + + public void setParkIndex(String parkIndex) { + this.parkIndex = parkIndex; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/CommonRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/CommonRes.java new file mode 100644 index 0000000..84fc4d5 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/CommonRes.java @@ -0,0 +1,45 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +import java.io.Serializable; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong + * @Description: 公共返回 + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/22 下午5:10 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/22 atao v1.0.0 创建 + */ +public class CommonRes implements Serializable { + /** + * 返回错误代码 + * 必填 + */ + private Integer code; + /** + * 返回信息 + * 非必填 + */ + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/GetVehicleChargeReq.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/GetVehicleChargeReq.java new file mode 100644 index 0000000..b2f128a --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/GetVehicleChargeReq.java @@ -0,0 +1,28 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.send + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午6:11 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class GetVehicleChargeReq extends CommonReq { + //车卡号码,如果不为空以卡号为准 + private String cardNo; + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } +} + diff --git b/src/main/java/com/zteits/irain/portal/vo/ebochong/send/GetVehicleChargeRes.java a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/GetVehicleChargeRes.java new file mode 100644 index 0000000..4569518 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/ebochong/send/GetVehicleChargeRes.java @@ -0,0 +1,17 @@ +package com.zteits.irain.portal.vo.ebochong.send; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.ebochong.send + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/23 下午6:12 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/23 atao v1.0.0 创建 + */ +public class GetVehicleChargeRes extends CommonRes { +} diff --git b/src/main/java/com/zteits/irain/portal/vo/govclouds/CenterPOIInfoVO.java a/src/main/java/com/zteits/irain/portal/vo/govclouds/CenterPOIInfoVO.java new file mode 100644 index 0000000..0e76536 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/govclouds/CenterPOIInfoVO.java @@ -0,0 +1,41 @@ +package com.zteits.irain.portal.vo.govclouds; + +/** + * 中心点区域坐标和名称 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: CenterPOIInfoVO.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年7月17日 上午9:51:45 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月17日 zhaowg v1.0.0 创建 + */ +public class CenterPOIInfoVO { + private String name; + private Double longitude; + private Double latitude; + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public Double getLongitude() { + return longitude; + } + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + public Double getLatitude() { + return latitude; + } + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkLotStatisticVO.java a/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkLotStatisticVO.java new file mode 100644 index 0000000..42853e0 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkLotStatisticVO.java @@ -0,0 +1,61 @@ +package com.zteits.irain.portal.vo.govclouds; + +public class ParkLotStatisticVO { + private String plNo;//停车场编号 + private String plName;//停车场名称 + private Integer totalBerthsNum;//总车位数 + private Integer freeBerthsNum;//空闲车位数 + private Integer useingBerthsNum;//使用中的车位数 + private Integer totalGeoNum;//总地磁数 + private Integer onLineGeoNum;//在线地磁数 + private Integer offLineGeoNum;//离线地磁数 + public String getPlNo() { + return plNo; + } + public void setPlNo(String plNo) { + this.plNo = plNo; + } + public String getPlName() { + return plName; + } + public void setPlName(String plName) { + this.plName = plName; + } + public Integer getTotalBerthsNum() { + return totalBerthsNum; + } + public void setTotalBerthsNum(Integer totalBerthsNum) { + this.totalBerthsNum = totalBerthsNum; + } + public Integer getFreeBerthsNum() { + return freeBerthsNum; + } + public void setFreeBerthsNum(Integer freeBerthsNum) { + this.freeBerthsNum = freeBerthsNum; + } + public Integer getUseingBerthsNum() { + return useingBerthsNum; + } + public void setUseingBerthsNum(Integer useingBerthsNum) { + this.useingBerthsNum = useingBerthsNum; + } + public Integer getTotalGeoNum() { + return totalGeoNum; + } + public void setTotalGeoNum(Integer totalGeoNum) { + this.totalGeoNum = totalGeoNum; + } + public Integer getOnLineGeoNum() { + return onLineGeoNum; + } + public void setOnLineGeoNum(Integer onLineGeoNum) { + this.onLineGeoNum = onLineGeoNum; + } + public Integer getOffLineGeoNum() { + return offLineGeoNum; + } + public void setOffLineGeoNum(Integer offLineGeoNum) { + this.offLineGeoNum = offLineGeoNum; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkingBusiCircleForTypeVO.java a/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkingBusiCircleForTypeVO.java new file mode 100644 index 0000000..2727a8c --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkingBusiCircleForTypeVO.java @@ -0,0 +1,65 @@ +package com.zteits.irain.portal.vo.govclouds; + +import java.io.Serializable; +import java.math.BigDecimal; + + +public class ParkingBusiCircleForTypeVO implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 3152080082972168574L; + + /**停车场商圈属性:1:商场、2:医院、3:小区、4:学校、5:写字楼、6:景区、7:交通场站、8:其他*/ + private Integer busiCircle; + + /**停车场商圈描述.*/ + private String busiCircleName; + + /** 当前在停车数量. */ + private Integer currentParkCount; + + /** 当前在停车数量对应的比例. */ + private BigDecimal currentParkBate; + + public Integer getBusiCircle() { + return busiCircle; + } + + public void setBusiCircle(Integer busiCircle) { + this.busiCircle = busiCircle; + } + + public String getBusiCircleName() { + return busiCircleName; + } + + public void setBusiCircleName(String busiCircleName) { + this.busiCircleName = busiCircleName; + } + + public Integer getCurrentParkCount() { + return currentParkCount; + } + + public void setCurrentParkCount(Integer currentParkCount) { + this.currentParkCount = currentParkCount; + } + + public BigDecimal getCurrentParkBate() { + return currentParkBate; + } + + public void setCurrentParkBate(BigDecimal currentParkBate) { + this.currentParkBate = currentParkBate; + } + + @Override + public String toString() { + return "ParkingBusiCircleForTypeVO [busiCircle=" + busiCircle + ", busiCircleName=" + busiCircleName + + ", currentParkCount=" + currentParkCount + ", currentParkBate=" + currentParkBate + "]"; + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkingCountForTypeVO.java a/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkingCountForTypeVO.java new file mode 100644 index 0000000..5238dd1 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/govclouds/ParkingCountForTypeVO.java @@ -0,0 +1,67 @@ +package com.zteits.irain.portal.vo.govclouds; + +import java.io.Serializable; + + +public class ParkingCountForTypeVO implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 3152080082972168574L; + + /**停车场类型:1:路内(占用道路停车位),2-路外.*/ + private Integer plType; + + /**停车场类型描述.*/ + private String plTypeName; + + /** 当前在停车数量. */ + private Integer currentParkCount; + + /**占比=路内/路内停车数量+路外停车数量.*/ + private String zb; + + public Integer getPlType() { + return plType; + } + + public void setPlType(Integer plType) { + this.plType = plType; + } + + public String getPlTypeName() { + return plTypeName; + } + + public void setPlTypeName(String plTypeName) { + this.plTypeName = plTypeName; + } + + public Integer getCurrentParkCount() { + return currentParkCount; + } + + public void setCurrentParkCount(Integer currentParkCount) { + this.currentParkCount = currentParkCount; + } + + + public String getZb() { + return zb; + } + + public void setZb(String zb) { + this.zb = zb; + } + + @Override + public String toString() { + return "ParkingCountForTypeVO [plType=" + plType + ", plTypeName=" + plTypeName + ", currentParkCount=" + + currentParkCount + ", zb=" + zb + "]"; + } + + + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/govclouds/StatisticParkLotEqpCountByCountryVO.java a/src/main/java/com/zteits/irain/portal/vo/govclouds/StatisticParkLotEqpCountByCountryVO.java new file mode 100644 index 0000000..48bc5a0 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/govclouds/StatisticParkLotEqpCountByCountryVO.java @@ -0,0 +1,33 @@ +package com.zteits.irain.portal.vo.govclouds; + +import java.util.Map; + +public class StatisticParkLotEqpCountByCountryVO { + /** + * Map<设备名称+在线/离线,Map<区县中文名称,对应的在线/离线数量>> + */ + private Map> detailEqpMap; + + /** + * Map<设备名称,Map<区县中文名称,对应的总数量>> + */ + private Map> totalEqpMap; + + public Map> getDetailEqpMap() { + return detailEqpMap; + } + + public void setDetailEqpMap(Map> detailEqpMap) { + this.detailEqpMap = detailEqpMap; + } + + public Map> getTotalEqpMap() { + return totalEqpMap; + } + + public void setTotalEqpMap(Map> totalEqpMap) { + this.totalEqpMap = totalEqpMap; + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/irain/IRainResponseVO.java a/src/main/java/com/zteits/irain/portal/vo/irain/IRainResponseVO.java new file mode 100644 index 0000000..7bc91be --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/irain/IRainResponseVO.java @@ -0,0 +1,59 @@ +package com.zteits.irain.portal.vo.irain; + +import java.io.Serializable; + +import com.zteits.clouds.api.apibase.bean.ErrorCode; + +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: ResponseData.java + * @Description: 艾润道闸 返回封装 + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 下午2:23:32 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +public class IRainResponseVO implements Serializable{ + private static final long serialVersionUID = 1L; + private String code; + private String message; + private Integer status; + + public IRainResponseVO(ErrorCode errorCode){ + super(); + this.status = 0; + this.code = errorCode.getCode(); + this.message = errorCode.getMsg(); + } + + public IRainResponseVO() { + this.status = 0; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + @Override + public String toString() { + return "ResponseData [code=" + code + ", message=" + message + + ", status=" + status + "]"; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/mobile/BizResultMobileVO.java a/src/main/java/com/zteits/irain/portal/vo/mobile/BizResultMobileVO.java new file mode 100644 index 0000000..c70341d --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/mobile/BizResultMobileVO.java @@ -0,0 +1,73 @@ +package com.zteits.irain.portal.vo.mobile; + +import java.io.Serializable; +/** + * 专门为手机端APP设计的统一响应码 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: BizResultMobileVO.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年5月11日 上午10:25:57 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年5月11日 zhaowg v1.0.0 创建 + */ +public class BizResultMobileVO implements Serializable{ + + private static final long serialVersionUID = 1L; + + private String successful; + + private String total; + + private String code; + + private String message; + + private T data; + + public String getSuccessful() { + return successful; + } + + public void setSuccessful(String successful) { + this.successful = successful; + } + + public String getTotal() { + return total; + } + + public void setTotal(String total) { + this.total = total; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/mobile/ParkingspotVO.java a/src/main/java/com/zteits/irain/portal/vo/mobile/ParkingspotVO.java new file mode 100644 index 0000000..90ae3ab --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/mobile/ParkingspotVO.java @@ -0,0 +1,154 @@ +package com.zteits.irain.portal.vo.mobile; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; + +public class ParkingspotVO implements Serializable{ + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value="停车场名称") + private String name; + + @ApiModelProperty(value="经度") + private Double longitude; + + @ApiModelProperty(value="纬度") + private Double latitude; + + @ApiModelProperty(value="服务电话") + private String phone; + + @ApiModelProperty(value="停车场类型:-1:未知,0:开放场地,1:封闭场地") + private Integer type; + + @ApiModelProperty(value="停车场编码") + private String pklNo; + + @ApiModelProperty(value="停车点地址") + private String address; + + @ApiModelProperty(value="泊位数") + private Integer totalberths; + + private String description; + + @ApiModelProperty(value="空闲车位数") + private Integer idleberths; + + @ApiModelProperty(value="费率描述") + private String ratedescription; + + @ApiModelProperty(value="距离(米)") + private Double distance; + + @ApiModelProperty(value="收费详情") + private String[] chargeDetail; + + public String[] getChargeDetail() { + return chargeDetail; + } + + public void setChargeDetail(String[] chargeDetail) { + this.chargeDetail = chargeDetail; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getLongitude() { + return longitude; + } + + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + + public Double getLatitude() { + return latitude; + } + + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getPklNo() { + return pklNo; + } + + public void setPklNo(String pklNo) { + this.pklNo = pklNo; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Integer getTotalberths() { + return totalberths; + } + + public void setTotalberths(Integer totalberths) { + this.totalberths = totalberths; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Integer getIdleberths() { + return idleberths; + } + + public void setIdleberths(Integer idleberths) { + this.idleberths = idleberths; + } + + public String getRatedescription() { + return ratedescription; + } + + public void setRatedescription(String ratedescription) { + this.ratedescription = ratedescription; + } + + public Double getDistance() { + return distance; + } + + public void setDistance(Double distance) { + this.distance = distance; + } + + +} \ No newline at end of file diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/BerthsAndFlowLineChartVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/BerthsAndFlowLineChartVO.java new file mode 100644 index 0000000..b1a5bb0 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/BerthsAndFlowLineChartVO.java @@ -0,0 +1,36 @@ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; +/** + * 车位空置率和车流量统计 折线图 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: BerthsAndFlowLineChartVO.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月19日 上午11:49:39 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月19日 zhaowg v1.0.0 创建 + */ +public class BerthsAndFlowLineChartVO { + + /*车位空置率*/ + private LineChartVO freeBerthRatios; + /*车流量*/ + private LineChartVO vehicleFlows; + public LineChartVO getFreeBerthRatios() { + return freeBerthRatios; + } + public void setFreeBerthRatios(LineChartVO freeBerthRatios) { + this.freeBerthRatios = freeBerthRatios; + } + public LineChartVO getVehicleFlows() { + return vehicleFlows; + } + public void setVehicleFlows(LineChartVO vehicleFlows) { + this.vehicleFlows = vehicleFlows; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeForPayTypeResVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeForPayTypeResVO.java new file mode 100644 index 0000000..2ae4925 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeForPayTypeResVO.java @@ -0,0 +1,118 @@ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/22 下午5:33 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/22 atao v1.0.0 创建 + */ +public class CustIncomeForPayTypeResVO implements Serializable { + /** + * X轴展示数据 + */ + + private List xAxisData; + /** + * 图标标题头 + */ + private List legendData; + + /** + * 具体数据 + */ + private List series; + + public List getxAxisData() { + if (null == xAxisData) { + xAxisData = new ArrayList<>(); + } + return xAxisData; + } + + public void setxAxisData(List xAxisData) { + this.xAxisData = xAxisData; + } + + public List getLegendData() { + if (null == legendData) { + legendData = new ArrayList<>(); + } + return legendData; + } + + public void setLegendData(List legendData) { + this.legendData = legendData; + } + + public List getSeries() { + if (null == series) { + series = new ArrayList<>(); + } + return series; + } + + public void setSeries( + List series) { + this.series = series; + } + + + public void addLegendData(String... legendDatas){ + for(String str :legendDatas){ + getLegendData().add(str); + } + } + + public void addXAxisData(String strig){ + getxAxisData().add(strig); + } + + public void addChildData(String name, List datas) { + ChildData childData = new ChildData(); + childData.setName(name); + childData.getData().addAll(datas); + getSeries().add(childData); + } + + private class ChildData implements Serializable { + /** + * 对应标题头的名称 + */ + private String name; + /** + * 对应标题头的数据集合 + */ + private List data; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getData() { + if (null == data) { + data = new ArrayList<>(); + } + return data; + } + + public void setData(List data) { + this.data = data; + } + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeTotalParkVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeTotalParkVO.java new file mode 100644 index 0000000..2ffcc3a --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeTotalParkVO.java @@ -0,0 +1,109 @@ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/27 下午4:14 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/27 atao v1.0.0 创建 + */ +public class CustIncomeTotalParkVO implements Serializable { + + /** + * 应收金额总计(元)=待支付+已支付总金额(order_total_fee). + */ + private String amountDueTotal; + + /** + * 逃逸金额. + */ + private String escapeAmount; + + /** + * 实收金额总计(元)=已支付/已完成总金额(order_total_fee). + */ + private String payedTotalAmount; + + /** + * 环形数据 + */ + private List loopDatas; + + public void setLoopData(Integer type, String zb) { + getLoopDatas().add(new LoopData(type, zb)); + } + + public String getAmountDueTotal() { + return amountDueTotal; + } + + public void setAmountDueTotal(String amountDueTotal) { + this.amountDueTotal = amountDueTotal; + } + + public String getEscapeAmount() { + return escapeAmount; + } + + public void setEscapeAmount(String escapeAmount) { + this.escapeAmount = escapeAmount; + } + + public String getPayedTotalAmount() { + return payedTotalAmount; + } + + public void setPayedTotalAmount(String payedTotalAmount) { + this.payedTotalAmount = payedTotalAmount; + } + + public List getLoopDatas() { + if (null == loopDatas) { + loopDatas = new ArrayList<>(); + } + return loopDatas; + } + + public void setLoopDatas(List loopDatas) { + this.loopDatas = loopDatas; + } + + class LoopData implements Serializable { + public LoopData(Integer type, String zb) { + this.type = type; + this.zb = zb; + } + + //类型 + private Integer type; + //占比 + private String zb; + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getZb() { + return zb; + } + + public void setZb(String zb) { + this.zb = zb; + } + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeTotalVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeTotalVO.java new file mode 100644 index 0000000..13d1d90 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/CustIncomeTotalVO.java @@ -0,0 +1,54 @@ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/27 下午4:51 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/27 atao v1.0.0 创建 + */ +public class CustIncomeTotalVO implements Serializable { + + + /**应收金额总计(元)=待支付+已支付总金额(order_total_fee).*/ + private String amountDueTotal; + + /**逃逸金额.*/ + private String escapeAmount; + + /**实收金额总计(元)=已支付/已完成总金额(order_total_fee).*/ + private String payedTotalAmount; + + public String getAmountDueTotal() { + return amountDueTotal; + } + + public void setAmountDueTotal(String amountDueTotal) { + this.amountDueTotal = amountDueTotal; + } + + public String getEscapeAmount() { + return escapeAmount; + } + + public void setEscapeAmount(String escapeAmount) { + this.escapeAmount = escapeAmount; + } + + public String getPayedTotalAmount() { + return payedTotalAmount; + } + + public void setPayedTotalAmount(String payedTotalAmount) { + this.payedTotalAmount = payedTotalAmount; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/LineChartVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/LineChartVO.java new file mode 100644 index 0000000..b0939d0 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/LineChartVO.java @@ -0,0 +1,82 @@ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.util.List; + +/** + * 折线图VO + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: LineChartVO.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月19日 上午11:00:17 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月19日 zhaowg v1.0.0 创建 + */ +public class LineChartVO { + + private List xAxisData; + + private List legendData; + + private List series; + + + public List getxAxisData() { + return xAxisData; + } + + + public void setxAxisData(List xAxisData) { + this.xAxisData = xAxisData; + } + + + public List getLegendData() { + return legendData; + } + + + public void setLegendData(List legendData) { + this.legendData = legendData; + } + + + public List getSeries() { + return series; + } + + + public void setSeries(List series) { + this.series = series; + } + + + public static class SerieVO{ + + private String name; + + private List data; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/OrderTransactionDetails.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/OrderTransactionDetails.java new file mode 100644 index 0000000..19595e3 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/OrderTransactionDetails.java @@ -0,0 +1,183 @@ +/** + * + */ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.math.BigDecimal; + +/** + * @author hxz + * + */ +public class OrderTransactionDetails { + private String paidTime; + private String orderNo; + private String parkinglotName; + private String plateNumber; + private String inTime; + private String outTime; + private Integer stayLong; + private String chargeRule; + private Integer payKind; + private BigDecimal amountDue; + private BigDecimal coupon; + private BigDecimal redEnvelope; + private BigDecimal paidAmount; + /** + * @return the paidTime + */ + public String getPaidTime() { + return paidTime; + } + /** + * @param paidTime the paidTime to set + */ + public void setPaidTime(String paidTime) { + this.paidTime = paidTime; + } + /** + * @return the orderNo + */ + public String getOrderNo() { + return orderNo; + } + /** + * @param orderNo the orderNo to set + */ + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + /** + * @return the parkinglotName + */ + public String getParkinglotName() { + return parkinglotName; + } + /** + * @param parkinglotName the parkinglotName to set + */ + public void setParkinglotName(String parkinglotName) { + this.parkinglotName = parkinglotName; + } + /** + * @return the plateNumber + */ + public String getPlateNumber() { + return plateNumber; + } + /** + * @param plateNumber the plateNumber to set + */ + public void setPlateNumber(String plateNumber) { + this.plateNumber = plateNumber; + } + /** + * @return the inTime + */ + public String getInTime() { + return inTime; + } + /** + * @param inTime the inTime to set + */ + public void setInTime(String inTime) { + this.inTime = inTime; + } + /** + * @return the outTime + */ + public String getOutTime() { + return outTime; + } + /** + * @param outTime the outTime to set + */ + public void setOutTime(String outTime) { + this.outTime = outTime; + } + /** + * @return the stayLong + */ + public Integer getStayLong() { + return stayLong; + } + /** + * @param stayLong the stayLong to set + */ + public void setStayLong(Integer stayLong) { + this.stayLong = stayLong; + } + /** + * @return the chargeRule + */ + public String getChargeRule() { + return chargeRule; + } + /** + * @param chargeRule the chargeRule to set + */ + public void setChargeRule(String chargeRule) { + this.chargeRule = chargeRule; + } + /** + * @return the payKind + */ + public Integer getPayKind() { + return payKind; + } + /** + * @param payKind the payKind to set + */ + public void setPayKind(Integer payKind) { + this.payKind = payKind; + } + /** + * @return the amountDue + */ + public BigDecimal getAmountDue() { + return amountDue; + } + /** + * @param amountDue the amountDue to set + */ + public void setAmountDue(BigDecimal amountDue) { + this.amountDue = amountDue; + } + /** + * @return the coupon + */ + public BigDecimal getCoupon() { + return coupon; + } + /** + * @param coupon the coupon to set + */ + public void setCoupon(BigDecimal coupon) { + this.coupon = coupon; + } + /** + * @return the redEnvelope + */ + public BigDecimal getRedEnvelope() { + return redEnvelope; + } + /** + * @param redEnvelope the redEnvelope to set + */ + public void setRedEnvelope(BigDecimal redEnvelope) { + this.redEnvelope = redEnvelope; + } + /** + * @return the paidAmount + */ + public BigDecimal getPaidAmount() { + return paidAmount; + } + /** + * @param paidAmount the paidAmount to set + */ + public void setPaidAmount(BigDecimal paidAmount) { + this.paidAmount = paidAmount; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/ParkingPlaceStatisticRatio.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/ParkingPlaceStatisticRatio.java new file mode 100644 index 0000000..dec8199 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/ParkingPlaceStatisticRatio.java @@ -0,0 +1,51 @@ +/** + * + */ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +/** + * @author hxz + * + */ +public class ParkingPlaceStatisticRatio { + private String dateStr; + private String freeRatio; + private String turnover; + + /** + * @return the dateStr + */ + public String getDateStr() { + return dateStr; + } + /** + * @param dateStr the dateStr to set + */ + public void setDateStr(String dateStr) { + this.dateStr = dateStr; + } + /** + * @return the freeRatio + */ + public String getFreeRatio() { + return freeRatio; + } + /** + * @param freeRatio the freeRatio to set + */ + public void setFreeRatio(String freeRatio) { + this.freeRatio = freeRatio; + } + /** + * @return the turnover + */ + public String getTurnover() { + return turnover; + } + /** + * @param turnover the turnover to set + */ + public void setTurnover(String turnover) { + this.turnover = turnover; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/StatisticRatioSummary.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/StatisticRatioSummary.java new file mode 100644 index 0000000..5c50820 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/StatisticRatioSummary.java @@ -0,0 +1,78 @@ +/** + * + */ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +/** + * @author hxz + * + */ +public class StatisticRatioSummary { + private String maxFreeRatio; + private String minFreeRatio; + private String maxTurnoverRatio; + private String minTurnoverRatio; + private Integer totalCount; + + /** + * @return the maxFreeRatio + */ + public String getMaxFreeRatio() { + return maxFreeRatio; + } + /** + * @param maxFreeRatio the maxFreeRatio to set + */ + public void setMaxFreeRatio(String maxFreeRatio) { + this.maxFreeRatio = maxFreeRatio; + } + /** + * @return the minFreeRatio + */ + public String getMinFreeRatio() { + return minFreeRatio; + } + /** + * @param minFreeRatio the minFreeRatio to set + */ + public void setMinFreeRatio(String minFreeRatio) { + this.minFreeRatio = minFreeRatio; + } + /** + * @return the maxTurnoverRatio + */ + public String getMaxTurnoverRatio() { + return maxTurnoverRatio; + } + /** + * @param maxTurnoverRatio the maxTurnoverRatio to set + */ + public void setMaxTurnoverRatio(String maxTurnoverRatio) { + this.maxTurnoverRatio = maxTurnoverRatio; + } + /** + * @return the minTurnoverRatio + */ + public String getMinTurnoverRatio() { + return minTurnoverRatio; + } + /** + * @param minTurnoverRatio the minTurnoverRatio to set + */ + public void setMinTurnoverRatio(String minTurnoverRatio) { + this.minTurnoverRatio = minTurnoverRatio; + } + /** + * @return the totalCount + */ + public Integer getTotalCount() { + return totalCount; + } + /** + * @param totalCount the totalCount to set + */ + public void setTotalCount(Integer totalCount) { + this.totalCount = totalCount; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionRecord.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionRecord.java new file mode 100644 index 0000000..b623d07 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionRecord.java @@ -0,0 +1,130 @@ +/** + * + */ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.math.BigDecimal; + +/** + * @author hxz + * + */ +public class TransactionRecord { + private String ID; + private String createTime; + private String parkinglotName; + private String plateNumber; + private String orderNo; + private String chargeRule; + private Integer payKind; + private BigDecimal amount; + private Integer status; + /** + * @return the iD + */ + public String getID() { + return ID; + } + /** + * @param iD the iD to set + */ + public void setID(String iD) { + ID = iD; + } + /** + * @return the createTime + */ + public String getCreateTime() { + return createTime; + } + /** + * @param createTime the createTime to set + */ + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + /** + * @return the parkinglotName + */ + public String getParkinglotName() { + return parkinglotName; + } + /** + * @param parkinglotName the parkinglotName to set + */ + public void setParkinglotName(String parkinglotName) { + this.parkinglotName = parkinglotName; + } + /** + * @return the plateNumber + */ + public String getPlateNumber() { + return plateNumber; + } + /** + * @param plateNumber the plateNumber to set + */ + public void setPlateNumber(String plateNumber) { + this.plateNumber = plateNumber; + } + /** + * @return the orderNo + */ + public String getOrderNo() { + return orderNo; + } + /** + * @param orderNo the orderNo to set + */ + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + /** + * @return the chargeRule + */ + public String getChargeRule() { + return chargeRule; + } + /** + * @param chargeRule the chargeRule to set + */ + public void setChargeRule(String chargeRule) { + this.chargeRule = chargeRule; + } + /** + * @return the payKind + */ + public Integer getPayKind() { + return payKind; + } + /** + * @param payKind the payKind to set + */ + public void setPayKind(Integer payKind) { + this.payKind = payKind; + } + /** + * @return the amount + */ + public BigDecimal getAmount() { + return amount; + } + /** + * @param amount the amount to set + */ + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + /** + * @return the status + */ + public Integer getStatus() { + return status; + } + /** + * @param status the status to set + */ + public void setStatus(Integer status) { + this.status = status; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionRequestObject.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionRequestObject.java new file mode 100644 index 0000000..1945732 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionRequestObject.java @@ -0,0 +1,102 @@ +/** + * + */ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +/** + * @author hxz + * + */ +public class TransactionRequestObject { + private String beginTime; + private String endTime; + private String parkinglotID; + private Integer payKind; + private Integer recKind; + private Integer pageNum; + private Integer recsCount; + /** + * @return the beginTime + */ + public String getBeginTime() { + return beginTime; + } + /** + * @param beginTime the beginTime to set + */ + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + /** + * @return the endTime + */ + public String getEndTime() { + return endTime; + } + /** + * @param endTime the endTime to set + */ + public void setEndTime(String endTime) { + this.endTime = endTime; + } + /** + * @return the parkinglotID + */ + public String getParkinglotID() { + return parkinglotID; + } + /** + * @param parkinglotID the parkinglotID to set + */ + public void setParkinglotID(String parkinglotID) { + this.parkinglotID = parkinglotID; + } + /** + * @return the payKind + */ + public Integer getPayKind() { + return payKind; + } + /** + * @param payKind the payKind to set + */ + public void setPayKind(Integer payKind) { + this.payKind = payKind; + } + /** + * @return the recKind + */ + public Integer getRecKind() { + return recKind; + } + /** + * @param recKind the recKind to set + */ + public void setRecKind(Integer recKind) { + this.recKind = recKind; + } + /** + * @return the pageNum + */ + public Integer getPageNum() { + return pageNum; + } + /** + * @param pageNum the pageNum to set + */ + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + /** + * @return the recsCount + */ + public Integer getRecsCount() { + return recsCount; + } + /** + * @param recsCount the recsCount to set + */ + public void setRecsCount(Integer recsCount) { + this.recsCount = recsCount; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionStatisticSummary.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionStatisticSummary.java new file mode 100644 index 0000000..0f7b998 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotcloudplatform/datastatistic/TransactionStatisticSummary.java @@ -0,0 +1,92 @@ +/** + * + */ +package com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic; + +import java.math.BigDecimal; + +/** + * @author hxz + * + */ +public class TransactionStatisticSummary { + private Integer transactionsNum; + private BigDecimal amountDueTotal; + private BigDecimal amountOfReliefTotal; + private Integer escapeCount; + private BigDecimal paidAmountTotal; + private Integer totalCount; + + /** + * @return the transactionsNum + */ + public Integer getTransactionsNum() { + return transactionsNum; + } + /** + * @param transactionsNum the transactionsNum to set + */ + public void setTransactionsNum(Integer transactionsNum) { + this.transactionsNum = transactionsNum; + } + /** + * @return the amountDueTotal + */ + public BigDecimal getAmountDueTotal() { + return amountDueTotal; + } + /** + * @param amountDueTotal the amountDueTotal to set + */ + public void setAmountDueTotal(BigDecimal amountDueTotal) { + this.amountDueTotal = amountDueTotal; + } + /** + * @return the amountOfReliefTotal + */ + public BigDecimal getAmountOfReliefTotal() { + return amountOfReliefTotal; + } + /** + * @param amountOfReliefTotal the amountOfReliefTotal to set + */ + public void setAmountOfReliefTotal(BigDecimal amountOfReliefTotal) { + this.amountOfReliefTotal = amountOfReliefTotal; + } + /** + * @return the escapeCount + */ + public Integer getEscapeCount() { + return escapeCount; + } + /** + * @param escapeCount the escapeCount to set + */ + public void setEscapeCount(Integer escapeCount) { + this.escapeCount = escapeCount; + } + /** + * @return the paidAmountTotal + */ + public BigDecimal getPaidAmountTotal() { + return paidAmountTotal; + } + /** + * @param paidAmountTotal the paidAmountTotal to set + */ + public void setPaidAmountTotal(BigDecimal paidAmountTotal) { + this.paidAmountTotal = paidAmountTotal; + } + /** + * @return the totalCount + */ + public Integer getTotalCount() { + return totalCount; + } + /** + * @param totalCount the totalCount to set + */ + public void setTotalCount(Integer totalCount) { + this.totalCount = totalCount; + } +} \ No newline at end of file diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/BerthSpaceRatioVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/BerthSpaceRatioVO.java new file mode 100644 index 0000000..479e162 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/BerthSpaceRatioVO.java @@ -0,0 +1,60 @@ +package com.zteits.irain.portal.vo.parkinglotdatacenter; + +import java.util.List; + + +/** + * + * 车位配比 + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: BerthSpaceRatioVO.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年7月11日 下午6:43:47 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月11日 langlw v1.0.0 创建 + */ +public class BerthSpaceRatioVO { + + private List berthSpaceRatio; + public static class BerthSeriesVO{ + + private String name; + + private Double data; + + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getData() { + return data; + } + + public void setData(Double data) { + this.data = data; + } + + + + } + public List getBerthSpaceRatio() { + return berthSpaceRatio; + } + public void setBerthSpaceRatio(List berthSpaceRatio) { + this.berthSpaceRatio = berthSpaceRatio; + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java new file mode 100644 index 0000000..399c62f --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java @@ -0,0 +1,41 @@ +package com.zteits.irain.portal.vo.parkinglotdatacenter; + +import java.util.List; +import java.util.Map; + + +/** + * + * 停车场数量和停车位数量 vo + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ColumnChartVO.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年7月6日 下午3:50:17 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月6日 langlw v1.0.0 创建 + */ +public class ParkLotAndBerthsCountVO { + //key:区县名称,value:车位数 + private Map pkberthsCount; + //key:区县名称,value:停车场数 + private Map pkCount; + public Map getPkberthsCount() { + return pkberthsCount; + } + public void setPkberthsCount(Map pkberthsCount) { + this.pkberthsCount = pkberthsCount; + } + public Map getPkCount() { + return pkCount; + } + public void setPkCount(Map pkCount) { + this.pkCount = pkCount; + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/FirstGuideInfoVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/FirstGuideInfoVO.java new file mode 100644 index 0000000..8ab2e2e --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/FirstGuideInfoVO.java @@ -0,0 +1,156 @@ +package com.zteits.irain.portal.vo.parkinglotdatacenter.guide; + +import java.util.ArrayList; +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotdatacenter.guide + * @Description: 一级诱导展示信息 + * @version: v1.0.0 + * @author: atao + * @date: 2017/7/11 下午3:27 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/7/11 atao v1.0.0 创建 + */ +public class FirstGuideInfoVO extends GuideInfoVO { + /** + * 一级诱导展示图片路径 + */ + private String filePath; + + private List configs; + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public List getConfigs() { + return configs; + } + + public void setConfigs( + List configs) { + this.configs = configs; + } + + public void setConfigs(String plNo, Integer plNameHeight, Integer plNameWidth, Integer freeHeight, + Integer freeWidth, Integer freeNum, Integer allBerthNum) { + if (null == configs) { + configs = new ArrayList<>(); + } + configs.add(new GuideFirstConfigDetail(plNo, plNameHeight, plNameWidth, freeHeight, + freeWidth, freeNum, allBerthNum)); + } + + class GuideFirstConfigDetail { + public GuideFirstConfigDetail(String plNo, Integer plNameHeight, Integer plNameWidth, Integer freeHeight, + Integer freeWidth, Integer freeNum, Integer allBerthNum) { + this.plNo = plNo; + this.plNameHeight = plNameHeight; + this.plNameWidth = plNameWidth; + this.freeHeight = freeHeight; + this.freeWidth = freeWidth; + this.freeNum = freeNum; + this.allBerthNum = allBerthNum; + } + + /** + * 所属停车场编码. + */ + private String plNo; + + /** + * 距离左上角顶点 停车场名称高度 单位:像素. + */ + private Integer plNameHeight; + + /** + * 距离左上角顶点 停车场名称宽度 单位:像素. + */ + private Integer plNameWidth; + + /** + * 距离左上角顶点 空余停车位高度 单位:像素. + */ + private Integer freeHeight; + + /** + * 距离左上角顶点 空余停车位宽度 单位:像素. + */ + private Integer freeWidth; + + /** + * 空余车位数 + */ + private Integer freeNum; + + /** + * 停车场停车位总量 + */ + private Integer allBerthNum; + + public String getPlNo() { + return plNo; + } + + public void setPlNo(String plNo) { + this.plNo = plNo; + } + + public Integer getPlNameHeight() { + return plNameHeight; + } + + public void setPlNameHeight(Integer plNameHeight) { + this.plNameHeight = plNameHeight; + } + + public Integer getPlNameWidth() { + return plNameWidth; + } + + public void setPlNameWidth(Integer plNameWidth) { + this.plNameWidth = plNameWidth; + } + + public Integer getFreeHeight() { + return freeHeight; + } + + public void setFreeHeight(Integer freeHeight) { + this.freeHeight = freeHeight; + } + + public Integer getFreeWidth() { + return freeWidth; + } + + public void setFreeWidth(Integer freeWidth) { + this.freeWidth = freeWidth; + } + + public Integer getFreeNum() { + return freeNum; + } + + public void setFreeNum(Integer freeNum) { + this.freeNum = freeNum; + } + + public Integer getAllBerthNum() { + return allBerthNum; + } + + public void setAllBerthNum(Integer allBerthNum) { + this.allBerthNum = allBerthNum; + } + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/GuideInfoVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/GuideInfoVO.java new file mode 100644 index 0000000..5e24953 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/GuideInfoVO.java @@ -0,0 +1,44 @@ +package com.zteits.irain.portal.vo.parkinglotdatacenter.guide; + +import java.io.Serializable; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotdatacenter.guide + * @Description: 诱导屏基础信息 + * @version: v1.0.0 + * @author: atao + * @date: 2017/7/11 下午3:21 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/7/11 atao v1.0.0 创建 + */ +public class GuideInfoVO implements Serializable { + /** + * 诱导屏编码 + */ + private String guideNo; + + /** + * 诱导屏级别 + */ + private Integer level; + + public String getGuideNo() { + return guideNo; + } + + public void setGuideNo(String guideNo) { + this.guideNo = guideNo; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/SecondGuideInfoVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/SecondGuideInfoVO.java new file mode 100644 index 0000000..9002b47 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/SecondGuideInfoVO.java @@ -0,0 +1,109 @@ +package com.zteits.irain.portal.vo.parkinglotdatacenter.guide; + +import java.util.ArrayList; +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotdatacenter.guide + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/7/11 下午3:33 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/7/11 atao v1.0.0 创建 + */ +public class SecondGuideInfoVO extends GuideInfoVO { + + /** + * 二级诱导屏详细信息 + */ + List guideInfos; + + public List getGuideInfos() { + return guideInfos; + } + + public void setGuideInfos(List guideInfos) { + this.guideInfos = guideInfos; + } + + public void addGuideDetail(String plNo, String plName, Integer freeNum, Integer guidePoint) { + if (null == guideInfos) { + guideInfos = new ArrayList<>(); + } + GuideDetail guideDetail = new GuideDetail(plNo, plName, freeNum, guidePoint); + guideInfos.add(guideDetail); + + } + +} + +class GuideDetail { + + /** + * 停车场编码 + */ + private String plNo; + + /** + * 停车场名称 + */ + private String plName; + /** + * 空余车位数 + */ + private Integer freeNum; + + /** + * 诱导指向 + */ + private Integer guidePoint; + + public GuideDetail() { + } + + public GuideDetail(String plNo, String plName, Integer freeNum, Integer guidePoint) { + this.plNo = plNo; + this.plName = plName; + this.freeNum = freeNum; + this.guidePoint = guidePoint; + } + + public String getPlNo() { + return plNo; + } + + public void setPlNo(String plNo) { + this.plNo = plNo; + } + + public String getPlName() { + return plName; + } + + public void setPlName(String plName) { + this.plName = plName; + } + + public Integer getFreeNum() { + return freeNum; + } + + public void setFreeNum(Integer freeNum) { + this.freeNum = freeNum; + } + + public Integer getGuidePoint() { + return guidePoint; + } + + public void setGuidePoint(Integer guidePoint) { + this.guidePoint = guidePoint; + } +} + + diff --git b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/ThirdGuidInfoVO.java a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/ThirdGuidInfoVO.java new file mode 100644 index 0000000..514ee6d --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/guide/ThirdGuidInfoVO.java @@ -0,0 +1,107 @@ +package com.zteits.irain.portal.vo.parkinglotdatacenter.guide; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.vo.parkinglotdatacenter.guide + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/7/11 下午3:52 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/7/11 atao v1.0.0 创建 + */ +public class ThirdGuidInfoVO extends GuideInfoVO { + + /** + * 空余车位数 + */ + private Integer freeNum; + + /** + * 限高:0-不限,1-限高. + */ + private Integer highLimitStatus; + + /** + * 限高:单位米. + */ + private Integer highLimitNum; + + /** + * 急转弯:0-不是,1-是. + */ + private Integer sharpTurnStatus; + + /** + * 0:12小时制 1:24小时制. + */ + private String timeSystem; + + /** + * 停车场楼层位置状态 0-无,1-有 + */ + private Integer floorStatus; + /** + * 停车场楼层位置 + */ + private String floor; + + public Integer getFreeNum() { + return freeNum; + } + + public void setFreeNum(Integer freeNum) { + this.freeNum = freeNum; + } + + public Integer getHighLimitStatus() { + return highLimitStatus; + } + + public void setHighLimitStatus(Integer highLimitStatus) { + this.highLimitStatus = highLimitStatus; + } + + public Integer getHighLimitNum() { + return highLimitNum; + } + + public void setHighLimitNum(Integer highLimitNum) { + this.highLimitNum = highLimitNum; + } + + public Integer getSharpTurnStatus() { + return sharpTurnStatus; + } + + public void setSharpTurnStatus(Integer sharpTurnStatus) { + this.sharpTurnStatus = sharpTurnStatus; + } + + public String getTimeSystem() { + return timeSystem; + } + + public void setTimeSystem(String timeSystem) { + this.timeSystem = timeSystem; + } + + public Integer getFloorStatus() { + return floorStatus; + } + + public void setFloorStatus(Integer floorStatus) { + this.floorStatus = floorStatus; + } + + public String getFloor() { + return floor; + } + + public void setFloor(String floor) { + this.floor = floor; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/qingdao/RespondMessage.java a/src/main/java/com/zteits/irain/portal/vo/qingdao/RespondMessage.java new file mode 100644 index 0000000..ab8e114 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/qingdao/RespondMessage.java @@ -0,0 +1,38 @@ +/** + * + */ +package com.zteits.irain.portal.vo.qingdao; + +/** + * @author hxz + * + */ +public class RespondMessage { + private String status; + private String errorCode; + + /** + * @return the status + */ + public String getStatus() { + return status; + } + /** + * @param status the status to set + */ + public void setStatus(String status) { + this.status = status; + } + /** + * @return the errorCode + */ + public String getErrorCode() { + return errorCode; + } + /** + * @param errorCode the errorCode to set + */ + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } +} diff --git b/src/main/java/com/zteits/irain/portal/vo/qingdao/eqppossync/GeoTotalNumSyncReq.java a/src/main/java/com/zteits/irain/portal/vo/qingdao/eqppossync/GeoTotalNumSyncReq.java new file mode 100644 index 0000000..1b1d689 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/qingdao/eqppossync/GeoTotalNumSyncReq.java @@ -0,0 +1,36 @@ +package com.zteits.irain.portal.vo.qingdao.eqppossync; + +import java.util.List; + +public class GeoTotalNumSyncReq { + private Integer numonline; + + private Integer numoffline; + + private List parkingNolist; + + public Integer getNumonline() { + return numonline; + } + + public void setNumonline(Integer numonline) { + this.numonline = numonline; + } + + public Integer getNumoffline() { + return numoffline; + } + + public void setNumoffline(Integer numoffline) { + this.numoffline = numoffline; + } + + public List getParkingNolist() { + return parkingNolist; + } + + public void setParkingNolist(List parkingNolist) { + this.parkingNolist = parkingNolist; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/qingdao/eqppossync/PosTotalNumSyncReq.java a/src/main/java/com/zteits/irain/portal/vo/qingdao/eqppossync/PosTotalNumSyncReq.java new file mode 100644 index 0000000..9c76eda --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/qingdao/eqppossync/PosTotalNumSyncReq.java @@ -0,0 +1,25 @@ +package com.zteits.irain.portal.vo.qingdao.eqppossync; + +public class PosTotalNumSyncReq { + private Integer numinuse; + + private Integer numunused; + + public Integer getNuminuse() { + return numinuse; + } + + public void setNuminuse(Integer numinuse) { + this.numinuse = numinuse; + } + + public Integer getNumunused() { + return numunused; + } + + public void setNumunused(Integer numunused) { + this.numunused = numunused; + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/vo/qingdao/inoutpark/QDInOutParkReq.java a/src/main/java/com/zteits/irain/portal/vo/qingdao/inoutpark/QDInOutParkReq.java new file mode 100644 index 0000000..38c4931 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/vo/qingdao/inoutpark/QDInOutParkReq.java @@ -0,0 +1,139 @@ +package com.zteits.irain.portal.vo.qingdao.inoutpark; +/** + * 青岛进出场上报对应报文 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: QDInOutParkReq.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月22日 下午2:36:04 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月22日 zhaowg v1.0.0 创建 + */ +public class QDInOutParkReq { + /** + * 车牌编号 + */ + private String vehicleNo; + private String inOut; + private String inTime; + private String outTime; + /** + * 进出场图片 + */ + private String inImageName; + /** + * 车场编号 + */ + private String parkinglotNo; + /** + * 订单编号 + */ + private String orderNo; + /** + * 付款金额 + */ + private Float amount; + /** + * 应付金额 + */ + private Float recAmount; + /** + * 空闲车位 + */ + private Integer free; + /** + * 支付类型 + */ + private Integer payType; + private String description; + /** + * 车位编码 + */ + private String parkingNo; + + public String getVehicleNo() { + return vehicleNo; + } + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + public String getInOut() { + return inOut; + } + public void setInOut(String inOut) { + this.inOut = inOut; + } + public String getInTime() { + return inTime; + } + public void setInTime(String inTime) { + this.inTime = inTime; + } + public String getOutTime() { + return outTime; + } + public void setOutTime(String outTime) { + this.outTime = outTime; + } + public String getInImageName() { + return inImageName; + } + public void setInImageName(String inImageName) { + this.inImageName = inImageName; + } + public String getParkinglotNo() { + return parkinglotNo; + } + public void setParkinglotNo(String parkinglotNo) { + this.parkinglotNo = parkinglotNo; + } + public String getOrderNo() { + return orderNo; + } + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public Float getAmount() { + return amount; + } + public void setAmount(Float amount) { + this.amount = amount; + } + public Float getRecAmount() { + return recAmount; + } + public void setRecAmount(Float recAmount) { + this.recAmount = recAmount; + } + public Integer getFree() { + return free; + } + public void setFree(Integer free) { + this.free = free; + } + + public Integer getPayType() { + return payType; + } + public void setPayType(Integer payType) { + this.payType = payType; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public String getParkingNo() { + return parkingNo; + } + public void setParkingNo(String parkingNo) { + this.parkingNo = parkingNo; + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/HomeController.java a/src/main/java/com/zteits/irain/portal/web/HomeController.java new file mode 100644 index 0000000..ac7b260 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/HomeController.java @@ -0,0 +1,14 @@ +package com.zteits.irain.portal.web; + +import com.clouds.common.annotation.NoAuth; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@NoAuth(desc = "swagger api接口显示 无需权限校验") +public class HomeController { + @RequestMapping("/") + public String home() { + return "redirect:swagger-ui.html"; + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/InductionController.java a/src/main/java/com/zteits/irain/portal/web/InductionController.java new file mode 100644 index 0000000..588e233 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/InductionController.java @@ -0,0 +1,37 @@ +package com.zteits.irain.portal.web; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.irain.portal.service.interfaces.induction.InductionService; +import com.zteits.irain.portal.service.interfaces.induction.param.DoLevelTwoAndThreeInductionReleaseBatchRequest; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +@Api(value = "诱导服务",description="诱导服务") +@RestController +@RequestMapping("induction") +public class InductionController { + @Autowired + private InductionService inductionService; + + @ApiOperation("二级、三级诱导批量发布") + @PostMapping("doLevelTwoAndThreeInductionReleaseBatch") + public BizResultVO doLevelTwoAndThreeInductionReleaseBatch(@RequestBody DoLevelTwoAndThreeInductionReleaseBatchRequest request){ + BizResultVO bizResultVO = inductionService.doLevelTwoAndThreeInductionReleaseBatch(request); + return bizResultVO; + } + + @ApiOperation("一级诱导发布回显") + @PostMapping("showLevelOneInductionRelease") + public BizResultVO showLevelOneInductionRelease(@ApiParam("诱导设备编号")@RequestParam String eqpCode){ + BizResultVO bizResultVO = inductionService.showLevelOneInductionRelease(eqpCode); + return bizResultVO; + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/RefreshCacheController.java a/src/main/java/com/zteits/irain/portal/web/RefreshCacheController.java new file mode 100644 index 0000000..3467999 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/RefreshCacheController.java @@ -0,0 +1,98 @@ +package com.zteits.irain.portal.web; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.clouds.common.cache.park.ParkFreeBerthsCacheUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.dto.park.param.RefreshParkCacheRequest; +import com.zteits.clouds.api.dto.sys.param.RefreshSysCacheRequest; +import com.zteits.clouds.api.service.park.RefreshParkCacheService; +import com.zteits.clouds.api.service.sys.RefreshSysCacheService; +import com.zteits.irain.portal.service.impl.induction.InductionServiceImpl; +import com.zteits.irain.portal.service.interfaces.induction.InductionService; +import com.zteits.irain.portal.service.interfaces.induction.param.DoLevelTwoAndThreeInductionReleaseBatchRequest; +import com.zteits.irain.portal.service.interfaces.induction.param.InductionRelease; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; + +/** + * 刷新缓存 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: RefreshCacheController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年7月10日 下午2:42:04 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月10日 zhaowg v1.0.0 创建 + */ +@Api(value="刷新缓存",description="刷新缓存") +@RestController +public class RefreshCacheController{ + private static final Logger logger = LoggerFactory.getLogger(RefreshCacheController.class); + + @Autowired + private RefreshParkCacheService refreshParkCacheService; + @Autowired + private RefreshSysCacheService refreshSysCacheService ; + @Autowired + private InductionService inductionService; + + @ApiOperation(value="刷新PARK缓存") + @PostMapping("refreshParkCache") + public BizResultVO RefreshParkCacheService(@RequestParam @ApiParam("-1:全部刷新;2:刷新停车场信息;3:刷新经纬度信息;4:刷新空闲车位信息;5:刷新艾润停车场编号对应关系")Integer type){ + RefreshParkCacheRequest request = new RefreshParkCacheRequest(); + request.setSysCode("PARK"); + request.setType(type); + BizResult bizResult = refreshParkCacheService.refreshCache(request ); + return new BizResultVO(bizResult); + + } + @ApiOperation(value="刷新SYS缓存") + @PostMapping("refreshSysCache") + public BizResultVO RefreshSysCacheService(@RequestParam @ApiParam("-1:全部刷新;1:刷新字典表")Integer type){ + RefreshSysCacheRequest request = new RefreshSysCacheRequest(); + request.setSysCode("PARK"); + request.setType(type); + BizResult bizResult = refreshSysCacheService.refreshSysCache(request ); + return new BizResultVO(bizResult); + } + + @ApiOperation("更新空闲车位数") + @PostMapping("updateFreeBerths") + public BizResultVO UpdateFreeBerths(@RequestParam @ApiParam("停车场编号") String plNo, + @RequestParam @ApiParam("空闲车位数")Integer freeBerths){ + logger.info("更新空闲车位数,车位编码:"+plNo+" 空闲车位数:"+freeBerths); + ParkFreeBerthsCacheUtil.setFreeBerthsByPlNo(plNo, freeBerths); + DoLevelTwoAndThreeInductionReleaseBatchRequest releaseBatchRequest = new DoLevelTwoAndThreeInductionReleaseBatchRequest(); + List list = new ArrayList<>(); + //传固定值 + InductionRelease inductionRelease = new InductionRelease(); + inductionRelease.setOwner_code("1001"); + inductionRelease.setRange_code(plNo); + inductionRelease.setBerth_left(String.valueOf(freeBerths)); + inductionRelease.setParking_code(plNo); + list.add(inductionRelease); + releaseBatchRequest.setJsonStr(list); + BizResultVO bizResultVO = inductionService.doLevelTwoAndThreeInductionReleaseBatch(releaseBatchRequest ); + //查询空闲车位数 + Integer integer = ParkFreeBerthsCacheUtil.getFreeBerthsByPlNo(plNo); + return new BizResultVO().setData(integer); + + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/ebochong/receive/EBoChongReceiveController.java a/src/main/java/com/zteits/irain/portal/web/ebochong/receive/EBoChongReceiveController.java new file mode 100644 index 0000000..16c330e --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/ebochong/receive/EBoChongReceiveController.java @@ -0,0 +1,305 @@ +package com.zteits.irain.portal.web.ebochong.receive; + +import java.io.BufferedReader; +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.fastjson.JSONObject; + +import com.clouds.common.utils.EBoChongAESUtil; +import com.clouds.common.utils.ResultUtils; +import com.xiaoleilu.hutool.date.DateUtil; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.FreeBerthNumUpdateByFreeBerthNumRequest; +import com.zteits.clouds.api.dto.park.param.InParkingRequest; +import com.zteits.clouds.api.dto.park.param.InterfaceLogSaveRequest; +import com.zteits.clouds.api.dto.park.param.OutParkingRequest; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; +import com.zteits.clouds.api.service.park.IInOutParkingService; +import com.zteits.clouds.api.service.park.InterfaceLogService; +import com.zteits.clouds.api.service.park.ParkFreeBerthService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.irain.portal.constant.ParkConstant.InterfaceLog; +import com.zteits.irain.portal.constant.ParkConstant.InterfaceLog.Type; +import com.zteits.irain.portal.vo.ebochong.EBoChongEnum; +import com.zteits.irain.portal.vo.ebochong.receive.ChargeListReq; +import com.zteits.irain.portal.vo.ebochong.receive.ChargeListRes; +import com.zteits.irain.portal.vo.ebochong.receive.CommonRes; +import com.zteits.irain.portal.vo.ebochong.receive.HandledVehicleInfoReq; +import com.zteits.irain.portal.vo.ebochong.receive.HandledVehicleInfoRes; +import com.zteits.irain.portal.vo.ebochong.receive.RemainingInfoReq; +import com.zteits.irain.portal.vo.ebochong.receive.RemainingInfoRes; +import com.zteits.irain.portal.vo.ebochong.receive.ResendVehicleInfoReq; +import com.zteits.irain.portal.vo.ebochong.receive.ResendVehicleInfoRes; +import com.zteits.irain.portal.vo.ebochong.receive.UnhandledVehicleInfoReq; +import com.zteits.irain.portal.vo.ebochong.receive.UnhandledVehicleInfoRes; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.web.ebochong.receive + * @Description: 易泊冲 数据接收 接口 + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/22 下午4:57 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/22 atao v1.0.0 创建 + */ +@Api(value = "杰商上报接口") +@RestController +@RequestMapping("/ebochong") +public class EBoChongReceiveController { + + @Value("${project.syscode}") + private String sysCode; + + @Autowired + private ParkFreeBerthService parkFreeBerthService; + @Autowired + private IInOutParkingService iInOutParkingService; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + + @Autowired + private InterfaceLogService interfaceLogService; + + @Value("${ebochong.key}") + private String key; + + private static final Logger logger = LoggerFactory.getLogger(EBoChongReceiveController.class); + + @ApiOperation("发送未处理过车信息") + @PostMapping("/SendUnhandledVehicleInfo") + public void SendUnhandledVehicleInfo(HttpServletRequest request, HttpServletResponse response) { + String data = getRequestBody(request); + logger.info("===发送未处理过车信息 data={}", data); + try { + data = EBoChongAESUtil.decryptAES(data, key); + } catch (Exception e) { + e.printStackTrace(); + } + logger.info("===发送未处理过车信息 解密后data={}", data); + UnhandledVehicleInfoReq req = JSONObject.parseObject(data, UnhandledVehicleInfoReq.class); + logger.info("===发送未处理过车信息 格式化对象 req={}", JSONObject.toJSONString(req)); + + UnhandledVehicleInfoRes res = new UnhandledVehicleInfoRes(); + res.setCommand(EBoChongEnum.COMMAND_GO.val()); + res.setCreditLimit("100"); + res.setMessage("测试"); + logger.info("===发送未处理过车信息 res={}", JSONObject.toJSONString(res)); + setResponse(response, res); + } + + @ApiOperation("发送已处理过车信息") + @PostMapping("/SendHandledVehicleInfo") + public void SendHandledVehicleInfo(HttpServletRequest request, HttpServletResponse response) { + + BaseInfo baseInfo = new BaseInfo(); + String requestId = baseInfo.getRequestId(); + String entryReq = getRequestBody(request); + logger.info("===发送已处理过车信息 data={}", entryReq); + String data = EBoChongAESUtil.decryptAES(entryReq, key); + logger.info("===发送已处理过车信息 解密后data={}", data); + HandledVehicleInfoReq req = JSONObject.parseObject(data, HandledVehicleInfoReq.class); + logger.info("===发送已处理过车信息 格式化对象 req={}", JSONObject.toJSONString(req)); + + //记录日志 + InterfaceLogSaveRequest logSaveRequest = new InterfaceLogSaveRequest(sysCode, baseInfo, + InterfaceLog.Type.TYPE_IN_PARKING, data, InterfaceLog.FromType.JIESHANG); + //设置未解密的字符串 + logSaveRequest.setEncryptParam(entryReq); + //设置未同步 + logSaveRequest.setSyncStatus(1); + + if (req.getCarOut() == 0) { + logSaveRequest.setType(InterfaceLog.Type.TYPE_IN_PARKING); + //入场 + InParkingRequest inParkingRequest = new InParkingRequest(); + inParkingRequest.setSysCode("123456"); + inParkingRequest.setCardno(req.getCardNo()); + inParkingRequest.setFreeBerths(req.getRemaining()); + inParkingRequest.setFromType(4); + inParkingRequest.setInArmCode(""); + inParkingRequest.setInTime(DateUtil.parse(req.getInTime())); + inParkingRequest.setParkCode(req.getParkIndex()); + inParkingRequest.setRecordId(req.getUuid()); + inParkingRequest.setPlNo(req.getParkIndex()); + inParkingRequest.setVplNumber(req.getPlateNo()); + inParkingRequest.setPlName(queryParkingLotNameByPlNo(req.getParkIndex())); + logger.info("===调用dubbo服务停车记录保存 dubboReq={}", JSONObject.toJSONString(inParkingRequest)); + BizResult bizResult = iInOutParkingService.SaveIRainInParking(inParkingRequest); + logger.info("===调用dubbo服务停车记录保存 dubboRes={}", JSONObject.toJSONString(bizResult)); + } else { + logSaveRequest.setType(Type.TYPE_OUT_PARKING); + //出场 + OutParkingRequest outParkingRequest = new OutParkingRequest(); + outParkingRequest.setSysCode("123456"); + outParkingRequest.setCardno(req.getCardNo()); + outParkingRequest.setFreeBerths(req.getRemaining()); + outParkingRequest.setFromType(4); + outParkingRequest.setInTime(DateUtil.parse(req.getInTime())); + outParkingRequest.setParkCode(req.getParkIndex()); + outParkingRequest.setRecordId(req.getUuid()); + outParkingRequest.setPlNo(req.getParkIndex()); + outParkingRequest.setVplNumber(req.getPlateNo()); + outParkingRequest.setPlName(queryParkingLotNameByPlNo(req.getParkIndex())); + logger.info("===调用dubbo服务停车记录保存 dubboReq={}", JSONObject.toJSONString(outParkingRequest)); + BizResult bizResult = iInOutParkingService.SaveIRainOutParking(outParkingRequest); + logger.info("===调用dubbo服务停车记录保存 dubboRes={}", JSONObject.toJSONString(bizResult)); + } + + HandledVehicleInfoRes res = new HandledVehicleInfoRes(); + res.setMessage("测试"); + res.setCode(EBoChongEnum.CODE_SUCCESS.val()); + logger.info("===发送已处理过车信息 res={}", JSONObject.toJSONString(res)); + + try { + FreeBerthNumUpdateByFreeBerthNumRequest dubboReq = new FreeBerthNumUpdateByFreeBerthNumRequest(); + dubboReq.setPlNo(req.getParkIndex()); + dubboReq.setFreeBerthNum(req.getRemaining()); + dubboReq.setSysCode("123456"); + logger.info("===调用dubbo服务更新空余车位信息 dubboReq={}", JSONObject.toJSONString(dubboReq)); + BizResult result = parkFreeBerthService.updateFreeBerthNumByFreeBerthNum(dubboReq); + logger.info("===调用dubbo服务更新空余车位信息 dubboRes={}", JSONObject.toJSONString(result)); + //保存接口日志 + interfaceLogService.SaveInterfaceLog(logSaveRequest); + } catch (Exception e) { + logger.info("===更新空余车位数捕获异常", e); + } + + setResponse(response, res); + + } + + @ApiOperation("发送剩余停车位信息") + @PostMapping("/SendRemainingInfo") + public void SendRemainingInfo(HttpServletRequest request, HttpServletResponse response) { + String data = getRequestBody(request); + logger.info("===发送剩余停车位信息 data={}", data); + data = EBoChongAESUtil.decryptAES(data, key); + logger.info("===发送剩余停车位信息 解密后data={}", data); + RemainingInfoReq req = JSONObject.parseObject(data, RemainingInfoReq.class); + logger.info("===发送剩余停车位信息 格式化对象 req={}", JSONObject.toJSONString(req)); + FreeBerthNumUpdateByFreeBerthNumRequest dubboReq = new FreeBerthNumUpdateByFreeBerthNumRequest(); + dubboReq.setPlNo(req.getParkIndex()); + dubboReq.setFreeBerthNum(req.getRemaining()); + dubboReq.setSysCode("123456"); + logger.info("===调用dubbo服务更新空余车位信息 dubboReq={}", JSONObject.toJSONString(dubboReq)); + BizResult result = parkFreeBerthService.updateFreeBerthNumByFreeBerthNum(dubboReq); + logger.info("===调用dubbo服务更新空余车位信息 dubboRes={}", JSONObject.toJSONString(result)); + RemainingInfoRes res = new RemainingInfoRes(); + res.setMessage("测试"); + res.setCode(EBoChongEnum.CODE_SUCCESS.val()); + logger.info("===发送剩余停车位信息 res={}", JSONObject.toJSONString(res)); + setResponse(response, res); + } + + @ApiOperation("发送停车场对账信息") + @PostMapping("/SendChargeList") + public void SendChargeList(HttpServletRequest request, HttpServletResponse response) { + String data = getRequestBody(request); + logger.info("===发送停车场对账信息 data={}", data); + data = EBoChongAESUtil.decryptAES(data, key); + logger.info("===发送停车场对账信息 解密后data={}", data); + ChargeListReq req = JSONObject.parseObject(data, ChargeListReq.class); + logger.info("===发送停车场对账信息 格式化对象 req={}", JSONObject.toJSONString(req)); + + ChargeListRes res = new ChargeListRes(); + res.setMessage("测试"); + res.setCode(EBoChongEnum.CODE_SUCCESS.val()); + logger.info("===发送停车场对账信息 res={}", JSONObject.toJSONString(res)); + setResponse(response, res); + } + + @ApiOperation("补发过车信息") + @PostMapping("/ResendVehicleInfo") + public void ResendVehicleInfo(HttpServletRequest request, HttpServletResponse response) { + String data = getRequestBody(request); + logger.info("===补发过车信息 data={}", data); + data = EBoChongAESUtil.decryptAES(data, key); + logger.info("===补发过车信息 解密后data={}", data); + ResendVehicleInfoReq req = JSONObject.parseObject(data, ResendVehicleInfoReq.class); + logger.info("===补发过车信息 格式化对象 req={}", JSONObject.toJSONString(req)); + + ResendVehicleInfoRes res = new ResendVehicleInfoRes(); + res.setSendNo(req.getSendNo()); + res.setMessage("测试"); + res.setCode(EBoChongEnum.CODE_SUCCESS.val()); + logger.info("===补发过车信息 res={}", JSONObject.toJSONString(res)); + setResponse(response, res); + } + + private String getRequestBody(HttpServletRequest request) { + StringBuffer sb = new StringBuffer(); + String line; + BufferedReader reader = null; + try { + reader = request.getReader(); + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + logger.info("杰商 接收数据报错====="); + e.printStackTrace(); + } + + String jbstring = sb.toString(); + return jbstring; + } + + private void setResponse(HttpServletResponse response, CommonRes res) { + try { + String jsonData = JSONObject.toJSONString(res); + String data = EBoChongAESUtil.encryptAES(jsonData, key).toUpperCase(); + logger.info("====接收数据响应加密数据为:encryptData=" + data); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(data); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private String queryParkingLotNameByPlNo(String plNo) { + if (StringUtils.isEmpty(plNo)) { + return ""; + } + QueryParkLotInfoByPkNoRequest request = new QueryParkLotInfoByPkNoRequest(); + request.setPklNo(plNo); + request.setSysCode("123456"); + + BizResult result = parkingLotQueryService.QueryParkingLotByPkNo(request); + if (ResultUtils.isSuccess(result)) { + return result.getData().getPlName(); + } else { + return ""; + } + } + + public static void main(String[] args) { + String key = "2xJLZAlyolvMMz4+c/8nRA=="; + String str = "{\"plateNo\":\"粤PME680\",\"cardNo\":\"\",\"carType\":0,\"parkIndex\":\"001\"," + + "\"entranceIndex\":\"001\",\"passTime\":\"2016-09-01 23:12:34 \",\"inTime\":\"2016-09-01 23:12:34 \"," + + "\"carOut\":0,\"vehicleUrl\":\"\",\"receivable\":0,\"uuid\":\"900150983CD24FB0D6963F7D28E17F72\"," + + "\"payType\":0}"; + + str = EBoChongAESUtil.encryptAES(str, key); + System.out.println(str); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/ebochong/send/EBoChongSendController.java a/src/main/java/com/zteits/irain/portal/web/ebochong/send/EBoChongSendController.java new file mode 100644 index 0000000..c6537c9 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/ebochong/send/EBoChongSendController.java @@ -0,0 +1,114 @@ +package com.zteits.irain.portal.web.ebochong.send; + +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; + +import com.alibaba.fastjson.JSONObject; + +import com.clouds.common.utils.EBoChongAESUtil; +import com.zteits.irain.portal.common.HttpClientTutorial; +import com.zteits.irain.portal.vo.ebochong.send.AddChargeInfoReq; +import com.zteits.irain.portal.vo.ebochong.send.AddChargeInfoRes; +import com.zteits.irain.portal.vo.ebochong.send.AddVehicleReservationReq; +import com.zteits.irain.portal.vo.ebochong.send.AddVehicleReservationRes; +import com.zteits.irain.portal.vo.ebochong.send.GetVehicleChargeReq; +import com.zteits.irain.portal.vo.ebochong.send.GetVehicleChargeRes; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.web.ebochong.send + * @Description: 杰商 数据发送 接口 + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/22 下午4:55 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/22 atao v1.0.0 创建 + */ +@Api("杰商下发接口") +@RestController +@RequestMapping("/ebochong") +public class EBoChongSendController { + @Value("${ebochong.url}") + private String url; + @Value("${ebochong.clientCode}") + private String clientCode; + @Value("${ebochong.key}") + private String key; + + private static final Logger logger = LoggerFactory.getLogger(EBoChongSendController.class); + + @ApiOperation("添加预约车辆信息接口") + @PostMapping("/addVehicleReservation") + public AddVehicleReservationRes addVehicleReservation(@RequestBody AddVehicleReservationReq req) + throws UnsupportedEncodingException { + logger.info("杰商 添加预约车辆信息接口 入参为:req={}", JSONObject.toJSONString(req)); + logger.info("杰商 添加预约车辆信息接口 请求的URL为:url={}", url); + Map headers = getCommonHeader(); + String data = EBoChongAESUtil.encryptAES(JSONObject.toJSONString(req),key); + logger.info("杰商 添加预约车辆信息接口 加密后的数据为: data={}",data); + String result = HttpClientTutorial.httpPostRequest(url, headers, data); + logger.info("杰商 添加预约车辆信息接口 返回的数据为:result={}",result); + AddVehicleReservationRes res = JSONObject.parseObject(result, AddVehicleReservationRes.class); + logger.info("杰商 添加预约车辆信息接口 响应为:res={}", JSONObject.toJSONString(res)); + return res; + } + + @ApiOperation("获取车辆收费金额") + @PostMapping("/getVehicleCharge") + public GetVehicleChargeRes getVehicleCharge(@RequestBody GetVehicleChargeReq req) + throws UnsupportedEncodingException { + logger.info("杰商 获取车辆收费金额 入参为:req={}", JSONObject.toJSONString(req)); + logger.info("杰商 获取车辆收费金额 请求的URL为:url={}", url); + Map headers = getCommonHeader(); + String data = EBoChongAESUtil.encryptAES(JSONObject.toJSONString(req),key); + logger.info("杰商 获取车辆收费金额 加密后的数据为: data={}",data); + String result = HttpClientTutorial.httpPostRequest(url, headers, data); + logger.info("杰商 获取车辆收费金额 返回的数据为:result={}",result); + GetVehicleChargeRes res = JSONObject.parseObject(result, GetVehicleChargeRes.class); + logger.info("杰商 获取车辆收费金额 响应为:res={}", JSONObject.toJSONString(res)); + + return res; + } + + @ApiOperation("添加收费信息") + @PostMapping("/addChargeInfo") + public AddChargeInfoRes addChargeInfo(@RequestBody AddChargeInfoReq req) throws UnsupportedEncodingException { + logger.info("杰商 添加收费信息 入参为:req={}", JSONObject.toJSONString(req)); + logger.info("杰商 添加收费信息 请求的URL为:url={}", url); + Map headers = getCommonHeader(); + String data = EBoChongAESUtil.encryptAES(JSONObject.toJSONString(req),key); + logger.info("杰商 添加收费信息 加密后的数据为: data={}",data); + String result = HttpClientTutorial.httpPostRequest(url, headers, data); + logger.info("杰商 添加收费信息 返回的数据为:result={}",result); + AddChargeInfoRes res = JSONObject.parseObject(result, AddChargeInfoRes.class); + logger.info("杰商 添加收费信息 响应为:res={}", JSONObject.toJSONString(res)); + + return res; + } + + /** + * 获取公共请求头 + * + * @return + */ + private Map getCommonHeader() { + Map maps = new HashMap<>(); + maps.put("ClientCode", clientCode); + maps.put("Content-Type", "application/json"); + return maps; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java a/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java new file mode 100644 index 0000000..32ae9ab --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java @@ -0,0 +1,391 @@ +package com.zteits.irain.portal.web.govclouds; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.cache.park.EqpAndPosStatusSyncCacheUtil; +import com.clouds.common.cache.sys.SysCodeValueCacheUtil; +import com.clouds.common.constants.CodeValKindEnum; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.govclouds.ParkTransactionDTO; +import com.zteits.clouds.api.dto.park.dto.ParkFreeBerthsCountStatisticByCountryDTO; +import com.zteits.clouds.api.dto.park.dto.ParkLotCountStatisticByCountryDTO; +import com.zteits.clouds.api.dto.park.dto.ParkLotEqpTypeCountStatisticByCountryDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.ParkTransactionRequest; +import com.zteits.clouds.api.dto.park.param.StatisticParkLotCountByCountryRequest; +import com.zteits.clouds.api.service.govclouds.ParkTransactionService; +import com.zteits.clouds.api.service.park.ParkFreeBerthService; +import com.zteits.clouds.api.service.park.ParkingLotEqpService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.irain.portal.vo.govclouds.StatisticParkLotEqpCountByCountryVO; +import com.zteits.irain.portal.vo.parkinglotdatacenter.BerthSpaceRatioVO; +import com.zteits.irain.portal.vo.parkinglotdatacenter.BerthSpaceRatioVO.BerthSeriesVO; +import com.zteits.irain.portal.vo.parkinglotdatacenter.ParkLotAndBerthsCountVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 数据概括 相关Controller + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: DataGeneralizeController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月27日 下午2:11:07 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月27日 zhaowg v1.0.0 创建 + */ +@RestController +@Api(value="数据中心-数据概括",description="数据中心-数据概括") +@RequestMapping("/dataGeneralize") +public class DataGeneralizeController { + private Logger logger = LoggerFactory.getLogger(DataGeneralizeController.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + @Autowired + private ParkingLotEqpService parkingLotEqpService; + @Autowired + private ParkFreeBerthService parkFreeBerthService; + @Autowired + private ParkTransactionService parkTransactionService; + + /** + * 这里用的是@SendToUser,这就是发送给单一客户端的标志。本例中, + * 客户端接收一对一消息的主题应该是“/user/” + 用户Id + “/message” ,这里的用户id可以是一个普通的字符串,只要每个用户端都使用自己的id并且服务端知道每个用户的id就行。 + * @return + */ + @ApiOperation(value="空闲车位雷达图") + @PostMapping("freeBerthRadarChart") + @ResponseBody +// @MessageMapping("/freeBerthRadarChartByWebSocket") +// @SendToUser("/freeBerthRadarChartByWebSocket") + public BizResultVO> getFreeBerthRadarChart(@RequestBody StatisticParkLotCountByCountryRequest request){ + if(null == request.getCityId()){ + throw new BizException(ErrorType.PARAMM_NULL, "城市编号"); + } + logger.info("对城市:"+request.getCityId()+" 按照区域统计空闲车位数量等信息"); + Map freeBerthsMap = Maps.newHashMap(); + //TODO 空闲车位数量 先查询缓存 + BizResult> bizResultParkLot = parkFreeBerthService.StatisticParkFreeBerthsCountByCountry(request); + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(bizResultParkLot)); + //如果不成功 + if (!ResultUtils.isSuccess(bizResultParkLot)) { + return new BizResultVO<>(bizResultParkLot.getErrCode(), bizResultParkLot.getErrMsg()); + } + List parkFreeBerthList=bizResultParkLot.getData(); + //空闲车位数 + if(CollectionUtils.isNotEmpty(parkFreeBerthList)){ + for (ParkFreeBerthsCountStatisticByCountryDTO dto : parkFreeBerthList) { + String countryName = dto.getPlCountryName(); + //停车位个数 + Integer pkberthsCount = dto.getFreeBerthsNum()==null?0:dto.getFreeBerthsNum(); + freeBerthsMap.put(countryName, pkberthsCount); + } + } + return new BizResultVO>().setData(freeBerthsMap); + } + + @ApiOperation(value="统计停车场服务次数线上线下排行") + @PostMapping("queryParkTransaction") + @ResponseBody + public BizResultVO> queryParkTransaction(@RequestBody StatisticParkLotCountByCountryRequest request){ + BizResultVO> parkTransVO = new BizResultVO<>(); + //先查询城市下面的停车场 + BizResult> result = parkingLotQueryService.queryParkLotByCountry(request); + if (ResultUtils.isError(result)) { + //如果失败 + parkTransVO.setCode(result.getErrCode().getCode()); + parkTransVO.setMsg(result.getErrMsg()); + return parkTransVO; + } + ParkTransactionRequest pRequest = new ParkTransactionRequest(); + pRequest = this.getParkingLot(result.getData()); //拼接参数 + //TODO 停车场线上线下服务次数排行 + BizResult> bizResultParkLot = parkTransactionService.queryParkTransaction(pRequest); + if (ResultUtils.isError(bizResultParkLot)) { + //如果失败 + parkTransVO.setCode(bizResultParkLot.getErrCode().getCode()); + parkTransVO.setMsg(bizResultParkLot.getErrMsg()); + return parkTransVO; + } + List parkingLotList = new ArrayList(); + parkingLotList = this.changeParkTrans(result.getData(), bizResultParkLot.getData()); + parkTransVO.setData(parkingLotList); + return parkTransVO; + } + /** + * 拼接参数-查询线上排行 + * @param parkList + * @return + */ + private ParkTransactionRequest getParkingLot(List parkList){ + ParkTransactionRequest pRequest = new ParkTransactionRequest(); + List parkTransList = new ArrayList(); + for(ParkingLotDTO parkingLotDTO:parkList){ + ParkTransactionDTO parkTransactionDTO = new ParkTransactionDTO(); + parkTransactionDTO.setParkId(parkingLotDTO.getPlNo()); + parkTransactionDTO.setParkName(parkingLotDTO.getPlName()); + parkTransList.add(parkTransactionDTO); + } + pRequest.setParkTransactionDTO(parkTransList); + pRequest.setSysCode("城市下面包含的所有停车场"); + return pRequest; + } + + /** + * list + * @param list + * @return + */ + private List changeParkTrans(List parkingLotList,List list){ + for(ParkTransactionDTO parkTransactionDTO:list){ + for(ParkingLotDTO parkingLotDTO:parkingLotList){ + if(parkingLotDTO.getPlNo().equals(parkTransactionDTO.getParkId())){ + parkTransactionDTO.setParkName(parkingLotDTO.getPlName()); + } + } + } + return list; + } + + @ApiOperation(value="停车场柱图") + @PostMapping("parkinglotColumnChart") + @ResponseBody + public BizResultVO getParkAndBerthAndEquChart(@RequestBody StatisticParkLotCountByCountryRequest request){ + if(null == request.getCityId()){ + throw new BizException(ErrorType.PARAMM_NULL, "城市编号"); + } + logger.info("对城市:"+request.getCityId()+" 按照区域统计停车场、车位数量等信息"); + //停车场数量 先查询缓存 + BizResult> bizResultParkLot = parkingLotQueryService.StatisticParkLotCountByCountry(request); + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(bizResultParkLot)); + //如果不成功 + if (!ResultUtils.isSuccess(bizResultParkLot)) { + return new BizResultVO<>(bizResultParkLot.getErrCode(), bizResultParkLot.getErrMsg()); + } + List parkLotCountList=bizResultParkLot.getData(); + //停车场车位数 + Map berthsCountMap = Maps.newHashMap(); + //停车场数 + Map parkLotCountMap = Maps.newHashMap(); + + if(CollectionUtils.isNotEmpty(parkLotCountList)){ + for (ParkLotCountStatisticByCountryDTO dto : parkLotCountList) { + String countryName = dto.getPlCountryName(); + //停车场个数 + int pkCount = dto.getParkLotCount()==null?0:dto.getParkLotCount(); + parkLotCountMap.put(countryName, pkCount); + //停车位个数 + int pkberthsCount = dto.getTotalBerths(); + berthsCountMap.put(countryName, pkberthsCount); + } + } + ParkLotAndBerthsCountVO parkLotAndBerthsCountVO = new ParkLotAndBerthsCountVO(); + parkLotAndBerthsCountVO.setPkberthsCount(berthsCountMap); + parkLotAndBerthsCountVO.setPkCount(parkLotCountMap); + return new BizResultVO().setData(parkLotAndBerthsCountVO); + } + + + /** + * 返回值说明:Map<设备名称,Map<区县中文名称,对应的数量>> + * @param request + * @return + * 2017年7月12日 zhaowg + */ + @ApiOperation(value="根据某市按照区域统计设备数量") + @PostMapping("statisticParkLotEqpCountByCountry") + @ResponseBody + public BizResultVO StatisticParkLotEqpCountByCountry(@RequestBody StatisticParkLotCountByCountryRequest request){ + logger.info("对城市:"+request.getCityId()+" 按照区域统计设备数量等信息"); + StatisticParkLotEqpCountByCountryVO result = new StatisticParkLotEqpCountByCountryVO(); + // 通过设备类型+是否在线或离线,和区域分组 + Map> detailEquTypeGroupMap = Maps.newLinkedHashMap(); + // 通过设备类型,和区域分组 + Map> totalEquTypeGroupMap = Maps.newHashMap(); + result.setDetailEqpMap(detailEquTypeGroupMap); + result.setTotalEqpMap(totalEquTypeGroupMap); + + // 设备类型编号和名称对应关系 + Map equNamemap = SysCodeValueCacheUtil.queryCodeValueAndNames(null, CodeValKindEnum.PARKING_LOT_EQP_TYPE_, request.getCityId()+""); + if(equNamemap==null || equNamemap.isEmpty()){ + return new BizResultVO().setData(result); + } + + //将为赋值的设备初始化 离线在前,在线在后 + for (Entry e : equNamemap.entrySet()) { + String equName = e.getValue(); + //不包含某个设备,初始化 + if(!detailEquTypeGroupMap.containsKey(equName+"在线")){ + detailEquTypeGroupMap.put(equName+"在线", Maps.newHashMap()); + } + if(!detailEquTypeGroupMap.containsKey(equName+"离线")){ + detailEquTypeGroupMap.put(equName+"离线", Maps.newHashMap()); + } + if(!totalEquTypeGroupMap.containsKey(equName)){ + totalEquTypeGroupMap.put(equName, Maps.newHashMap()); + } + + } + + BizResult> bizResultParkEqp = parkingLotEqpService.StatisticParkLotEqpCountByCountry(request); + //如果不成功 或空 返回0 + if (ResultUtils.isSuccess(bizResultParkEqp)) { + List parkEquTypeList=bizResultParkEqp.getData(); + if(CollectionUtils.isNotEmpty(parkEquTypeList)){ + for (ParkLotEqpTypeCountStatisticByCountryDTO dto : parkEquTypeList) { + //TODO 临时方案,zhaowg3 20170726 原因:红山区目前地磁状态同步接口未做,只同步总的在线,离线数量,故直接获取他同步的结果即可 + if(dto.getPlCountryId()==923){ + continue; + } + ////////////////////////////////////以上为临时方案////////////////// + + + + //获取对应的设备名称 + String equTypeName = equNamemap.get(dto.getEqpType()+""); + //获取设备状态 设备状态:1-未安装,2-使用中,3-损坏 + Integer eqpState = dto.getEqpState(); + if(eqpState == null || eqpState==1){ + continue; + } + //记录在线/离线数量 + String detailKey = equTypeName+(eqpState==2?"在线":"离线"); + if(!detailEquTypeGroupMap.containsKey(detailKey)){ + Map equCountMap=Maps.newHashMap(); + equCountMap.put(dto.getPlCountryName(), dto.getEqpNum()); + detailEquTypeGroupMap.put(detailKey, equCountMap); + }else{ + detailEquTypeGroupMap.get(detailKey).put(dto.getPlCountryName(), dto.getEqpNum()); + } + + //记录某个设备总数 + String totalKey = equTypeName; + if(!totalEquTypeGroupMap.containsKey(totalKey)){ + Map equCountMap=Maps.newHashMap(); + equCountMap.put(dto.getPlCountryName(), dto.getEqpNum()); + totalEquTypeGroupMap.put(totalKey, equCountMap); + }else{ + Map countryMap = totalEquTypeGroupMap.get(totalKey); + Integer eqpTotalNum = dto.getEqpNum(); + if(countryMap.containsKey(dto.getPlCountryName())){ + eqpTotalNum = countryMap.get(dto.getPlCountryName())+dto.getEqpNum(); + } + totalEquTypeGroupMap.get(totalKey).put(dto.getPlCountryName(), eqpTotalNum); + } + } + } + } + + //TODO 临时方案,zhaowg3 20170726 原因:红山区目前地磁状态同步接口未做,只同步总的在线,离线数量,故直接获取他同步的结果 + this.tmpHongShanQuEqpData(detailEquTypeGroupMap,totalEquTypeGroupMap); + + return new BizResultVO().setData(result); + } + + //TODO 临时方案,zhaowg3 20170726 原因:红山区目前地磁状态同步接口未做,只同步总的在线,离线数量,故直接获取他同步的结果 + private void tmpHongShanQuEqpData(Map> equTypeGroupMap, Map> totalEquTypeGroupMap) { + Map map = EqpAndPosStatusSyncCacheUtil.getGeoPosTotalNum(); + String[] geostatus = map.get("geo").split(","); + + totalEquTypeGroupMap.get("地磁").put("红山区", Integer.valueOf(geostatus[0])+Integer.valueOf(geostatus[1])); + + if(equTypeGroupMap.containsKey("地磁在线")){ + equTypeGroupMap.get("地磁在线").put("红山区", Integer.valueOf(geostatus[0])); + }else{ + Map tmpMap = new HashMap(); + tmpMap.put("红山区", Integer.valueOf(geostatus[0])); + equTypeGroupMap.put("地磁在线",tmpMap); + } + if(equTypeGroupMap.containsKey("地磁离线")){ + equTypeGroupMap.get("地磁离线").put("红山区", Integer.valueOf(geostatus[1])); + }else{ + Map tmpMap = new HashMap(); + tmpMap.put("红山区", Integer.valueOf(geostatus[1])); + equTypeGroupMap.put("地磁离线",tmpMap); + } + + String[] posstatus = map.get("pos").split(","); + totalEquTypeGroupMap.get("POS机").put("红山区", Integer.valueOf(posstatus[0])+Integer.valueOf(posstatus[1])); + if(equTypeGroupMap.containsKey("POS机离线")){ + equTypeGroupMap.get("POS机离线").put("红山区", Integer.valueOf(posstatus[1])); + }else{ + Map tmpMap = new HashMap(); + tmpMap.put("红山区", Integer.valueOf(posstatus[1])); + equTypeGroupMap.put("POS机离线",tmpMap); + } + if(equTypeGroupMap.containsKey("POS机在线")){ + equTypeGroupMap.get("POS机在线").put("红山区", Integer.valueOf(posstatus[0])); + }else{ + Map tmpMap = new HashMap(); + tmpMap.put("红山区", Integer.valueOf(posstatus[0])); + equTypeGroupMap.put("POS机在线",tmpMap); + } + } + + @ApiOperation("查询某个城市首页要显示的区县") + @PostMapping("displayCountryByCityId") + public BizResultVO> getDisplayCountry(@RequestBody StatisticParkLotCountByCountryRequest request){ + Map map = SysCodeValueCacheUtil.queryCodeValueAndNames(null, CodeValKindEnum.DATA_CENTRE_INDEX_DISPLAY_, request.getCityId()+""); + if(map == null || map.isEmpty()){ + return new BizResultVO>().setData(Lists.newArrayList()); + } + List displayCountry = Lists.newArrayList(); + map.entrySet().forEach(e->{displayCountry.add(e.getValue());}); + return new BizResultVO>().setData(displayCountry); + } + + @ApiOperation(value="车位配比图") + @PostMapping("berthSpaceRatioChart") + @ResponseBody + public BizResultVO getBerthSpaceRatioChart(@RequestBody StatisticParkLotCountByCountryRequest request){ + if(null == request.getCityId()){ + throw new BizException(ErrorType.PARAMM_NULL, "城市编号"); + } + logger.info("对城市:"+request.getCityId()+" 按照区域统计空闲车位数量信息"); + BerthSpaceRatioVO berthSpaceRatioVO=new BerthSpaceRatioVO(); + // 车位配比 区域和配比值对应关系 + Map berthSpaceRatiomap = SysCodeValueCacheUtil.queryCodeValueAndNames(null, CodeValKindEnum.DATA_CENTRE_INDEX_BERTH_RATIO_, request.getCityId()+""); + List b=Lists.newArrayList(); + for (Entry entry : berthSpaceRatiomap.entrySet()) { + BerthSeriesVO berthSeriesVO=new BerthSeriesVO(); + berthSeriesVO.setName(entry.getKey()); + String value=entry.getValue()==null?"0":entry.getValue(); + berthSeriesVO.setData(Double.valueOf(value).doubleValue()); + b.add(berthSeriesVO); + } + + berthSpaceRatioVO.setBerthSpaceRatio(b); + + return new BizResultVO().setData(berthSpaceRatioVO); + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/govclouds/GuideScreenController.java a/src/main/java/com/zteits/irain/portal/web/govclouds/GuideScreenController.java new file mode 100644 index 0000000..b0d970f --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/govclouds/GuideScreenController.java @@ -0,0 +1,379 @@ +package com.zteits.irain.portal.web.govclouds; + +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONObject; + +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.constants.SysFileTypeEnum; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.BasicEnum; +import com.zteits.clouds.api.apibase.constants.DataStatusEnum; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.GuideFirstInfoConfigDTO; +import com.zteits.clouds.api.dto.park.dto.GuideParkRelDTO; +import com.zteits.clouds.api.dto.park.dto.GuideScreenDTO; +import com.zteits.clouds.api.dto.park.dto.GuideScreenGeoDTO; +import com.zteits.clouds.api.dto.park.dto.GuideScreenLevelStatisticsDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.GuideFirstInfoConfigQueryRequest; +import com.zteits.clouds.api.dto.park.param.GuideScreenGetBaseInfoRequest; +import com.zteits.clouds.api.dto.park.param.GuideScreenGetInfoRequest; +import com.zteits.clouds.api.dto.park.param.GuideScreenListByAreaCodesRequest; +import com.zteits.clouds.api.dto.park.param.GuideScreenListGeoRequest; +import com.zteits.clouds.api.dto.park.param.GuideScreenStatisticsByAreaCodesRequest; +import com.zteits.clouds.api.dto.park.param.ParkFreeBerthGetByPlnoRequest; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; +import com.zteits.clouds.api.dto.pay.TdCFileDTO; +import com.zteits.clouds.api.dto.pay.param.SysFileGetBySourceIdAndTypeRequest; +import com.zteits.clouds.api.service.park.GuideScreenService; +import com.zteits.clouds.api.service.park.ParkFreeBerthService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.clouds.api.service.pay.TdCFileService; +import com.zteits.irain.portal.vo.parkinglotdatacenter.guide.FirstGuideInfoVO; +import com.zteits.irain.portal.vo.parkinglotdatacenter.guide.GuideInfoVO; +import com.zteits.irain.portal.vo.parkinglotdatacenter.guide.SecondGuideInfoVO; +import com.zteits.irain.portal.vo.parkinglotdatacenter.guide.ThirdGuidInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static com.google.common.collect.Lists.*; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.web.parkinglotdatacentre + * @Description: 诱导屏portal接口 + * @version: v1.0.0 + * @author: atao + * @date: 2017/7/4 下午3:10 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/7/4 atao v1.0.0 创建 + */ + +@Api("诱导屏操作接口") +@RestController +@RequestMapping("/guideScreen") +public class GuideScreenController { + + private Logger log = LoggerFactory.getLogger(GuideScreenController.class); + @Autowired + private GuideScreenService guideScreenService; + + @Autowired + private ParkFreeBerthService parkFreeBerthService; + + @Autowired + private TdCFileService tdCFileService; + + @Autowired + private ParkingLotQueryService parkingLotQueryService; + + /** + * 根据行政区域编码 以及 诱导屏幕等级 查询诱导屏信息 + * + * @param request 请求入参 必填 + * @return + */ + @PostMapping("/listGuideScreenByAreaCodes") + @ApiOperation("根据行政区域编码 以及 诱导屏幕等级 查询诱导屏信息") + BizResultVO> listGuideScreenByAreaCodes( + @RequestBody GuideScreenListByAreaCodesRequest request) { + request.setSysCode(BasicEnum.SYS_CODE.getValue()); + log.info("根据行政区域编码 以及 诱导屏幕等级 查询诱导屏信息 req={}", JSONObject.toJSONString(request)); + BizResult> result = guideScreenService.listGuideScreenByAreaCodes(request); + log.info("根据行政区域编码 以及 诱导屏幕等级 查询诱导屏信息 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + } + + /** + * 根据行政区编码 统计各个诱导屏数量 + * + * @param request 请求入参 必填 + * @return + */ + @PostMapping("/statisticsGuideScreenLevelByAreaCodes") + @ApiOperation("根据行政区编码 统计各个诱导屏数量") + BizResultVO> statisticsGuideScreenLevelByAreaCodes( + @RequestBody GuideScreenStatisticsByAreaCodesRequest request) { + request.setSysCode(BasicEnum.SYS_CODE.getValue()); + log.info("根据行政区编码 统计各个诱导屏数量 req={}", JSONObject.toJSONString(request)); + BizResult> result = guideScreenService + .statisticsGuideScreenLevelByAreaCodes(request); + log.info("根据行政区编码 统计各个诱导屏数量 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + } + + /** + * 根据区域编码 与级别 查询诱导屏的经纬度 + * + * @param request 请求入参 必填 + * @return + */ + @PostMapping("/listGuideScreenGeo") + @ApiOperation("根据区域编码 与级别 查询诱导屏的经纬度") + BizResultVO> listGuideScreenGeo(@RequestBody GuideScreenListGeoRequest request) { + log.info("根据区域编码 与级别 查询诱导屏的经纬度 req={}", JSONObject.toJSONString(request)); + BizResult> result = guideScreenService.listGuideScreenGeo(request); + log.info("根据区域编码 与级别 查询诱导屏的经纬度 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + } + + /** + * 根据诱导牌编号 查询诱导屏信息 + * + * @param request 请求入参 必填 + * @return + */ + @ApiOperation("根据诱导牌编号 查询诱导屏信息") + @PostMapping("/getGuideScreenInfo") + BizResultVO getGuideScreenInfo(@RequestBody GuideScreenGetInfoRequest request) { + BizResultVO bizResultVO = new BizResultVO<>(); + GuideInfoVO guideInfoVO = new GuideInfoVO(); + log.info("根据诱导牌编号 查询诱导屏信息 req={}", JSONObject.toJSONString(request)); + if (StringUtils.isEmpty(request.getGuideNo())) { + throw new BizException(ErrorType.PARAMM_NULL, "诱导屏编号"); + } + GuideScreenGetBaseInfoRequest baseInfoRequest = new GuideScreenGetBaseInfoRequest(); + baseInfoRequest.setDataState(request.getDataState()); + baseInfoRequest.setGuideNo(request.getGuideNo()); + baseInfoRequest.setSysCode(request.getSysCode()); + BizResult baseInfoResult = guideScreenService.getBaseGuideScreenInfo(baseInfoRequest); + + if (ResultUtils.isError(baseInfoResult)) { + throw new BizException(baseInfoResult.getErrCode(), baseInfoResult.getErrMsg()); + } + + GuideScreenDTO guideScreenDTO = baseInfoResult.getData(); + if (null == guideScreenDTO || StringUtils.isEmpty(guideScreenDTO.getGuideNo()) || StringUtils.isEmpty( + guideScreenDTO.getGuideName())) { + throw new BizException(ErrorType.BIZ_ERROR, "诱导屏不存在!"); + + } + guideInfoVO.setGuideNo(guideScreenDTO.getGuideNo()); + guideInfoVO.setLevel(guideScreenDTO.getLevel()); + + if (1 == guideInfoVO.getLevel()) { + log.info("查询一级诱导屏信息"); + guideInfoVO = getFirstGuideInfo(guideInfoVO, request.getSysCode()); + } else if (2 == guideInfoVO.getLevel()) { + log.info("查询二级诱导屏信息"); + guideInfoVO = getSecondGuideInfo(guideInfoVO, request.getSysCode()); + } else if (3 == guideInfoVO.getLevel()) { + log.info("查询三级诱导屏信息"); + guideInfoVO = getThridGuideInfo(guideInfoVO, request.getSysCode()); + + } else { + log.info("未匹配到诱导屏等级信息"); + } + + log.info("根据诱导牌编号 查询诱导屏信息 result={}", JSONObject.toJSONString(guideInfoVO)); + + bizResultVO.setData(guideInfoVO); + bizResultVO.setCode(ErrorType.BIZ_SUCCESS.getCode()); + bizResultVO.setMsg("成功"); + return bizResultVO; + } + + /** + * 获取一级诱导信息 + * + * @param guideInfoVO + * @return + */ + private GuideInfoVO getFirstGuideInfo(GuideInfoVO guideInfoVO, String sysCode) { + + FirstGuideInfoVO firstGuideInfoVO = new FirstGuideInfoVO(); + firstGuideInfoVO.setGuideNo(guideInfoVO.getGuideNo()); + firstGuideInfoVO.setLevel(guideInfoVO.getLevel()); + + SysFileGetBySourceIdAndTypeRequest request = new SysFileGetBySourceIdAndTypeRequest(); + request.setSourceId(guideInfoVO.getGuideNo()); + request.setFileType(SysFileTypeEnum.GuideFirstFile.val()); + request.setSysCode(sysCode); + BizResult bizResult = tdCFileService.getSysFileBySourceIdAndType(request); + if (ResultUtils.isSuccess(bizResult)) { + firstGuideInfoVO.setFilePath(bizResult.getData().getFilePath()); + } else { + log.info("未查询到一级诱导图片 sourceId={},type={}", request.getSourceId(), request.getFileType()); + } + + //1、根据诱导屏编号查询一级诱导屏图片配置信息 + GuideFirstInfoConfigQueryRequest guideFirstInfoConfigQueryRequest = new GuideFirstInfoConfigQueryRequest(); + guideFirstInfoConfigQueryRequest.setGuideNo(guideInfoVO.getGuideNo()); + guideFirstInfoConfigQueryRequest.setSysCode(sysCode); + BizResult> guideConfigsResult = guideScreenService + .queryFirstGuideInfoConfigByGuideNo( + guideFirstInfoConfigQueryRequest); + + //2、组装配置信息 + if (ResultUtils.isError(guideConfigsResult)) { + throw new BizException(guideConfigsResult.getErrCode(), guideConfigsResult.getErrMsg()); + } + List guideConfigs = guideConfigsResult.getData(); + + //3、根据停车场编码 查询空余车位数 + List plNos = newArrayList(); + guideConfigs.forEach(item->{plNos.add(item.getPlNo());}); + ParkFreeBerthGetByPlnoRequest parkFreeBerthGetByPlnoRequest = new ParkFreeBerthGetByPlnoRequest(); + parkFreeBerthGetByPlnoRequest.setSysCode(sysCode); + parkFreeBerthGetByPlnoRequest.setPlNos(plNos); + BizResult> result = parkFreeBerthService.getParkFreeBerthByPlno(parkFreeBerthGetByPlnoRequest); + log.info("空余车位信息查询,返回信息为:result={}", JSONObject.toJSONString(result)); + + Map freeBerthsMap = ResultUtils.getBizResultData(result); + + for (GuideFirstInfoConfigDTO dto : guideConfigs) { + + Integer freeNum = freeBerthsMap.get(dto.getPlNo()); + + //4、根据停车场编码查询车辆总数 + //4.1先从缓存中查询 + ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(dto.getPlNo()); + if (null == parkingLotDTO) { + //4.2 缓存中不存在,调用dubbo服务查询 + QueryParkLotInfoByPkNoRequest queryParkLotInfoByPkNoRequest = new QueryParkLotInfoByPkNoRequest(); + queryParkLotInfoByPkNoRequest.setPklNo(dto.getPlNo()); + queryParkLotInfoByPkNoRequest.setSysCode(sysCode); + BizResult parkingLotDTOBizResult = parkingLotQueryService.QueryParkingLotByPkNo( + queryParkLotInfoByPkNoRequest); + log.info("停车场总车位信息查询,返回信息为:result={}", JSONObject.toJSONString(parkingLotDTOBizResult)); + if (ResultUtils.isSuccess(parkingLotDTOBizResult)) { + parkingLotDTO = parkingLotDTOBizResult.getData(); + } + } + Integer allBerthNum = null; + if (null != parkingLotDTO) { + allBerthNum = parkingLotDTO.getPlBerthNum(); + } + + firstGuideInfoVO.setConfigs(dto.getPlNo(), dto.getPlNameHeight(), dto.getPlNameWidth(), dto.getFreeHeight(), + dto.getFreeWidth(), freeNum, allBerthNum); + + } + + return firstGuideInfoVO; + + } + + /** + * 获取二级诱导信息 + * + * @param guideInfoVO + * @return + */ + private GuideInfoVO getSecondGuideInfo(GuideInfoVO guideInfoVO, String sysCode) { + + SecondGuideInfoVO secondGuideInfoVO = new SecondGuideInfoVO(); + secondGuideInfoVO.setGuideNo(guideInfoVO.getGuideNo()); + secondGuideInfoVO.setLevel(guideInfoVO.getLevel()); + GuideScreenGetInfoRequest request = new GuideScreenGetInfoRequest(); + request.setGuideNo(guideInfoVO.getGuideNo()); + request.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); + request.setSysCode(sysCode); + BizResult> bizResult = guideScreenService.getGuideScreenInfo(request); + + if (ResultUtils.isError(bizResult)) { + throw new BizException(bizResult.getErrCode(), bizResult.getErrMsg()); + } + List guideParkRelDTOS = bizResult.getData(); + //3、根据停车场编码 查询空余车位数 + List plNos = newArrayList(); + guideParkRelDTOS.forEach(item->{plNos.add(item.getPlNo());}); + ParkFreeBerthGetByPlnoRequest parkFreeBerthGetByPlnoRequest = new ParkFreeBerthGetByPlnoRequest(); + parkFreeBerthGetByPlnoRequest.setSysCode(sysCode); + parkFreeBerthGetByPlnoRequest.setPlNos(plNos); + BizResult> result = parkFreeBerthService.getParkFreeBerthByPlno(parkFreeBerthGetByPlnoRequest); + log.info("空余车位信息查询,返回信息为:result={}", JSONObject.toJSONString(result)); + + + for (GuideParkRelDTO dto : guideParkRelDTOS) { + Integer freeBerth = result.getData().get(dto.getPlNo()); + secondGuideInfoVO.addGuideDetail(dto.getPlNo(), dto.getPlName(), freeBerth, dto.getGuidePoint()); + } + + return secondGuideInfoVO; + + } + + /** + * 获取三级诱导信息 + * + * @param guideInfoVO + * @return + */ + private GuideInfoVO getThridGuideInfo(GuideInfoVO guideInfoVO, String sysCode) { + GuideScreenGetInfoRequest request = new GuideScreenGetInfoRequest(); + request.setSysCode(sysCode); + request.setGuideNo(guideInfoVO.getGuideNo()); + request.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); + BizResult> bizResult = guideScreenService.getGuideScreenInfo(request); + if (ResultUtils.isError(bizResult)) { + throw new BizException(bizResult.getErrCode(), bizResult.getErrMsg()); + } + ThirdGuidInfoVO thirdGuidInfoVO = new ThirdGuidInfoVO(); + thirdGuidInfoVO.setGuideNo(guideInfoVO.getGuideNo()); + thirdGuidInfoVO.setLevel(guideInfoVO.getLevel()); + if (!CollectionUtils.isEmpty(bizResult.getData())) { + GuideParkRelDTO guideParkRelDTO = bizResult.getData().get(0); + thirdGuidInfoVO.setHighLimitNum(guideParkRelDTO.getHighLimitNum()); + thirdGuidInfoVO.setHighLimitStatus(guideParkRelDTO.getHighLimitStatus()); + thirdGuidInfoVO.setSharpTurnStatus(guideParkRelDTO.getSharpTurnStatus()); + thirdGuidInfoVO.setTimeSystem(guideParkRelDTO.getTimeSystem()); + thirdGuidInfoVO.setFloor(guideParkRelDTO.getFloor()); + thirdGuidInfoVO.setFloorStatus(guideParkRelDTO.getFloorStatus()); + ParkFreeBerthGetByPlnoRequest temp = new ParkFreeBerthGetByPlnoRequest(); + temp.setSysCode(sysCode); + List plNos = newArrayList(); + plNos.add(guideParkRelDTO.getPlNo()); + temp.setPlNos(plNos ); + BizResult> result = parkFreeBerthService.getParkFreeBerthByPlno(temp); + if (ResultUtils.isError(result)) { + log.info("空余车位信息查询报错,返回信息为:result={}", JSONObject.toJSONString(result)); + thirdGuidInfoVO.setFreeNum(null); + } else { + thirdGuidInfoVO.setFreeNum(result.getData().get(guideParkRelDTO.getPlNo())); + } + } + + return thirdGuidInfoVO; + } + + /** + * 查询诱导屏信息(用于地图展示) + * + * @param request 请求入参 + * @return + */ + @PostMapping("/listGuideScreenForMap") + @ApiOperation("查询所有诱导屏信息用于地图展示") + BizResultVO> listGuideScreenForMap( + @RequestBody GuideScreenListByAreaCodesRequest request) { + BaseInfo info = new BaseInfo(); + info.setPageSize(100); + request.setSysCode(BasicEnum.SYS_CODE.getValue()); + request.setBaseRequest(info); + BizResult> result = guideScreenService.listGuideScreenByAreaCodes(request); + log.info("查询所有诱导屏信息用于地图展示 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/govclouds/HotSpotAreaController.java a/src/main/java/com/zteits/irain/portal/web/govclouds/HotSpotAreaController.java new file mode 100644 index 0000000..9daa96f --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/govclouds/HotSpotAreaController.java @@ -0,0 +1,126 @@ +/** + * + */ +package com.zteits.irain.portal.web.govclouds; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.validation.Valid; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSON; +import com.clouds.common.cache.park.ParkingLotGeoCacheUtil; +import com.clouds.common.cache.sys.SysCodeValueCacheUtil; +import com.clouds.common.constants.CodeValKindEnum; +import com.clouds.common.utils.SMSNotification; +import com.clouds.common.web.BizController; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.zteits.clouds.api.apibase.constants.LonLatTypeEnum; +import com.zteits.clouds.api.dto.govclouds.dto.ParkinglotMarkerDTO; +import com.zteits.clouds.api.dto.govclouds.param.CenterPOIInfoRequest; +import com.zteits.clouds.api.dto.govclouds.param.WarningNoticeRequest; +import com.zteits.clouds.api.dto.park.dto.ParkinglotAndGeoInfoDTO; +import com.zteits.irain.portal.vo.govclouds.CenterPOIInfoVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * @author hxz + * + */ +@Api(value="停车数据LBS 热点区域",description="停车数据LBS 热点区域") +@RestController +@RequestMapping("/hotspot") +public class HotSpotAreaController extends BizController { + private static final Logger logger = LoggerFactory.getLogger(HotSpotAreaController.class); + + @ApiOperation("热点区域-热点周边停车场") + @PostMapping("/parkinglots") + public BizResultVO> getParkinglotsInHotSpotRound(@Valid @RequestBody List request) { + logger.info("poi 中心点{}", request); + List list = Lists.newArrayList(); + //去重 + Set distinctPlNos = Sets.newHashSet(); + for (CenterPOIInfoRequest centerPOIInfoRequest : request) { + List andGeoInfoDTOs = ParkingLotGeoCacheUtil.queryParkLotsWithCoordinate(LonLatTypeEnum.LON_LAT_TYPE_1,centerPOIInfoRequest.getLongitude(), centerPOIInfoRequest.getLatitude(), centerPOIInfoRequest.getRadius()+0.00, null); + if(CollectionUtils.isEmpty(andGeoInfoDTOs)){ + continue; + } + for (ParkinglotAndGeoInfoDTO parkinglotAndGeoInfoDTO : andGeoInfoDTOs) { + ParkinglotMarkerDTO markerDTO = new ParkinglotMarkerDTO(); + String plno = parkinglotAndGeoInfoDTO.getPlNo(); + if(distinctPlNos.contains(plno)){ + continue; + } + distinctPlNos.add(plno); + markerDTO.setPlNo(parkinglotAndGeoInfoDTO.getPlNo()); + markerDTO.setAddress(parkinglotAndGeoInfoDTO.getPlAddress()); + markerDTO.setLatitude(parkinglotAndGeoInfoDTO.getLatId().doubleValue()); + markerDTO.setLongitude(parkinglotAndGeoInfoDTO.getLonId().doubleValue()); + markerDTO.setParkinglotName(parkinglotAndGeoInfoDTO.getPlName()); + markerDTO.setTotalBerthNum(parkinglotAndGeoInfoDTO.getPlBerthNum()); + list.add(markerDTO); + } + } + logger.info("已获得热点区域 {}", list); + return new BizResultVO>().setData(list); + } + + @ApiOperation("获取某个城市的热点区域坐标") + @PostMapping("/getHotspotByCityId") + public BizResultVO> getCenterPOIs(@RequestParam String cityId,@RequestParam String sysCode){ + logger.info("获取城市:"+cityId+" 的热点区域坐标"); + Map map = SysCodeValueCacheUtil.queryCodeValueAndNames(null, CodeValKindEnum.GOV_CLOUDS_HOTSPOT_AREA_, cityId); + List centerPOIInfoVOs = Lists.newArrayList(); + if(map!=null && !map.isEmpty()){ + for (Entry entry : map.entrySet()) { + String name = entry.getValue(); + CenterPOIInfoVO infoVO = new CenterPOIInfoVO(); + infoVO.setName(name); + String[] geo = entry.getKey().split(","); + Double lon = Double.valueOf(geo[0]); + Double lat = Double.valueOf(geo[1]); + infoVO.setLatitude(lat); + infoVO.setLongitude(lon); + centerPOIInfoVOs.add(infoVO); + } + } + return new BizResultVO>().setData(centerPOIInfoVOs); + } + + @ApiOperation("热点区域 预警下发") + @PostMapping("/smsWarningNotice") + public BizResultVO smsWarningNotice(@RequestBody WarningNoticeRequest request) throws Exception { + logger.info("热点区域 预警下发:"+JSON.toJSONString(request)); + List phones = request.getPhones(); + for (String phone: phones) { + if(StringUtils.isBlank(phone)){ + continue; + } + // sms notify + //判断是否开启短信发送 + String isopensmssend = SysCodeValueCacheUtil.queryCodeValue(CodeValKindEnum.HOTAREA_IS_OPEN_SMS_SEND); + if(StringUtils.isBlank(isopensmssend)||isopensmssend.equalsIgnoreCase("FALSE")){ + logger.info("没有配置是否开启短信发送开关,或短信发送开关为false,不下发短信"); + }else{ + SMSNotification.sendSms(phone, request.getContent(), null); + } + } + return new BizResultVO().setData(true); + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/govclouds/ParkingContrailController.java a/src/main/java/com/zteits/irain/portal/web/govclouds/ParkingContrailController.java new file mode 100644 index 0000000..7325ef3 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/govclouds/ParkingContrailController.java @@ -0,0 +1,140 @@ +package com.zteits.irain.portal.web.govclouds; + +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.web.BizController; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.dto.govclouds.dto.ParkingCountForTypeDTO; +import com.zteits.clouds.api.dto.govclouds.dto.ParkingTrackDTO; +import com.zteits.clouds.api.dto.govclouds.param.QueryParkingCountRequest; +import com.zteits.clouds.api.dto.govclouds.param.QueryParkingTrackRequest; +import com.zteits.clouds.api.service.govclouds.ParkPreferenceService; +import com.zteits.irain.portal.vo.govclouds.ParkingBusiCircleForTypeVO; +import com.zteits.irain.portal.vo.govclouds.ParkingCountForTypeVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +/** + * 政府云平台--->数据分析--->停车轨迹.
+ * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkingContrailController.java + * @Description: + * @version: v1.0.0 + * @author: wangfs + * @date: 2017年7月13日 上午9:36:52 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月13日 wangfs v1.0.0 创建 + */ +@Api(value = "政府云平台--->数据分析--->停车轨迹", description = "政府云平台--->数据分析--->停车轨迹") +@Controller +@RequestMapping("/parkingContrail") +public class ParkingContrailController extends BizController{ + + private static final Logger logger = LoggerFactory.getLogger(ParkingContrailController.class); + @Autowired + private ParkPreferenceService parkPreferenceService; + + @ApiOperation("停车编好->饼图") + @PostMapping("/parkingCountForPlType") + @ResponseBody + public BizResultVO> parkingCountForPlType(@RequestBody QueryParkingCountRequest parkingCountRequest,HttpServletRequest request, HttpServletResponse response) throws Exception{ + BizResult> result = new BizResult>(); + List list = new ArrayList(); + logger.info("---begin停车轨迹-->停车编好->饼图Controller,入参="+JSONObject.toJSON(parkingCountRequest)); + BizResult> bizResult =parkPreferenceService.queryParkingCountForPlType(parkingCountRequest); + //int sumCurrentParkCount = 0; + if(bizResult != null && !CollectionUtils.isEmpty(bizResult.getData())){ + for(ParkingCountForTypeDTO dto:bizResult.getData()){ + if(dto != null){ + //sumCurrentParkCount+= dto.getCurrentParkCount(); + ParkingCountForTypeVO parkingCountForTypeVO = new ParkingCountForTypeVO(); + BeanUtils.copyProperties(dto, parkingCountForTypeVO); + list.add(parkingCountForTypeVO); + } + } + + } + result.setErrCode(bizResult.getErrCode()); + result.setErrMsg(bizResult.getErrMsg()); + result.setData(list); + logger.info("---begin停车轨迹-->停车编好->饼图Controller,结果="+result); + + return new BizResultVO>(result); + } + + + @ApiOperation("停车商圈属性对应的停车数量->柱状图") + @PostMapping("/parkingCountForBusiCircle") + @ResponseBody + public BizResultVO> parkingCountForBusiCircle(@RequestBody QueryParkingCountRequest parkingCountRequest,HttpServletRequest request, HttpServletResponse response) throws Exception{ + BizResultVO> result = new BizResultVO>(); + List list = new ArrayList(); + logger.info("---begin停车轨迹-->停车商圈属性对应的停车数量->柱状图Controller,入参="+JSONObject.toJSON(parkingCountRequest)); + BizResult> bizResult =parkPreferenceService.queryParkingBusiCircleForPlType(parkingCountRequest); + if(bizResult != null && !CollectionUtils.isEmpty(bizResult.getData())){ + for(ParkingCountForTypeDTO dto:bizResult.getData()){ + if(dto != null){ + ParkingBusiCircleForTypeVO parkingBusiCircleForTypeVO = new ParkingBusiCircleForTypeVO(); + BeanUtils.copyProperties(dto, parkingBusiCircleForTypeVO); + list.add(parkingBusiCircleForTypeVO); + } + } + } + result.setData(list); + logger.info("---begin停车轨迹-->停车商圈属性对应的停车数量->柱状图Controller,结果="+result); + return result; + } + + @ApiOperation("停车车轨迹") + @PostMapping("/queryParkingTrack") + @ResponseBody + public BizResultVO queryParkingTrack(@RequestBody QueryParkingTrackRequest queryParkingTrackRequest,HttpServletRequest request, HttpServletResponse response) throws Exception{ + BizResultVO> result = new BizResultVO>(); + logger.info("---begin停车轨迹-->根据车牌查询该车的行车轨迹Controller,入参={}",JSONObject.toJSON(queryParkingTrackRequest)); + BizResult bizResult =parkPreferenceService.queryParkingTrack(queryParkingTrackRequest); + logger.info("---begin停车轨迹-->根据车牌查询该车的行车轨迹Controller,结果={}",result); + return new BizResultVO(bizResult); + } + + + + + +} + + + + + + + + + + + + + + + diff --git b/src/main/java/com/zteits/irain/portal/web/govclouds/ParkingLBSController.java a/src/main/java/com/zteits/irain/portal/web/govclouds/ParkingLBSController.java new file mode 100644 index 0000000..b4bd141 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/govclouds/ParkingLBSController.java @@ -0,0 +1,190 @@ +package com.zteits.irain.portal.web.govclouds; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.web.vo.BizResultVO; +import com.xiaoleilu.hutool.util.CollectionUtil; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.constants.LonLatTypeEnum; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.govclouds.dto.ParkinglotHeatmapDTO; +import com.zteits.clouds.api.dto.govclouds.dto.ParkinglotHeatmapDayDTO; +import com.zteits.clouds.api.dto.govclouds.dto.ParkinglotHeatmapHourDTO; +import com.zteits.clouds.api.dto.govclouds.param.QueryHeatmapByDateRequest; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.ParkFreeBerthGetByPlnoRequest; +import com.zteits.clouds.api.dto.park.param.PlNoQueryBycountryAndParkNameRequest; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; +import com.zteits.clouds.api.dto.park.param.QueryParkingLotByCountryRequest; +import com.zteits.clouds.api.service.govclouds.ParkHeatmapService; +import com.zteits.clouds.api.service.park.ParkFreeBerthService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.irain.portal.constant.ParkConstant; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 停车LBS,相关Controller.
+ * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkingLBSController + * @Description: + * @version: v1.0.0 + * @author: xiejianpeng + * @date: 2017年7月7日 下午4:52:41 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017年7月7日 xiejianpeng v1.0.0 创建 + */ +@RestController +@Api(value = "数据中心-停车LBS", description = "数据中心-停车LBS") +@RequestMapping("/parkingLBS") +public class ParkingLBSController { + + private Logger logger = LoggerFactory.getLogger(ParkingLBSController.class); + + @Autowired + private ParkingLotQueryService parkingLotQueryService; + + @Autowired + private ParkHeatmapService parkHeatmapService; + + @Autowired + private ParkFreeBerthService parkFreeBerthService; + + @ApiOperation(value = "停车场分页查询-根据市、区县id、停车场名称或地址") + @PostMapping("/queryParkLotByCountryAndParkName") + @ResponseBody + public BizResultVO> queryParkLotByCountryAndParkName( + @RequestBody QueryParkingLotByCountryRequest request) { + logger.info("开始-根据市id、区县id和停车场名称或地址查询停车场信息 req={}", JSONObject.toJSONString(request)); + if(request.getLonLatType()==null){ + //默认百度 + request.setLonLatType(LonLatTypeEnum.LON_LAT_TYPE_1.value()); + } + if(request.getGeoType()==null){ + //默认停车场坐标 + request.setGeoType(ParkConstant.ParkingLotGeo.GeoType.TYPE_PARKINGLOT); + } + BizResult> result = parkingLotQueryService.queryParkLotByCountryAndParkName(request); + logger.info("开始-根据市id、区县id和停车场名称或地址查询停车场信息 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + } + + @ApiOperation(value = "根据停车场编号查询停车场详细信息") + @PostMapping("/queryParkingLotByPkNo") + @ResponseBody + public BizResultVO queryParkingLotByPkNo(@RequestBody QueryParkLotInfoByPkNoRequest request) { + logger.info("开始-根据停车场编号查询停车场详细信息 req={}", JSONObject.toJSONString(request)); + BizResult result = parkingLotQueryService.QueryParkingLotByPkNo(request); + logger.info("开始-根据停车场编号查询停车场详细信息 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + } + + @ApiOperation(value = "根据区县id、停车场名称或地址查询停车场经纬度信息") + @PostMapping("/queryParkingLotGeoByCountryAndParkName") + @ResponseBody + public BizResultVO> queryParkingLotGeoByCountryAndParkName(@RequestBody + PlNoQueryBycountryAndParkNameRequest request) { + + if (CollectionUtil.isEmpty(request.getCountryId())) { + throw new BizException(ErrorType.PARAMM_NULL, "区县ID不能为空!"); + } + if(request.getLonLatType()==null){ + //默认百度 + request.setLonLatType(LonLatTypeEnum.LON_LAT_TYPE_1.value()); + } + if(request.getGeoType()==null){ + //默认停车场坐标 + request.setGeoType(ParkConstant.ParkingLotGeo.GeoType.TYPE_PARKINGLOT); + } + BizResult> result = parkingLotQueryService.queryParkingLotGeoByCountryAndParkName(request); + return new BizResultVO<>(result); + } + + /*@ApiOperation(value = "根据停车场编号查询停车场经纬度信息") + @PostMapping("/queryParkingLotGeoByPkNo") + @ResponseBody + public BizResultVO queryParkingLotGeoByPkNo(@RequestBody QueryParkLotInfoByPkNoRequest request) { + logger.info("开始-根据停车场编号查询停车场经纬度 req={}", JSONObject.toJSONString(request)); + if(request.getLonLatType() == null){ + request.setLonLatType(1); + } + BizResult result = parkingLotGeoQueryService.queryParkingLotGeoByParkNo(request); + logger.info("开始-根据停车场编号查询停车场经纬度 result={}", JSONObject.toJSONString(result)); + return new BizResultVO<>(result); + }*/ + + @ApiOperation(value = "根据停车场编号列表查询停车场空闲车位数") + @PostMapping("/queryParkFreeBerthsByPkNos") + @ResponseBody + public BizResultVO> queryParkFreeBerthsByPkNos( + @RequestBody ParkFreeBerthGetByPlnoRequest request) { + logger.info("开始-根据停车场编号查询停车场经纬度 req={}", JSONObject.toJSONString(request)); + BizResult> bizResult = parkFreeBerthService.getParkFreeBerthByPlno(request); + logger.info("开始-根据停车场编号查询停车场经纬度 result={}", JSONObject.toJSONString(bizResult)); + return new BizResultVO<>(bizResult); + } + + @ApiOperation(value = "查询省市的停车热点-按小时统计") + @PostMapping("/queryParkHeatmapByHour") + @ResponseBody + public BizResultVO> queryParkHeatmapByHour( + @RequestBody QueryHeatmapByDateRequest request) { + logger.info("开始-查询按小时统计的省市的停车热点 req={}", JSONObject.toJSONString(request)); + /** 查询热力图-小时统计*/ + BizResult> result = parkHeatmapService.queryParkHeatmapByHour(request); + List heatmapDTOList = new ArrayList(); + for (ParkinglotHeatmapHourDTO heatmapHourDTO : result.getData()) { + ParkinglotHeatmapDTO parkinglotHeatmapDTO = new ParkinglotHeatmapDTO(); + parkinglotHeatmapDTO.setLat(heatmapHourDTO.getLat()); + parkinglotHeatmapDTO.setLon(heatmapHourDTO.getLon()); + parkinglotHeatmapDTO.setCurrentParkCount(heatmapHourDTO.getCurrentParkCount()); + heatmapDTOList.add(parkinglotHeatmapDTO); + } + BizResultVO> resultVO = new BizResultVO<>(); + resultVO.setData(heatmapDTOList); + logger.info("结束-查询按小时统计的省市的停车热点 result={}", JSONObject.toJSONString(result)); + return resultVO; + } + + @ApiOperation(value = "查询省市的停车热点-按日期统计") + @PostMapping("/queryParkHeatmapByDay") + @ResponseBody + public BizResultVO> queryParkHeatmapByDay( + @RequestBody QueryHeatmapByDateRequest request) { + logger.info("开始-查询按日期统计的省市的停车热点 req={}", JSONObject.toJSONString(request)); + /** 查询热力图-小时统计*/ + BizResult> result = parkHeatmapService.queryParkHeatmapByDay(request); + List heatmapDTOList = new ArrayList(); + for (ParkinglotHeatmapDayDTO heatmapDayDTO : result.getData()) { + ParkinglotHeatmapDTO parkinglotHeatmapDTO = new ParkinglotHeatmapDTO(); + parkinglotHeatmapDTO.setLat(heatmapDayDTO.getLat()); + parkinglotHeatmapDTO.setLon(heatmapDayDTO.getLon()); + parkinglotHeatmapDTO.setCurrentParkCount(heatmapDayDTO.getCurrentParkCount()); + heatmapDTOList.add(parkinglotHeatmapDTO); + } + BizResultVO> resultVO = new BizResultVO<>(); + resultVO.setData(heatmapDTOList); + logger.info("结束-查询按日期统计的省市的停车热点 result={}", JSONObject.toJSONString(result)); + return resultVO; + } + +} \ No newline at end of file diff --git b/src/main/java/com/zteits/irain/portal/web/govclouds/TbAreaController.java a/src/main/java/com/zteits/irain/portal/web/govclouds/TbAreaController.java new file mode 100644 index 0000000..8f2bb75 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/govclouds/TbAreaController.java @@ -0,0 +1,83 @@ +package com.zteits.irain.portal.web.govclouds; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.cache.sys.SysCodeValueCacheUtil; +import com.clouds.common.constants.CodeValKindEnum; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.param.StatisticParkLotCountByCountryRequest; +import com.zteits.clouds.api.dto.park.param.UpdateFreeBerthRequest; +import com.zteits.clouds.api.dto.sys.SysRoleDTO; +import com.zteits.clouds.api.dto.sys.TbAreaDTO; +import com.zteits.clouds.api.dto.sys.param.TbAreaQueryRequest; +import com.zteits.clouds.api.service.sys.TbAreaService; +import com.zteits.irain.portal.web.irain.UpdateFreeBerthController; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 区域服务 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: TbAreaController.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年7月18日 下午4:32:28 Modification History: Date Author Version + * Description ---------------------------------------------------------* + * 2017年7月18日 langlw v1.0.0 创建 + */ +@RestController +@Api(value = "区域服务", description = "区域服务") +@RequestMapping("/area") +public class TbAreaController { + private static final Logger logger = LoggerFactory.getLogger(TbAreaController.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private TbAreaService tbAreaService; + + @ApiOperation("查询区域下一级") + @PostMapping("queryNextLowerLeverById") + public BizResultVO>> queryNextLowerLeverById(@RequestBody StatisticParkLotCountByCountryRequest request) { + + if (null == request.getCityId()) { + throw new BizException(ErrorType.PARAMM_NULL, "区域ID"); + } + logger.info("请求参数:", JSONObject.toJSONString(request)); + Map map = SysCodeValueCacheUtil.queryCodeValueAndNames(null, CodeValKindEnum.GOV_CLOUDS_LBS_AREA_, request.getCityId()+""); + List> list=new ArrayList<>(); + map.entrySet().forEach(e->{ + Map mapitem = new HashMap<>(); + mapitem.put(e.getKey(), e.getValue()); + list.add(mapitem); + }); + logger.info("打印json结果:"+JSONObject.toJSONString(list)); + return new BizResultVO>>().setData(list); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/irain/IRainParkingController.java a/src/main/java/com/zteits/irain/portal/web/irain/IRainParkingController.java new file mode 100644 index 0000000..6a7f41b --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/irain/IRainParkingController.java @@ -0,0 +1,341 @@ +package com.zteits.irain.portal.web.irain; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.utils.ExceptionUtil; +import com.clouds.common.web.BizController; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.param.InParkingRequest; +import com.zteits.clouds.api.dto.park.param.OutParkingRequest; +import com.zteits.clouds.api.dto.park.param.InterfaceLogSaveRequest; +import com.zteits.clouds.api.service.park.InterfaceLogService; +import com.zteits.irain.portal.common.AESPlus; +import com.zteits.irain.portal.common.HttpClientTutorial; +import com.zteits.irain.portal.constant.IRainResultEnum; +import com.zteits.irain.portal.constant.ParkConstant.InterfaceLog; +import com.zteits.irain.portal.service.interfaces.inoutparklot.InOutParkLotReportService; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordInParkLotRequest; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordOutParkLotRequest; +import com.zteits.irain.portal.vo.irain.IRainResponseVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: IRainParkingController.java + * @Description:艾润 进出停车场 + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 上午11:51:45 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +@Api(value="艾润 进车上报、出车上报控制",description="艾润 进车上报、出车上报") +@RestController +@RequestMapping("/parking") +public class IRainParkingController extends BizController{ + @Value("${irain.aes}") + private String irain_aes; + @Value("${project.syscode}") + private String sysCode; + @Value("${server.port}") + private String serverPort; + + private static final Logger logger = LoggerFactory.getLogger(IRainParkingController.class); + + @Autowired + private InterfaceLogService interfaceLogService; + @Autowired + private InOutParkLotReportService inOutParkLotReportService; + + @ApiOperation("进车上报") + @RequestMapping(value = "/inParking",method = RequestMethod.POST) + public IRainResponseVO inParking(@RequestParam(value = "param", required = true) String param){ + BaseInfo baseInfo = new BaseInfo(); + String requestId = baseInfo.getRequestId(); + logger.info("[RequestId:"+requestId+"]irain 进车上报返回加密内容:"+param); + IRainResponseVO iRainResponseVO = null; + //记录日志 + InterfaceLogSaveRequest logSaveRequest = new InterfaceLogSaveRequest(sysCode,baseInfo,InterfaceLog.Type.TYPE_IN_PARKING, param,InterfaceLog.FromType.IRAIN); + //设置未解密的字符串 + logSaveRequest.setEncryptParam(param); + //设置未同步 + logSaveRequest.setSyncStatus(1); + try { + if(StringUtils.isBlank(param)){ + throw new BizException(ErrorType.PARAMM_NULL, "请求报文"); + } + //解密 + String decryptAESparam = ""; + decryptAESparam = AESPlus.decrypt(irain_aes,param); + logger.info("[RequestId:"+requestId+"]irain 进车上报返解密:"+decryptAESparam); + logSaveRequest.setRequestBody(decryptAESparam); + + //TODO 临时调用 + this.tmpInvokeOldInOutController("inParking", decryptAESparam); + + //组织请求参数 + RecordInParkLotRequest request = new RecordInParkLotRequest(); + request.setFromType(InterfaceLog.FromType.IRAIN); + request.setSourceType(InterfaceLog.SourceType.GATEWAY); + request.setSysCode(sysCode); + JSONObject humbObj = underlineObjConverHumpObj(decryptAESparam); + InParkingRequest iRainInParkingRequest = JSON.parseObject(humbObj.toJSONString(), InParkingRequest.class); + request.setInParkLotReq(iRainInParkingRequest); + //调用进车服务 + Long outId = inOutParkLotReportService.InParkLotRecord(request ); + + //保存转化之后的请求数据 + logSaveRequest.setRequestConversionBody(JSON.toJSONString(iRainInParkingRequest)); + + //记录外部主键 + logSaveRequest.setOutId(outId); + logSaveRequest.setStatus(InterfaceLog.Status.SUCCESS); + iRainResponseVO = new IRainResponseVO(IRainResultEnum.SUCCESS); + } catch (Exception e) { + e.printStackTrace(); + logSaveRequest.setMessage(ExceptionUtil.getTrace(e)); + logSaveRequest.setStatus(InterfaceLog.Status.FAIL); + iRainResponseVO = new IRainResponseVO(ErrorType.BIZ_ERROR); + }finally{ + logSaveRequest.setResponseBody(JSONObject.toJSONString(iRainResponseVO)); + logSaveRequest.setResponseTime(new Date()); + //保存日志 + try{ + interfaceLogService.SaveInterfaceLog(logSaveRequest); + }catch(Exception e){ + e.printStackTrace(); + } + } + logger.info("[RequestId:"+requestId+"]irain 进车上报 返回:"+JSONObject.toJSON(iRainResponseVO)); + return iRainResponseVO; + } + + /** + * 出车上报 + * @param param (aes加密后的JSON字符串) + */ + @ApiOperation("出车上报") + @RequestMapping(value = "/outParking" ,method = RequestMethod.POST) + public IRainResponseVO outParking(@RequestParam(value = "param", required = true) String param){ + BaseInfo baseInfo = new BaseInfo(); + String requestId = baseInfo.getRequestId(); + logger.info("[RequestId:"+requestId+"]irain 出车上报返回加密内容:"+param); + IRainResponseVO iRainResponseVO = null; + //记录日志 + InterfaceLogSaveRequest logSaveRequest = new InterfaceLogSaveRequest(sysCode, baseInfo, InterfaceLog.Type.TYPE_OUT_PARKING, + param, InterfaceLog.FromType.IRAIN); + //设置未解密的字符串 + logSaveRequest.setEncryptParam(param); + //设置未同步 + logSaveRequest.setSyncStatus(1); + try { + //解密 + String decryptAESparam = ""; + decryptAESparam = AESPlus.decrypt(irain_aes,param); + logger.info("[RequestId:"+requestId+"]irain 出车上报返解密:"+decryptAESparam); + logSaveRequest.setRequestBody(decryptAESparam); + + //TODO 临时调用 + this.tmpInvokeOldInOutController("outParking", decryptAESparam); + + //组织请求参数 + RecordOutParkLotRequest request = new RecordOutParkLotRequest(); + request.setFromType(InterfaceLog.FromType.IRAIN); + request.setSysCode(sysCode); + request.setSourceType(InterfaceLog.SourceType.GATEWAY); + //创建后场请求对象 + JSONObject humbObj = underlineObjConverHumpObj(decryptAESparam); + OutParkingRequest iRainOutParkingRequest = JSON.parseObject(humbObj.toJSONString(), OutParkingRequest.class); + + if(iRainOutParkingRequest == null){ + throw new BizException(ErrorType.PARAMM_NULL,"请求对象"); + } + request.setOutParkLotReq(iRainOutParkingRequest); + + logger.info("调用出车服务请求参数:"+JSON.toJSONString(request)); + Long outId = inOutParkLotReportService.OutParkLotRecord(request ); + + //保存转化之后的请求数据 + logSaveRequest.setRequestConversionBody(JSON.toJSONString(iRainOutParkingRequest)); + + //记录外部主键 + logSaveRequest.setOutId(outId); + logSaveRequest.setStatus(InterfaceLog.Status.SUCCESS); + iRainResponseVO = new IRainResponseVO(IRainResultEnum.SUCCESS); + } catch (Exception e) { + e.printStackTrace(); + logSaveRequest.setMessage(ExceptionUtil.getTrace(e)); + logSaveRequest.setStatus(InterfaceLog.Status.FAIL); + iRainResponseVO = new IRainResponseVO(ErrorType.BIZ_ERROR); + }finally{ + logSaveRequest.setResponseBody(JSONObject.toJSONString(iRainResponseVO)); + logSaveRequest.setResponseTime(new Date()); + //保存日志 + try{ + interfaceLogService.SaveInterfaceLog(logSaveRequest); + }catch(Exception e){ + e.printStackTrace(); + } + + } + logger.info("[RequestId:"+requestId+"]irain 进车上报 返回:"+JSONObject.toJSON(iRainResponseVO)); + return iRainResponseVO; + } + + /** + * 下划线bean转驼峰bean + * @return + * 2017年5月5日 zhaowg + * @throws IllegalAccessException + * @throws InstantiationException + */ + private JSONObject underlineObjConverHumpObj(String param) throws InstantiationException, IllegalAccessException{ + JSONObject humpObj = new JSONObject(); + JSONObject underlineObj = JSON.parseObject(param); + for (Entry entry : underlineObj.entrySet()) { + //下划线key + String humpName = underlineConverHump(entry.getKey()); + if(humpName.equals("chargeItems") && StringUtils.isNotEmpty((String)entry.getValue())){ + JSONArray chargeItem = JSON.parseArray((String)entry.getValue()); + JSONArray newChargeItems = new JSONArray(); + for (Object object : chargeItem) { + JSONObject obj = this.underlineObjConverHumpObj(JSON.toJSONString(object)); + newChargeItems.add(obj); + } + humpObj.put(humpName,newChargeItems); + }else if(humpName.equals("inTime") || humpName.equals("outTime") || humpName.equals("time")){ + String value = String.valueOf((Integer)entry.getValue()); + if(value.length()==10){//UNIX时间戳 + humpObj.put(humpName, ((Integer)entry.getValue())*1000L); + }else{ + humpObj.put(humpName, entry.getValue()); + } + }else{ + humpObj.put(humpName, entry.getValue()); + } + } + return humpObj; + } + /** + * 将下划线转换为驼峰:vpl_own——>vplOwn + * @param underlineName + * @return + * 2017年5月5日 zhaowg + */ + private String underlineConverHump(String underlineName){ + if(StringUtils.isBlank(underlineName)){ + return ""; + } + String[] underlines = underlineName.split("_"); + StringBuilder humpName = new StringBuilder(); + for (int i = 0; i < underlines.length; i++) { + String underline = underlines[i]; + if(i==0){ + humpName.append(underline); + }else{ + humpName.append(underline.substring(0, 1).toUpperCase()+underline.substring(1)); + } + } + return humpName.toString(); + } + /** + * 临时解决,调用旧的park-portal 进出场服务 + * @param path + * @param params + * 2017年6月27日 zhaowg + */ + private void tmpInvokeOldInOutController(String path,String param){ + /*String url = "http://127.0.0.1:"+oldServerPort+"/parking/"+path; + logger.info("开始调用艾润进出场上报旧的服务:"+url); + new Thread(new Runnable() { + @Override + public void run() { + + logger.info("开始调用艾润进出场上报旧的服务:"+url); + + String decryptAESparam = ""; + try { + logger.info("调用旧服务加密前:"+param); + decryptAESparam = AESPlus.encrypt(irain_aes,param); + logger.info("调用旧服务加密后:"+decryptAESparam); + } catch (Exception e) { + logger.info("irain 进车上报返解密异常:"+e); + } + Map params = new HashMap<>(); + params.put("param", decryptAESparam); + String rs =""; + try { + rs = HttpClientTutorial.httpPostRequest(url, params); + logger.info("调用艾润进出场上报旧的服务完成:"+rs); + } catch (Exception e) { + logger.error("调用艾润进出场上报旧的服务报错:",e); + } + + } + }).start();*/ + } + @RequestMapping(value = "/testIn",method = RequestMethod.POST) + public String billQuery(String param) { + String decryptAESparam = ""; + try { + decryptAESparam = AESPlus.encrypt(irain_aes,param); + } catch (Exception e) { + logger.info("irain 进车上报返解密异常:"+e); + } + Map params = new HashMap<>(); + params.put("param", decryptAESparam); + String rs =""; + try { + rs = HttpClientTutorial.httpPostRequest("http://127.0.0.1:"+serverPort+"/parking/inParking", params); + logger.info("irain 查询停车费用返回:" + JSONObject.toJSONString(rs)); + } catch (Exception e) { + logger.info("irain 查询停车费用出错:" + e); + } + return rs; + } + + + @RequestMapping(value = "/testOut",method = RequestMethod.POST) + public String billQuery1(String param) { + String decryptAESparam = ""; + try { + decryptAESparam = AESPlus.encrypt(irain_aes,param); + } catch (Exception e) { + logger.info("irain 进车上报返解密异常:"+e); + } + Map params = new HashMap<>(); + params.put("param", decryptAESparam); + String rs =""; + try { + rs = HttpClientTutorial.httpPostRequest("http://127.0.0.1:"+serverPort+"/parking/outParking", params); + logger.info("irain 查询停车费用返回:" + JSONObject.toJSONString(rs)); + } catch (Exception e) { + logger.info("irain 查询停车费用出错:" + e); + } + return rs; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/irain/IRainPayController.java a/src/main/java/com/zteits/irain/portal/web/irain/IRainPayController.java new file mode 100644 index 0000000..3b3b80c --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/irain/IRainPayController.java @@ -0,0 +1,94 @@ +package com.zteits.irain.portal.web.irain; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.utils.MD5Utils; +import com.zteits.irain.portal.common.HttpClientTutorial; + +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: IRainPayController.java + * @Description: 支付订单 同步给 艾润 + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 上午11:51:45 Modification History: Date Author Version + * Description ---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +@RestController +@RequestMapping("/pay") +public class IRainPayController { + @Value("${irain.url}") + private String irain_ur; + @Value("${irain.appid}") + private String irain_appid; + @Value("${irain.appsecret}") + private String irain_appsecret; + @Value("${irain.park_code}") + private String park_code; + + private static final Logger logger = LoggerFactory.getLogger(IRainPayController.class); + + /** + * 订单支付 中兴智能交通——>艾润 + * + * @param param (aes加密后的JSON字符串) + */ + @RequestMapping(value = "/issued",method = RequestMethod.POST) + public String issued() { + /**** 以下为模拟入参 实际入参 由app提供-------------------------------------*/ + Long time = System.currentTimeMillis(); + String md5 = MD5Utils.enMD5(irain_appid+irain_appsecret+time); + Map params = new HashMap<>(); + params.put("appid", irain_appid); + params.put("sign", md5); + params.put("timestamp", time); + params.put("vpl_number", "蒙AS4321"); + params.put("park_code", "734861a1e8656ffa51bdd90829941ca9"); + params.put("amount", 10000); + String rs=""; + try { + logger.info("irain 支付订单入参:" + JSONObject.toJSONString(params)); + rs = HttpClientTutorial.httpPostRequest(irain_ur+"/pay/Issued", params); + logger.info("irain 支付订单返回:" + JSONObject.toJSONString(rs)); + } catch (Exception e) { + logger.info("irain 支付订单出错:" + e); + } + return JSONObject.toJSONString(rs); + } + + @RequestMapping(value = "/test_issued",method = RequestMethod.POST) + public String test_issued(String vpl_number,Integer amount) { + /**** 以下为模拟入参 实际入参 由app提供-------------------------------------*/ + Long time = System.currentTimeMillis(); + String md5 = MD5Utils.enMD5(irain_appid+irain_appsecret+time); + Map params = new HashMap<>(); + params.put("appid", irain_appid); + params.put("sign", md5); + params.put("timestamp", time); + params.put("vpl_number", vpl_number); + params.put("park_code", park_code); + params.put("amount", amount); + String rs=""; + try { + logger.info("irain 支付订单入参:" + JSONObject.toJSONString(params)); + rs = HttpClientTutorial.httpPostRequest(irain_ur+"/pay/Issued", params); + logger.info("irain 支付订单返回:" + JSONObject.toJSONString(rs)); + } catch (Exception e) { + logger.info("irain 支付订单出错:" + e); + } + return JSONObject.toJSONString(rs); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/irain/IRainQueryController.java a/src/main/java/com/zteits/irain/portal/web/irain/IRainQueryController.java new file mode 100644 index 0000000..118ac05 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/irain/IRainQueryController.java @@ -0,0 +1,95 @@ +package com.zteits.irain.portal.web.irain; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.utils.MD5Utils; +import com.zteits.irain.portal.common.HttpClientTutorial; + +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: IRainQueryController.java + * @Description: 查询艾润 控制器 + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年4月20日 上午11:51:45 Modification History: Date Author Version + * Description ---------------------------------------------------------* + * 2017年4月20日 wangbiao v1.0.0 创建 + */ +@RestController +@RequestMapping("/query") +public class IRainQueryController { + @Value("${irain.url}") + private String irain_ur; + @Value("${irain.appid}") + private String irain_appid; + @Value("${irain.appsecret}") + private String irain_appsecret; + @Value("${irain.park_code}") + private String park_code; + + + private static final Logger logger = LoggerFactory.getLogger(IRainQueryController.class); + + /** + * 订单支付 中兴智能交通——>艾润 + * + * @param param (aes加密后的JSON字符串) + */ + @RequestMapping(value = "/billQuery", method = RequestMethod.POST) + public String billQuery(String param) { + /**** 以下为模拟入参 实际入参 由app提供-------------------------------------*/ + + Long time = System.currentTimeMillis(); + String md5 = MD5Utils.enMD5(irain_appid+irain_appsecret+time); + Map params = new HashMap<>(); + params.put("appid", irain_appid); + params.put("sign", md5); + params.put("timestamp", time); + params.put("vpl_number", "蒙AS4321"); + params.put("park_code", "2a94dbdfb232b39f1a1309a13fa11e28"); + String rs = ""; + try { + logger.info("irain 查询停车费用入参:" + JSONObject.toJSONString(params)); + rs = HttpClientTutorial.httpPostRequest(irain_ur+"/bill/Query", params); + logger.info("irain 查询停车费用返回:" + JSONObject.toJSONString(rs)); + } catch (Exception e) { + logger.info("irain 查询停车费用出错:" + e); + } + return JSONObject.toJSONString(rs); + } + + @RequestMapping(value = "/test_billQuery", method = RequestMethod.POST) + public String testBillQuery(String vpl_number) { + /**** 以下为模拟入参 实际入参 由app提供-------------------------------------*/ + + Long time = System.currentTimeMillis(); + String md5 = MD5Utils.enMD5(irain_appid+irain_appsecret+time); + Map params = new HashMap<>(); + params.put("appid", irain_appid); + params.put("sign", md5); + params.put("timestamp", time); + params.put("vpl_number", vpl_number); + params.put("park_code", park_code); + String rs = ""; + try { + logger.info("irain 查询停车费用入参:" + JSONObject.toJSONString(params)); + rs = HttpClientTutorial.httpPostRequest(irain_ur+"/bill/Query", params); + logger.info("irain 查询停车费用返回:" + JSONObject.toJSONString(rs)); + } catch (Exception e) { + logger.info("irain 查询停车费用出错:" + e); + } + return JSONObject.toJSONString(rs); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/irain/UpdateFreeBerthController.java a/src/main/java/com/zteits/irain/portal/web/irain/UpdateFreeBerthController.java new file mode 100644 index 0000000..a580eb9 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/irain/UpdateFreeBerthController.java @@ -0,0 +1,90 @@ +package com.zteits.irain.portal.web.irain; + +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.cache.sys.SysCodeValueCacheUtil; +import com.clouds.common.constants.CodeValKindEnum; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkOutNoRequest; +import com.zteits.clouds.api.dto.park.param.StatisticParkLotCountByCountryRequest; +import com.zteits.clouds.api.dto.park.param.UpdateFreeBerthRequest; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.irain.portal.service.interfaces.parklotidleberths.ParkLotIdleBerthsService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +/** + * 更新空闲车位 + * 被SQL触发器调用 + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: UpdateFreeBerthController.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年7月18日 上午9:44:36 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月18日 langlw v1.0.0 创建 + */ +@RestController +@Api(value="更新空闲车位",description="更新空闲车位") +@RequestMapping("/freeBerth") +public class UpdateFreeBerthController { + private static final Logger logger = LoggerFactory.getLogger(UpdateFreeBerthController.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private ParkLotIdleBerthsService parkLotIdleBerthsService; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + + + @ApiOperation("更新空闲车位总数") + @GetMapping("updateFreeBerth") + public BizResultVO getDisplayCountry(@RequestParam String plOutNo, + @RequestParam Integer fromType,@RequestParam String freeBerth){ + //通过上报停车场编号查询对应的自己内部停车场编号 + logger.info("根据上报的停车场编号["+plOutNo+"]在缓存总没有查询到对应的停车场信息,开始查询数据库"); + QueryParkLotInfoByPkOutNoRequest request = new QueryParkLotInfoByPkOutNoRequest(); + request.setSysCode(sysCode); + request.setPklOutNo(plOutNo); + BizResult bizResult = parkingLotQueryService.QueryParkingLotByPkOutNo(request ); + ParkingLotDTO parkingLotDTO = ResultUtils.getBizResultData(bizResult); + String plNo = parkingLotDTO.getPlNo(); + //更新空闲车位数 + UpdateFreeBerthRequest updaterequest=new UpdateFreeBerthRequest(); + updaterequest.setFreeBerths(Integer.valueOf(freeBerth)); + updaterequest.setPlNo(plNo); + updaterequest.setFromType(fromType); + updaterequest.setSysCode(sysCode); + logger.info("请求参数:"+JSONObject.toJSONString(request)); + int freeBerths = parkLotIdleBerthsService.updateAndGetIdleBerthByParkNo(updaterequest.getInoutTime(), updaterequest.getPlNo(), updaterequest.getType(), updaterequest.getFromType(), updaterequest.getFreeBerths()); + logger.info("调用后场服务:更新车位总数", freeBerths); + return new BizResultVO().setData(true); + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/web/mobile/ParkLotController.java a/src/main/java/com/zteits/irain/portal/web/mobile/ParkLotController.java new file mode 100644 index 0000000..b839176 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/mobile/ParkLotController.java @@ -0,0 +1,105 @@ +package com.zteits.irain.portal.web.mobile; + +import java.util.List; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSON; +import com.clouds.common.cache.park.ParkFreeBerthsCacheUtil; +import com.clouds.common.cache.park.ParkingLotGeoCacheUtil; +import com.google.common.collect.Lists; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.constants.LonLatTypeEnum; +import com.zteits.clouds.api.dto.park.dto.ParkinglotAndGeoInfoDTO; +import com.zteits.clouds.api.dto.park.param.GetParkLotRequest; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.irain.portal.vo.mobile.BizResultMobileVO; +import com.zteits.irain.portal.vo.mobile.ParkingspotVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +/** + * 停车场信息查询 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkingLotController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月6日 上午11:31:10 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月6日 zhaowg v1.0.0 创建 + */ +@Api(value = "停车场信息查询",description="停车场信息查询") +@RestController +@RequestMapping("/parklot") +public class ParkLotController { + + @Value("${project.syscode}") + private String sysCode; + + private static final Logger logger = LoggerFactory.getLogger(ParkLotController.class); + + @Autowired + private ParkingLotQueryService tabParkingLotService; + + @ApiOperation("查询停车场信息") + @PostMapping("queryParkingLots") + public BizResultMobileVO> queryParkingLots(@Valid @RequestBody GetParkLotRequest request){ + if(request.getBaseRequest()==null){ + request.setBaseRequest(new BaseInfo()); + } + logger.info("["+request.getBaseRequest().getRequestId()+"]开始调用查询停车场信息:"+JSON.toJSONString(request)); + List dtos = Lists.newArrayList(); + if(request.getType().equals(GetParkLotRequest.TYPE_RECORD_COUNT)){ + dtos = ParkingLotGeoCacheUtil.queryParkLotsWithDistanceAndCoordinateByCountAsc + (LonLatTypeEnum.LON_LAT_TYPE_3,Double.valueOf(request.getLongitude()), Double.valueOf(request.getLatitude()), Long.valueOf(request.getLimit())); + }else if(request.getType().equals(GetParkLotRequest.TYPE_DISTANCE)){ + dtos = ParkingLotGeoCacheUtil.queryParkLotsWithDistanceAndCoordinateByAsc + (LonLatTypeEnum.LON_LAT_TYPE_3,Double.valueOf(request.getLongitude()), Double.valueOf(request.getLatitude()), Double.valueOf(request.getLimit()), null); + } + List vos = Lists.newArrayList(); + if(!CollectionUtils.isEmpty(dtos)){ + for (ParkinglotAndGeoInfoDTO dto : dtos) { + ParkingspotVO vo = new ParkingspotVO(); + vo.setAddress(dto.getPlAddress()); + vo.setChargeDetail(dto.getPlRate()==null?new String[]{}:dto.getPlRate().split("#")); + vo.setDescription(""); + vo.setDistance(dto.getDistance()); + //获取空闲车位数 + Integer idleberths = ParkFreeBerthsCacheUtil.getFreeBerthsByPlNo(dto.getPlNo()); + vo.setIdleberths(idleberths); + vo.setLatitude(dto.getLatId().doubleValue()); + vo.setLongitude(dto.getLonId().doubleValue()); + vo.setName(dto.getPlName()); + vo.setPhone(dto.getServiceTel()); + vo.setPklNo(dto.getPlNo()); + vo.setRatedescription(""); + vo.setTotalberths(dto.getPlBerthNum()); + vo.setType(dto.getPlType()); + vos.add(vo); + } + } + BizResultMobileVO> bizResultVO = new BizResultMobileVO>(); + bizResultVO.setCode("0"); + bizResultVO.setSuccessful("true"); + bizResultVO.setTotal(vos.size()+""); + bizResultVO.setData(vos); + logger.info("["+request.getBaseRequest().getRequestId()+"]调用查询停车场信息成功:"+JSON.toJSONString(bizResultVO)); + return bizResultVO; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java new file mode 100644 index 0000000..45b30d4 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java @@ -0,0 +1,453 @@ +/** + * + */ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.fastjson.JSON; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.redis.RedisCacheUtil; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.vo.BizResultVO; +import com.clouds.common.web.vo.EasyUIDataGridVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticMaxAndMinDTO; +import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; +import com.zteits.clouds.api.service.park.ParkingLotUseStatisticService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO.SerieVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * @author hxz + * + */ +@Api("停车场云平台 数据统计 车位使用管理") +@Controller +@RequestMapping("/parking") +public class BerthsStatisticController extends BizController { + private static final Logger logger = LoggerFactory.getLogger(BerthsStatisticController.class); + @Value("${project.syscode}") + private String sysCode; + @Autowired + private ParkingLotUseStatisticService parkingLotStatisticService; + + /** + * + * @param requestObject + * @return + */ + @ApiOperation("统计摘要") + @PostMapping("getstatisticsummary") + @ResponseBody + public BizResultVO GetStatisticSummary( + @RequestBody ParkingLotUseStatisticForPageRequest requestObject) { + Calendar beginc = Calendar.getInstance(); + beginc.setTime(requestObject.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(requestObject.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + requestObject.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + requestObject.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + BizResult respondObject = parkingLotStatisticService + .QueryBerthUseStatisticMaxAndMin(requestObject); + return new BizResultVO<>(respondObject); + } + + @ApiOperation("获取车位使用情况统计列表") + @PostMapping("getstatisticlist") + @ResponseBody + public BizResultVO> GetParkingPlaceStatistic( + @RequestBody ParkingLotUseStatisticForPageRequest requestObject) + throws InstantiationException, IllegalAccessException { + if (null == requestObject.getBeginTime() || null==requestObject.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + + Calendar beginc = Calendar.getInstance(); + beginc.setTime(requestObject.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(requestObject.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + requestObject.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + requestObject.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + BizResult> respondObject = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(requestObject); + return returnJqGridData(respondObject, ParkingLotUseStatisticDTO.class); + } + + @ApiOperation("导出车流量数据统计excel") + @GetMapping("exportBerthStatisticExcel") + public void excelParkingLotUseStatistic(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam String plNos, HttpServletRequest requests, HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + List plNoslist = new ArrayList<>(); + plNoslist.add(plNos); + request.setPlNos(plNoslist); + request.setBaseRequest(new BaseInfo(1, 0)); + + Calendar beginc = Calendar.getInstance(); + beginc.setTime(request.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(request.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "时间", "空置率", "周转率" }; + String sheetName = "车位管理"; + String fileName = "车位管理" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + for (ParkingLotUseStatisticDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = format.format(e.getStatisticBeginTime()); + obj[index++] = e.getFreeRatio() *100 +"%"; + obj[index++] = e.getTurnoverRatio(); + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + /** + * 根据时间获取车位空置率折线图 + * + * @param request + * @return + */ + @ApiOperation("根据时间获取车位空置率折线图") + @PostMapping("getFreeRatioBerthForLineChart") + @ResponseBody + public BizResultVO getFreeRatioBerthForLineChart( + @RequestBody ParkingLotUseStatisticForPageRequest request) { + //根据权限获取停车场列表 + if (null == request.getBeginTime() || null==request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + logger.info("根据停车场编号获取该停车场车位空置率折线图"); + Calendar beginTime = Calendar.getInstance(); + beginTime.setTime(request.getBeginTime()); + + Calendar endTime = Calendar.getInstance(); + endTime.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + List xAxisData = Lists.newArrayList(); + String dateType=""; + int berthRatio=ParkConstant.ParkingLotUseStatistic.BerthRatioType.FREE; + if (dayDifference == 0L) { + // 1个小时为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + for (int i = 0; i <= totaltimestampCount; i++) { + String hour = String.format("%02d", i); + xAxisData.add(hour + ":" + "00"); + } + request.setBaseRequest(new BaseInfo(1, 0)); + dateType="HH:mm"; + LineChartVO freeBerthRatios=getFreeBerthRatios(request, xAxisData, dateType,berthRatio); + return new BizResultVO().setData(freeBerthRatios); + } else if (dayDifference <= 3L) { + // 1小时为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + String day = ""; + String month = ""; + for (int i = 0; i < dayDifference.intValue(); i++) { + beginTime.add(Calendar.DAY_OF_MONTH, 1); + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + month = String.format("%02d", (beginMonth)); + day = String.format("%02d", (beginDay)); + for (int j = 0; j < totaltimestampCount; j++) { + String hour = String.format("%02d", (j)); + xAxisData.add(month + "-" + day + " " + hour); + } + } + request.setBaseRequest(new BaseInfo(1, 0)); + dateType="MM-dd HH"; + LineChartVO freeBerthRatios=getFreeBerthRatios(request, xAxisData, dateType,berthRatio); + return new BizResultVO().setData(freeBerthRatios); + } else { + // 1天为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + for (int i = 0; i < dayDifference.intValue(); i++) { + beginTime.add(Calendar.DAY_OF_MONTH, 1); + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + xAxisData.add(month + "-" + day); + } + } + request.setBaseRequest(new BaseInfo(1, 0)); + dateType="MM-dd"; + LineChartVO freeBerthRatios=getFreeBerthRatios(request, xAxisData, dateType,berthRatio); + return new BizResultVO().setData(freeBerthRatios); + + } + + /** + * 根据时间获取车位周转率折线图 + * + * @param request + * @return + */ + @ApiOperation("根据时间获取车位周转率折线图") + @PostMapping("getTurnOverBerthForLineChart") + @ResponseBody + public BizResultVO getTurnOverBerthForLineChart( + @RequestBody ParkingLotUseStatisticForPageRequest request) { + + logger.info("根据停车场编号获取该停车场车位周转率折线图"); + if (null == request.getBeginTime() || null==request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + Calendar beginTime = Calendar.getInstance(); + beginTime.setTime(request.getBeginTime()); + + Calendar endTime = Calendar.getInstance(); + endTime.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + List xAxisData = Lists.newArrayList(); + String dateType=""; + int berthRatio=ParkConstant.ParkingLotUseStatistic.BerthRatioType.TURNOVER; + if (dayDifference == 0L) { + //1个小时为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + for (int j = 0; j <= totaltimestampCount; j++) { + String hour = String.format("%02d", (j)); + xAxisData.add(hour + ":" + "00"); + } + + request.setBaseRequest(new BaseInfo(1, 0)); + dateType="HH:mm"; + LineChartVO freeBerthRatios=getFreeBerthRatios(request, xAxisData, dateType,berthRatio); + return new BizResultVO().setData(freeBerthRatios); + } else if (dayDifference <= 3L) { + // 1小时为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + String day = ""; + String month = ""; + for (int i = 0; i < dayDifference.intValue(); i++) { + beginTime.add(Calendar.DAY_OF_MONTH, 1); + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + month = String.format("%02d", (beginMonth)); + day = String.format("%02d", (beginDay)); + for (int j = 0; j < totaltimestampCount; j++) { + String hour = String.format("%02d", (j)); + xAxisData.add(month + "-" + day + " " + hour); + } + } + request.setBaseRequest(new BaseInfo(1, 0)); + dateType="MM-dd HH"; + LineChartVO freeBerthRatios=getFreeBerthRatios(request, xAxisData, dateType,berthRatio); + return new BizResultVO().setData(freeBerthRatios); + } else { + // 1天为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + for (int i = 0; i < dayDifference.intValue(); i++) { + beginTime.add(Calendar.DAY_OF_MONTH, 1); + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + xAxisData.add(month + "-" + day); + } + request.setBaseRequest(new BaseInfo(1, 0)); + dateType="MM-dd"; + LineChartVO freeBerthRatios=getFreeBerthRatios(request, xAxisData, dateType,berthRatio); + return new BizResultVO().setData(freeBerthRatios); + } + + } + + + private LineChartVO getFreeBerthRatios(ParkingLotUseStatisticForPageRequest request, + List xAxisData,String dateType ,int berthRatio){ + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + PageBean pageBean = ResultUtils.getBizResultData(bizResult); + List useStatisticDTOs = Lists.newArrayList(); + if (pageBean != null) { + useStatisticDTOs = pageBean.getDataList(); + } + + // 停车场编号和名称对应关系 + Map parkNameMap = Maps.newHashMap(); + // 通过停车场,和统计时间分组 + Map> parkLotMap = Maps.newHashMap(); + if (!CollectionUtils.isEmpty(useStatisticDTOs)) { + for (ParkingLotUseStatisticDTO statisticDTO : useStatisticDTOs) { + String key = statisticDTO.getPlNo(); + parkNameMap.put(key, statisticDTO.getPlName()); + String statisBeginTime = DateUtil.getDateString(statisticDTO.getStatisticBeginTime(), dateType); + // 保存空置率 + if (!parkLotMap.containsKey(key)) { + Map timeAndVal = Maps.newHashMap(); + if(ParkConstant.ParkingLotUseStatistic.BerthRatioType.FREE == berthRatio){ + timeAndVal.put(statisBeginTime, statisticDTO.getFreeRatio() * 100); + parkLotMap.put(key, timeAndVal); + }else if(ParkConstant.ParkingLotUseStatistic.BerthRatioType.TURNOVER == berthRatio){ + timeAndVal.put(statisBeginTime, statisticDTO.getTurnoverRatio() * 100); + parkLotMap.put(key, timeAndVal); + } + } else { + if(ParkConstant.ParkingLotUseStatistic.BerthRatioType.FREE == berthRatio){ + parkLotMap.get(key).put(statisBeginTime, statisticDTO.getFreeRatio() * 100); + }else if(ParkConstant.ParkingLotUseStatistic.BerthRatioType.TURNOVER == berthRatio){ + parkLotMap.get(key).put(statisBeginTime, statisticDTO.getTurnoverRatio() * 100); + } + } + + } + } + //判断是否包含所有待查询的停车场信息 + if(request.getPlNos().size()>parkLotMap.size()){ + for (String plNo:request.getPlNos()) { + if(!parkLotMap.containsKey(plNo)){ + ParkingLotDTO parkingLotDTO=ParkingLotCacheUtil.getParkLotByPlNo(plNo); + parkNameMap.put(plNo, parkingLotDTO.getPlName()); + parkLotMap.put(plNo, Maps.newHashMap()); + } + } + } + + // 封装车位统计信息 + LineChartVO freeBerthRatios = new LineChartVO(); + List freeBerthRatios_legendData = Lists.newArrayList(); + freeBerthRatios_legendData.addAll(parkNameMap.values()); + freeBerthRatios.setLegendData(freeBerthRatios_legendData); + freeBerthRatios.setxAxisData(xAxisData); + List series = Lists.newArrayList(); + + if (parkLotMap != null && !parkLotMap.isEmpty()) { + for (Entry> parkLotEntry : parkLotMap.entrySet()) { + SerieVO serieVO = new SerieVO(); + // 获取停车场名称 + String name = parkNameMap.get(parkLotEntry.getKey()); + serieVO.setName(name); + // 设置每个时间戳对应的空置率 + Map freeRatioMaps = parkLotEntry.getValue(); + // 保存上一次的空置率,当某个时间点没有数据时,则保持和上次一致 + Integer lastFreeRatio = 0; + List freeRations = Lists.newArrayList(); + for (String timestamp : xAxisData) { + if (freeRatioMaps.containsKey(timestamp)) { + lastFreeRatio = freeRatioMaps.get(timestamp).intValue(); + }else{ + lastFreeRatio = 0; + } + freeRations.add(lastFreeRatio); + } + serieVO.setData(freeRations); + series.add(serieVO); + } + } + freeBerthRatios.setSeries(series); + return freeBerthRatios; + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BillManageController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BillManageController.java new file mode 100644 index 0000000..00a349b --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BillManageController.java @@ -0,0 +1,274 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.constants.SessionEnum; +import com.clouds.common.entity.UserInfo; +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.SessionCommUtil; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.dto.clouds.dto.BillManageDTO; +import com.zteits.clouds.api.dto.clouds.param.BillQueryRequest; +import com.zteits.clouds.api.dto.pay.param.TdCompanyParkQueryRequest; +import com.zteits.clouds.api.service.clouds.BillManageForDayService; +import com.zteits.clouds.api.service.pay.TdCustCompanyService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 日账单controller类.
+ * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: BillManageController.java + * @Description: + * @version: v1.0.0 + * @author: wangfs + * @date: 2017年6月30日 下午1:14:16 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月30日 wangfs v1.0.0 创建 + */ + +@Api(value = "停车场云平台 日账单", description = "停车场云平台 日账单") +@Controller +@RequestMapping("/bill") +public class BillManageController extends BizController { + private Logger logger = LoggerFactory.getLogger(BillManageController.class); + @Autowired + private BillManageForDayService billManageForDayService; + + @Autowired + private TdCustCompanyService tdCustCompanyService; + + @Autowired + private SessionCommUtil sessionCommUtil; + + @Autowired + private Map map; + + private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @ApiOperation("日账汇总单查询") + @RequestMapping("/queryBillforDayForPage") + @ResponseBody + public void queryBillforDayTotalForPage(@RequestBody BillQueryRequest billQueryRequest, HttpServletRequest request, + HttpServletResponse response) throws Exception { + TdCustCompanyService sert = map.get("tdCustCompanyService"); + logger.info("---begin--日账汇总单查询调用后场dubbo服务,入参={}", JSONObject.toJSON(billQueryRequest)); + System.out.println("seesionId="+request.getSession().getId()); + UserInfo userInfo = sessionCommUtil.getUserInfo(); + logger.info("从session中获取的用户信息={}" + JSONObject.toJSONString(userInfo)); + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + if (userInfo != null) { + + tdCompanyParkQueryRequest.setSysCode(billQueryRequest.getSysCode()); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSessionId(request.getSession().getId()); + billQueryRequest.setParkIdList(this.queryParkNoByCustIds(tdCompanyParkQueryRequest)); + } + + BizResult> result = billManageForDayService.queryBillforDayTotalForPage(billQueryRequest); + result.setErrMsg(billQueryRequest.getParkIdList().toString()); + logger.info("---end--日账汇总单查询调用后场dubbo服务,结果={}", JSONObject.toJSONString(result)); + this.returnJsonDataGrid(response, result); + } + + /** + * 查询日账单.
+ * + * @param request + * @param response + * @throws Exception + */ + @ApiOperation("日账单查看") + @RequestMapping(value = "/queryBillForDay", method = RequestMethod.POST) + @ResponseBody + public void queryBillForDay(@RequestBody BillQueryRequest billQueryRequest, HttpServletRequest request, + HttpServletResponse response) throws Exception { + BizResult> result = new BizResult>(); + logger.info("---begin---日账单查看调用后场dubbo服务,入参={}", JSONObject.toJSONString(billQueryRequest)); + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + UserInfo userInfo = (UserInfo) request.getSession().getAttribute(SessionEnum.USER_INFO.key()); + logger.info("从session中获取的用户信息={}" + JSONObject.toJSONString(userInfo)); + if (userInfo != null) { + + tdCompanyParkQueryRequest.setSysCode(billQueryRequest.getSysCode()); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSessionId(request.getSession().getId()); + billQueryRequest.setUserName(userInfo.getName()); + billQueryRequest.setParkIdList(this.queryParkNoByCustIds(tdCompanyParkQueryRequest)); + + } + result = billManageForDayService.queryBillforDayDeatilPage(billQueryRequest); + logger.info("---end---日账单查看调用后场dubbo服务,结果={}", JSONObject.toJSON(result)); + + this.returnJsonDataGrid(response, result); + } + + /** + * 获取登录用户信息.
+ * @param request + * @param response + * @throws Exception + */ + @RequestMapping(value = "/queryUserInfoForName", method = RequestMethod.POST) + public void queryUserInfoForName( HttpServletRequest request, + HttpServletResponse response) throws Exception { + UserInfo userInfo = (UserInfo) request.getSession().getAttribute(SessionEnum.USER_INFO.key()); + this.returnJson(response, userInfo); + } + + + + + + /** + * 日账单导出.
+ * + * @param request + * @param response + * @throws Exception + */ + @RequestMapping("/exportToExcleForBillForDay") + public void exportToExcleForBillForDay(String sysCode, String beginTime, String endTime, String aliTotalFee , + String aliDealCount,String wxTotalFee,String wxDealCount,String cashTotalFee,String cashDealCount, + String orderTotalFee,String orderDealCount, + HttpServletRequest request,String parkIds,String userName, + HttpServletResponse response) throws Exception { + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //获取session中的用户信息 + UserInfo userInfo = sessionCommUtil.getUserInfo(); + BillQueryRequest billQueryRequest = new BillQueryRequest(); + + billQueryRequest.setBeginTime(format.parse(beginTime)); + billQueryRequest.setEndTime(format.parse(endTime)); + billQueryRequest.setSysCode(sysCode); + billQueryRequest.getBaseRequest().setPageSize(0); + List parkList= new ArrayList(); + if(StringUtils.isNotEmpty(parkIds)){ + for(String str :parkIds.split(",")){ + if(StringUtils.isNotEmpty(str)){ + parkList.add(str.trim()); + } + } + } + billQueryRequest.setParkIdList(parkList); + /**查询日账单汇总信息.*/ + BizResult> result = billManageForDayService.queryBillforDayDeatilPage(billQueryRequest); + String[] titleOne = new String[2]; + titleOne[0] = "用户: " + (StringUtils.isNotEmpty(userName) ? userName : ""); + titleOne[1] = "时间: "+beginTime+" "+endTime; + String[] titleTwo = new String[] {"","现金", "微信", "支付宝", "合计"}; + String[] titleThree = new String[] { "停车场名称", "现金", "微信", "支付宝", "合计"}; + String sheetName = "日账单"; + String fileName = "日账单管理" + format.format(new Date()); + + + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildBillForDay(workSheet, titleOne, 0, 0);//创建第一行标题 + Layouter.buildHeaders(workSheet, titleTwo, 0, 0);//创建第2行标题 + Layouter.buildHeaders(workSheet, titleThree, 3, 0);//创建第3行标题 + // 3.填充数据 + List contentListTwo = new ArrayList(); + for(int i = 0;i<2;i++){ + Object[] str = new Object[titleTwo.length]; + if(i == 0){ + str[0] = "交易笔数"; + str[1] = (cashDealCount == null ? "0" : cashDealCount); + str[2] = (wxDealCount== null ? "0" : wxDealCount); + str[3] = (aliDealCount== null ? "0" : aliDealCount); + str[4] = (orderDealCount== null ? "0" : orderDealCount); + }else{ + str[0] = "总收入(元)"; + str[1] = (cashTotalFee == null ? "0" : new BigDecimal(cashTotalFee).divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + str[2] = (wxTotalFee== null ? "0" : new BigDecimal(wxTotalFee).divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + str[3] = (aliTotalFee== null ? "0" : new BigDecimal(aliTotalFee).divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + str[4] = (orderTotalFee== null ? "0" : new BigDecimal(orderTotalFee).divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + } + contentListTwo.add(str); + } + ExcleFillDateManager fillUserManagerTwo = new ExcleFillDateManager(); + fillUserManagerTwo.fillSalesOrga(workSheet, titleTwo, contentListTwo, 2); //第2行标题 + + // + List contentList = new ArrayList(); + if(result != null && result.getData() != null){ + List list = result.getData().getDataList(); + if(list != null && list.size()>0){ + for (int i = 0; i < list.size(); i++) { + BillManageDTO e = list.get(i); + Object[] obj = new Object[titleThree.length]; + int index = 0; + obj[index++] = e.getParkName(); + obj[index++] = (e.getCashTotalFee()== null ? "0" : e.getCashTotalFee().divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + obj[index++] = (e.getWxTotalFee()== null ? "0" : e.getWxTotalFee().divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + obj[index++] = (e.getAliTotalFee()== null ? "0" : e.getAliTotalFee().divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + obj[index++] = (e.getAliTotalFee()== null ? "0" : e.getAliTotalFee().divide(new BigDecimal("100"),2, BigDecimal.ROUND_HALF_UP)) ; + contentList.add(obj); + } + } + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, titleThree, contentList, 5); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + + + } + + /** + * 通过session信息获取停车场编码.
+ * + * @param billQueryRequest + * @param userInfo + * @return + * @throws Exception + */ + private List queryParkNoByCustIds(TdCompanyParkQueryRequest tdCompanyParkQueryRequest) throws Exception { + /** 查询停车场编码. */ + BizResult> parkNoResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest); + if (parkNoResult.isSuccess() && parkNoResult != null && parkNoResult.getData() != null) { + logger.info("根据登录获取到对应的停车场编码=" + JSONArray.toJSONString(parkNoResult.getData())); + return parkNoResult.getData(); + } else { + logger.info("根据登录用户没有获取到对应的停车场编码"); + return null; + } + + } + + + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/InOutParkStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/InOutParkStatisticController.java new file mode 100644 index 0000000..9fcf01c --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/InOutParkStatisticController.java @@ -0,0 +1,385 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.config.authentication.UserServiceBeanDefinitionParser; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.fastjson.JSON; +import com.clouds.common.entity.UserInfo; +import com.clouds.common.utils.AmountUtils; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.SessionCommUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.clouds.common.web.vo.EasyUIDataGridVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.clouds.dto.BillManageDTO; +import com.zteits.clouds.api.dto.park.dto.InOutParkDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticSumDTO; +import com.zteits.clouds.api.dto.park.param.InOutParkRequest; +import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; +import com.zteits.clouds.api.dto.pay.param.TdCompanyParkQueryRequest; +import com.zteits.clouds.api.service.clouds.InOutParkStatisticService; +import com.zteits.clouds.api.service.park.ParkingLotUseStatisticService; +import com.zteits.clouds.api.service.pay.TdCustCompanyService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO.SerieVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 企业云平台->数据统计->进出场上报。 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InOutParkStatisticController.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年7月26日 上午11:30:04 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月26日 langlw v1.0.0 创建 + */ +@Api(value = "企业云平台->数据统计->进出场上报数据统计", description = "企业云平台->数据统计->进出场上报数据统计") +@Controller +@RequestMapping(value = "/inOutParkStatistic") +public class InOutParkStatisticController extends BizController { + private static final Logger logger = LoggerFactory.getLogger(InOutParkStatisticController.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private ParkingLotUseStatisticService parkingLotStatisticService; + @Autowired + private InOutParkStatisticService inOutParkStatisticService; + + + @ApiOperation("数据统计进出场上报") + @PostMapping("queryInOutParkForList") + @ResponseBody + public BizResultVO> queryInOutParkForList( + @RequestBody InOutParkRequest request) throws Exception { + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + if (null == request.getBeginTime() || null==request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + BizResult> bizResult = inOutParkStatisticService.queryInOutParkForList(request); + return returnJqGridData(bizResult, InOutParkDTO.class); + } + + @ApiOperation("数据统计进出场上报折线图") + @PostMapping("queryInOutParkForChart") + @ResponseBody + public BizResultVO queryInOutParkForChart( + @RequestBody InOutParkRequest request) throws Exception { + if (null == request.getBeginTime() || null==request.getEndTime() || null == request.getPlNos()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间、停车场编号集合"); + } + + ParkingLotUseStatisticForPageRequest UseStatisticRequest=new ParkingLotUseStatisticForPageRequest(); + UseStatisticRequest.setPlNos(request.getPlNos()); + UseStatisticRequest.setBeginTime(request.getBeginTime()); + UseStatisticRequest.setEndTime(request.getEndTime()); + UseStatisticRequest.setBaseRequest(new BaseInfo(1, 0)); + UseStatisticRequest.setSysCode(sysCode); + + Calendar beginTime = Calendar.getInstance(); + beginTime.setTime(request.getBeginTime()); + + Calendar endTime = Calendar.getInstance(); + endTime.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + List xAxisData = Lists.newArrayList(); + String dateType=""; + + if (dayDifference == 0L) { + //同一天 + // 20分钟为一个时间戳 + UseStatisticRequest.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER20MINUTE); + int totaltimestampCount = (endTime.get(Calendar.HOUR_OF_DAY)-beginTime.get(Calendar.HOUR_OF_DAY))*3; + for (int i = 0; i < totaltimestampCount; i++) { + int hour1 = beginTime.get(Calendar.HOUR_OF_DAY)+i/3; + String hour = String.format("%02d", hour1); + String minute = String.format("%02d", (i % 3) * 20); + xAxisData.add(hour + ":" + minute); + } + dateType="HH:mm"; + LineChartVO vehicleFlows=getVehicleFlows(UseStatisticRequest, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } else if (dayDifference <= 3L) { + // 1小时为一个时间戳 + UseStatisticRequest.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + String day = ""; + String month = ""; + for (int i = 0; i < dayDifference.intValue(); i++) { + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + month = String.format("%02d", (beginMonth)); + day = String.format("%02d", (beginDay)); + int endDay = endTime.get(Calendar.DAY_OF_MONTH); + if(beginDay != endDay){ + totaltimestampCount = 24; + } + for (int j = 0; j < totaltimestampCount; j++) { + String hour = String.format("%02d", (j)); + xAxisData.add(month + "-" + day + " " + hour); + } + beginTime.add(Calendar.DAY_OF_MONTH, 1); + } + dateType="MM-dd HH"; + LineChartVO vehicleFlows=getVehicleFlows(UseStatisticRequest, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } else { + // 1天为一个时间戳 + UseStatisticRequest.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + for (int i = 0; i < dayDifference.intValue()+1; i++) { + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + xAxisData.add(month + "-" + day); + beginTime.add(Calendar.DAY_OF_MONTH, 1); + + } + dateType="MM-dd"; + LineChartVO vehicleFlows=getVehicleFlows(UseStatisticRequest, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } + } + + + /** + * 进出场折线图 + * @param request + * @param xAxisData + * @param dateType + * @return + * 2017年7月28日 zhaowg + */ + private LineChartVO getVehicleFlows(ParkingLotUseStatisticForPageRequest request, + List xAxisData,String dateType){ + // 调用后场服务 + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + PageBean pageBean = ResultUtils.getBizResultData(bizResult); + List useStatisticDTOs = Lists.newArrayList(); + if (pageBean != null) { + useStatisticDTOs = pageBean.getDataList(); + } + + // 保存进场次数,时间戳和进场次数对应关系 + Map inParkMap = Maps.newHashMap(); + // 保存出场次数,时间戳和出场次数对应关系 + Map outParkMap = Maps.newHashMap(); + // 停车场编号和名称对应关系 + Map parkNameMap = Maps.newHashMap(); + if (!CollectionUtils.isEmpty(useStatisticDTOs)) { + for (ParkingLotUseStatisticDTO statisticDTO : useStatisticDTOs) { + String key = statisticDTO.getPlNo(); + parkNameMap.put(key, statisticDTO.getPlName()); + String statisBeginTime = DateUtil.getDateString(statisticDTO.getStatisticBeginTime(), dateType); + //保存进场车流量和出场车流量 + inParkMap.put(statisBeginTime, (inParkMap.get(statisBeginTime)==null?0:inParkMap.get(statisBeginTime))+statisticDTO.getTmpVehicleFlow()); + outParkMap.put(statisBeginTime, (outParkMap.get(statisBeginTime)==null?0:outParkMap.get(statisBeginTime))+statisticDTO.getOutParkCount()); + } + } + + // 封装进出场上报统计 + LineChartVO vehicleFlows = new LineChartVO(); + List vehicleFlows_legendData = Lists.newArrayList(); + vehicleFlows_legendData.add("进场"); + vehicleFlows_legendData.add("出场"); + vehicleFlows.setLegendData(vehicleFlows_legendData); + vehicleFlows.setxAxisData(xAxisData); + List vehicleSeries = Lists.newArrayList(); + // 进场 + SerieVO inParkSerieVo = new SerieVO(); + inParkSerieVo.setName("进场"); + List inParkSerieVoData = Lists.newArrayList(); + // 出场 + SerieVO outParkSerieVo = new SerieVO(); + outParkSerieVo.setName("出场"); + List outParkSerieVoData = Lists.newArrayList(); + // 保存上一次的进出场车值,当某个时间点没有数据时,则保持和上次一致 + Integer lastfixFlow = 0; + Integer lasttmpFlow = 0; + for (String timestamp : xAxisData) { + + if (inParkMap.containsKey(timestamp)) { + lastfixFlow = inParkMap.get(timestamp).intValue(); + }else{ + lastfixFlow =0; + } + inParkSerieVoData.add(lastfixFlow); + + if (outParkMap.containsKey(timestamp)) { + lasttmpFlow = outParkMap.get(timestamp).intValue(); + }else{ + lasttmpFlow = 0; + } + outParkSerieVoData.add(lasttmpFlow); + } + inParkSerieVo.setData(inParkSerieVoData); + vehicleSeries.add(inParkSerieVo); + outParkSerieVo.setData(outParkSerieVoData); + vehicleSeries.add(outParkSerieVo); + + vehicleFlows.setSeries(vehicleSeries); + return vehicleFlows; + } + + + + @ApiOperation("导出进出场统计excel") + @GetMapping("exportInOutParkStatisticExcel") + public void exportInOutParkStatisticExcel(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos,@RequestParam String parkNames, + Integer inOutStatus,Integer parkType, + HttpServletRequest requests, HttpServletResponse response) throws Exception { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER20MINUTE); + BizResult bizResultSum = parkingLotStatisticService.QueryInOutParkStatisticSum(request); + + InOutParkRequest inOutParkRequest =new InOutParkRequest(); + inOutParkRequest.setBaseRequest(new BaseInfo(1, 0)); + inOutParkRequest.setSysCode(sysCode); + inOutParkRequest.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + inOutParkRequest.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + inOutParkRequest.setPlNos(plNos); + inOutParkRequest.setInOutStatus(inOutStatus); + inOutParkRequest.setParkType(parkType); + BizResult> bizResult = inOutParkStatisticService.queryInOutParkForList(inOutParkRequest); + + + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "停车场", "车牌号", "车辆类型", "进出场状态","进场时间","出场时间","停车时长" }; + String sheetName = "车辆进出场统计"; + String fileName = "车辆进出场统计" + format2.format(new Date()); + + String[] billTitle = new String[8]; + if (bizResultSum != null && bizResultSum.getData() != null) { + ParkingLotUseStatisticSumDTO dto = bizResultSum.getData(); + + billTitle[0] = "车辆进出场统计"; + billTitle[1] = "汇总"; + billTitle[2] = "停车场: " +parkNames; + billTitle[3] = "进场时间: " + beginTime; + billTitle[4] = "出场时间:" + endTime; + billTitle[5] = "进场车辆总数: " + (dto.getInParkSum() != null ? dto.getInParkSum() : 0); + billTitle[6] = "出场车辆总数: " + (dto.getOutParkSum() != null ? dto.getOutParkSum() : 0); + billTitle[7] = "具体明细"; + } else { + billTitle[0] = "车辆进出场统计"; + billTitle[1] = "汇总"; + billTitle[2] = "停车场:"; + billTitle[3] = "进场时间:" ; + billTitle[4] = "出场时间:" ; + billTitle[5] = "进场车辆总数:"; + billTitle[6] = "出场车辆总数:"; + billTitle[7] = "具体明细"; + } + + + + + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReportBillForDay(workSheet, title, 0, 0, billTitle); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + for (InOutParkDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = e.getParkName(); + obj[index++] = e.getCarNumber(); + //TODO + if(null!=e.getParkType()){ + if(1==e.getParkType()){ + obj[index++] ="固定停车"; + }else{ + obj[index++] ="临时停车"; + } + }else{ + obj[index++] ="临时停车"; + } + + if(null !=e.getInOutState()){ + if(1==e.getInOutState() || 2==e.getInOutState() || 3==e.getInOutState()){ + obj[index++] ="在场"; + }else{ + obj[index++] ="出场"; + } + }else{ + obj[index++] ="出场"; + } + obj[index++] = format.format(e.getInTime()); + obj[index++] = e.getOutTime() != null? format.format(e.getOutTime()) : ""; + obj[index++] = e.getParkingDuration() != null? DateUtil.secondToTime(e.getParkingDuration()) : ""; + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 9); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java new file mode 100644 index 0000000..635c32d --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java @@ -0,0 +1,484 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.BizController; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.dto.clouds.dto.CustIncomeForPayTypeDTO; +import com.zteits.clouds.api.dto.clouds.dto.CustIncomeTotalDTO; +import com.zteits.clouds.api.dto.clouds.dto.CustIncomeTotalParkDTO; +import com.zteits.clouds.api.dto.clouds.param.CustIncomeTotalQueryRequset; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticDTO; +import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; +import com.zteits.clouds.api.dto.park.param.RealTimeVehicleFlowQueryRequest; +import com.zteits.clouds.api.service.clouds.CustIncomeService; +import com.zteits.clouds.api.service.park.IInOutParkingService; +import com.zteits.clouds.api.service.park.ParkingLotUseStatisticService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.BerthsAndFlowLineChartVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.CustIncomeForPayTypeResVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.CustIncomeTotalParkVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.CustIncomeTotalVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO.SerieVO; + +import io.swagger.annotations.ApiOperation; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/6/19 下午5:11 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/6/19 atao v1.0.0 创建 + */ +@RestController +@RequestMapping("/index") +public class IndexPageStatisticController extends BizController { + + private Logger logger = LoggerFactory.getLogger(IndexPageStatisticController.class); + + @Autowired + private CustIncomeService cusIncomeService; + /** + * 进出场记录 + */ + @Autowired + private IInOutParkingService iInOutParkingService; + @Autowired + private ParkingLotUseStatisticService parkingLotStatisticService; + + /** + * 云平台首页->企业客户负责所有的停车场汇总.
+ * + * @return + * @throws Exception + */ + @ApiOperation("企业客户负责所有的停车场汇总") + @PostMapping("/queryCustIncomeTotal") + public BizResultVO queryCustIncomeTotal( + @RequestBody CustIncomeTotalQueryRequset custIncomeTotalQueryRequset) + throws Exception { + + BizResultVO bizResultVO = new BizResultVO<>(); + + BizResult result = cusIncomeService.queryCustIncomeTotal(custIncomeTotalQueryRequset); + + if (ResultUtils.isError(result)) { + //如果失败 + bizResultVO.setCode(result.getErrCode().getCode()); + bizResultVO.setMsg(result.getErrMsg()); + return bizResultVO; + } + CustIncomeTotalVO vo = new CustIncomeTotalVO(); + vo.setAmountDueTotal(result.getData().getAmountDueTotal().setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setEscapeAmount(result.getData().getEscapeAmount().setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setPayedTotalAmount(result.getData().getPayedTotalAmount().setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + + bizResultVO.setData(vo); + + return bizResultVO; + } + + /** + * 云平台首页->企业客户负责某个停车收入情况.
+ * + * @return + * @throws Exception + */ + @ApiOperation("企业客户负责某个停车收入情况") + @PostMapping("/queryCustIncomeTotalForPark") + public BizResultVO queryCustIncomeTotalForPark( + @RequestBody CustIncomeTotalQueryRequset custIncomeTotalQueryRequset) throws Exception { + + logger.info("企业客户负责某个停车收入情况 入参为: req={}", JSONObject.toJSONString(custIncomeTotalQueryRequset)); + + BizResultVO bizResultVO = new BizResultVO(); + BizResult result = cusIncomeService.queryCustIncomeTotalForPark( + custIncomeTotalQueryRequset); + logger.info("企业客户负责某个停车收入情况 调用Dubbo接口响应为: result={}", JSONObject.toJSONString(result)); + if (ResultUtils.isError(result)) { + //如果失败 + bizResultVO.setCode(result.getErrCode().getCode()); + bizResultVO.setMsg(result.getErrMsg()); + return bizResultVO; + } + CustIncomeTotalParkDTO dto = result.getData(); + BigDecimal amountDueTotal = dto.getAmountDueTotal(); + BigDecimal escapeAmount = dto.getEscapeAmount(); + BigDecimal payedTotalAmount = dto.getPayedTotalAmount(); + + + + CustIncomeTotalParkVO vo = new CustIncomeTotalParkVO(); + + //金额为分 + vo.setAmountDueTotal(amountDueTotal.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setEscapeAmount(escapeAmount.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + vo.setPayedTotalAmount(payedTotalAmount.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + //占比乘以100取两位小数 + //应收 + if (null == amountDueTotal || amountDueTotal.doubleValue()==0) { + vo.setLoopData(1, "00.00"); + vo.setLoopData(2, "00.00"); + + } else { + //实收 + vo.setLoopData(1, payedTotalAmount.divide(amountDueTotal, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100.00")) + .setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + //逃逸 + vo.setLoopData(2, escapeAmount.divide(amountDueTotal, 4, BigDecimal.ROUND_HALF_UP).multiply( + new BigDecimal("100.00")) + .setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + } + + bizResultVO.setData(vo); + return bizResultVO; + } + + /** + * 云平台首页->企业客户负责某个停车不同的支付方式收入情况.
+ * + * @return + * @throws Exception + */ + @ApiOperation("企业客户负责某个停车不同的支付方式收入情况") + @PostMapping("/queryCustIncomeForPayType") + public BizResultVO queryCustIncomeForPayType( + @RequestBody CustIncomeTotalQueryRequset custIncomeTotalQueryRequset) throws Exception { + logger.info("调用后场dubbo服务,入参为: request={}", JSONObject.toJSONString(custIncomeTotalQueryRequset)); + BizResult> result = cusIncomeService.queryCustIncomeForPayType( + custIncomeTotalQueryRequset); + + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(result)); + //如果不成功 + if (!ResultUtils.isSuccess(result)) { + return new BizResultVO<>(result.getErrCode(), result.getErrMsg()); + } + List data = result.getData(); + + CustIncomeForPayTypeResVO res = new CustIncomeForPayTypeResVO(); + res.addLegendData("费用", "占比"); + + BigDecimal total = BigDecimal.ZERO; + List amount = new ArrayList<>(); + for (CustIncomeForPayTypeDTO dto : data) { + //添加X轴数据 + res.addXAxisData(dto.getPayTypeName()); + total = total.add(dto.getPayedTotalAmount()); + logger.info("返回的类型 和 数据为: payTypeName={},payedTotalAmount={},total={}", dto.getPayTypeName(), + dto.getPayedTotalAmount().toString(), total.toString()); + amount.add(dto.getPayedTotalAmount().setScale(2, BigDecimal.ROUND_HALF_UP) + .doubleValue() + ""); + } + //计算占比 + List zb = new ArrayList<>(); + for (CustIncomeForPayTypeDTO dto : data) { + logger.info("计算占比 total={}", total.toString()); + if (BigDecimal.ZERO.equals(total) || total.doubleValue() == 0.00) { + zb.add("0.00"); + } else { + zb.add(dto.getPayedTotalAmount().divide(total, 4, RoundingMode.HALF_UP) + .multiply(new BigDecimal("100.00")).doubleValue() + ""); + } + + } + res.addChildData("费用", amount); + res.addChildData("占比", zb); + BizResultVO resResult = new BizResultVO<>(); + resResult.setData(res); + logger.info("返回到前台的数据为: res={}", JSONObject.toJSONString(res)); + return resResult; + } + + /** + * 根据停车场编号,获取该停车场今日车流量(当天0:00到操作时间的车流量) 折线图 + * + * @param request + * @return 2017年6月19日 zhaowg + */ + @ApiOperation("根据停车场编号获取该停车场今日车流量和车位折线图") + @PostMapping("getTodayVehicleFlowForLineChart") + public BizResultVO getTodayVehicleFlowForLineChart( + @RequestBody @Valid ParkingLotUseStatisticForPageRequest request) { + logger.info("根据停车场编号获取该停车场今日车流量和车位折线图"); + //开始时间 今日0点开始 + Calendar beginTime = Calendar.getInstance(); + beginTime.set(Calendar.HOUR_OF_DAY, 0); + beginTime.set(Calendar.MINUTE, 0); + beginTime.set(Calendar.SECOND, 0); + + //获取当前时间 + Calendar curTime = Calendar.getInstance(); + int curMinute = curTime.get(Calendar.MINUTE); + if (curMinute >= 0 && curMinute < 20) { + //统计到当前时间点 + curTime.add(Calendar.MINUTE, 0); + } else if (curMinute >= 20 && curMinute < 40) { + //统计到当前小时的20分钟 + curTime.add(Calendar.MINUTE, 20); + } else if (curMinute >= 40 && curMinute <= 59) { + //统计到当前小时的40分钟 + curTime.add(Calendar.MINUTE, 40); + } + curTime.set(Calendar.SECOND, 0); + + //20分钟为一个时间戳 + List xAxisData = Lists.newArrayList(); + int totaltimestampCount = curTime.get(Calendar.HOUR_OF_DAY) * 3 + curMinute / 20; + for (int i = 0; i < totaltimestampCount; i++) { + String hour = String.format("%02d", (i / 3)); + String minute = String.format("%02d", (i % 3) * 20); + xAxisData.add(hour + ":" + minute); + } + + //调用后场服务 + request.setBeginTime(beginTime.getTime()); + request.setEndTime(curTime.getTime()); + //每20分钟统计一次 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER20MINUTE); + request.setBaseRequest(new BaseInfo(1, 0)); + logger.info("调用DUBBO服务入参:"+JSON.toJSONString(request)); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + PageBean pageBean = ResultUtils.getBizResultData(bizResult); + List useStatisticDTOs = Lists.newArrayList(); + if (pageBean != null) { + useStatisticDTOs = pageBean.getDataList(); + } + + //保存固定车流量,时间戳和车流量对应关系 + Map fixVehicleFlowMap = Maps.newHashMap(); + //保存临时车流量,时间戳和车流量对应关系 + Map tmpVehicleFlowMap = Maps.newHashMap(); + //停车场编号和名称对应关系 + Map parkNameMap = Maps.newHashMap(); + //通过停车场,和统计时间分组 + Map> parkLotMap = Maps.newHashMap(); + if (!CollectionUtils.isEmpty(useStatisticDTOs)) { + for (ParkingLotUseStatisticDTO statisticDTO : useStatisticDTOs) { + String key = statisticDTO.getPlNo(); + parkNameMap.put(key, statisticDTO.getPlName()); + String statisBeginTime = DateUtil.getDateString(statisticDTO.getStatisticBeginTime(), "HH:mm"); + //保存空置率 + if (!parkLotMap.containsKey(key)) { + Map timeAndVal = Maps.newHashMap(); + timeAndVal.put(statisBeginTime, statisticDTO.getFreeRatio() * 100); + parkLotMap.put(key, timeAndVal); + } else { + parkLotMap.get(key).put(statisBeginTime, statisticDTO.getFreeRatio() * 100); + } + + //保存固定车流量和临时车流量 + fixVehicleFlowMap.put(statisBeginTime, (fixVehicleFlowMap.get(statisBeginTime)==null?0:fixVehicleFlowMap.get(statisBeginTime))+statisticDTO.getFixVehicleFlow()); + tmpVehicleFlowMap.put(statisBeginTime, (tmpVehicleFlowMap.get(statisBeginTime)==null?0:tmpVehicleFlowMap.get(statisBeginTime))+statisticDTO.getTmpVehicleFlow()); + } + } + //判断是否包含所有待查询的停车场信息 + if(request.getPlNos().size()>parkLotMap.size()){ + for (String plNo:request.getPlNos()) { + if(!parkLotMap.containsKey(plNo)){ + ParkingLotDTO parkingLotDTO=ParkingLotCacheUtil.getParkLotByPlNo(plNo); + parkNameMap.put(plNo, parkingLotDTO.getPlName()); + parkLotMap.put(plNo, Maps.newHashMap()); + } + } + } + //封装车位统计信息 + LineChartVO freeBerthRatios = new LineChartVO(); + List freeBerthRatios_legendData = Lists.newArrayList(); + freeBerthRatios_legendData.addAll(parkNameMap.values()); + freeBerthRatios.setLegendData(freeBerthRatios_legendData); + freeBerthRatios.setxAxisData(xAxisData); + List series = Lists.newArrayList(); + + if (parkLotMap != null && !parkLotMap.isEmpty()) { + for (Entry> parkLotEntry : parkLotMap.entrySet()) { + SerieVO serieVO = new SerieVO(); + //获取停车场名称 + String name = parkNameMap.get(parkLotEntry.getKey()); + serieVO.setName(name); + //设置每个时间戳对应的空置率 + Map freeRatioMaps = parkLotEntry.getValue(); + //保存上一次的空置率,当某个时间点没有数据时,则保持和上次一致 + Integer lastFreeRatio = 0; + List freeRations = Lists.newArrayList(); + for (String timestamp : xAxisData) { + if (freeRatioMaps.containsKey(timestamp)) { + lastFreeRatio = freeRatioMaps.get(timestamp).intValue(); + }else{ + lastFreeRatio = 0; + } + freeRations.add(lastFreeRatio); + } + serieVO.setData(freeRations); + series.add(serieVO); + } + } + freeBerthRatios.setSeries(series); + + //封装车流量统计 + LineChartVO vehicleFlows = new LineChartVO(); + List vehicleFlows_legendData = Lists.newArrayList(); + vehicleFlows_legendData.add("临时车"); + vehicleFlows_legendData.add("固定车"); + vehicleFlows.setLegendData(vehicleFlows_legendData); + vehicleFlows.setxAxisData(xAxisData); + List vehicleSeries = Lists.newArrayList(); + //固定车 + SerieVO fixSerieVo = new SerieVO(); + fixSerieVo.setName("固定车"); + List fixSerieVoData = Lists.newArrayList(); + //临时车 + SerieVO tmpSerieVo = new SerieVO(); + tmpSerieVo.setName("临时车"); + List tmpSerieVoData = Lists.newArrayList(); + //保存上一次的临时车值,当某个时间点没有数据时,则保持和上次一致 + Integer lastfixFlow = 0; + Integer lasttmpFlow = 0; + for (String timestamp : xAxisData) { + if (fixVehicleFlowMap.containsKey(timestamp)) { + lastfixFlow = fixVehicleFlowMap.get(timestamp).intValue(); + }else{ + lastfixFlow = 0; + } + fixSerieVoData.add(lastfixFlow); + + if (tmpVehicleFlowMap.containsKey(timestamp)) { + lasttmpFlow = tmpVehicleFlowMap.get(timestamp).intValue(); + }else{ + lasttmpFlow = 0; + } + tmpSerieVoData.add(lasttmpFlow); + } + fixSerieVo.setData(fixSerieVoData); + vehicleSeries.add(fixSerieVo); + tmpSerieVo.setData(tmpSerieVoData); + vehicleSeries.add(tmpSerieVo); + + vehicleFlows.setSeries(vehicleSeries); + + BerthsAndFlowLineChartVO chartVO = new BerthsAndFlowLineChartVO(); + chartVO.setFreeBerthRatios(freeBerthRatios); + chartVO.setVehicleFlows(vehicleFlows); + return new BizResultVO().setData(chartVO); + } + + //实时查询当前总车流量 + // @MessageMapping("/realtimeGetCurVehicleFlow") + // @SendTo("/topic/curVehicleFlow") + @ApiOperation("实时查询当前总车流量") + @PostMapping("/realtimeGetCurVehicleFlow") + public BizResultVO realtimeVehicleFlowByWebSocket(@RequestBody RealTimeVehicleFlowQueryRequest request) { + BizResult bizResult = iInOutParkingService.QueryRealTimeVehicleFlow(request); + return new BizResultVO(bizResult); + } + + /** + * 实时查询今日空置率
+ * 今日空置率:当天0:00到操作时间的每个时间戳的空置率做加权算法,
+ * 0:00-7:00加权10%,7:00-9:00加权40%,9:00-17:00加权15%,17:00-21:00加权25%,21:00-24:00加权10%,加权后的空置率之和除以时间戳数,得到“今日空置率” + * + * @return 2017年6月19日 zhaowg + */ + // @MessageMapping("/realtimeGetCurFreeRatio") + // @SendTo("/topic/curFreeRatio") + @ApiOperation("实时查询今日空置率") + @PostMapping("realtimeGetCurFreeRatio") + public BizResultVO realtimeFreeRatio(@RequestBody ParkingLotUseStatisticForPageRequest request) { + //开始时间 今日0点开始 + Calendar beginTime = Calendar.getInstance(); + beginTime.set(Calendar.HOUR_OF_DAY, 0); + beginTime.set(Calendar.MINUTE, 0); + beginTime.set(Calendar.SECOND, 0); + request.setBeginTime(beginTime.getTime()); + Calendar endTime = Calendar.getInstance(); + request.setEndTime(endTime.getTime()); + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER20MINUTE); + request.setBaseRequest(new BaseInfo(1, 0));//不分页; + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + PageBean pageBean = ResultUtils.getBizResultData(bizResult); + if (pageBean == null || pageBean.getDataList() == null) { + return new BizResultVO().setData("0"); + } + Double totalfreeRatio = 0.00; + for (ParkingLotUseStatisticDTO statisticDTO : pageBean.getDataList()) { + totalfreeRatio += this.weightForFreeRation(statisticDTO.getStatisticBeginTime(), + statisticDTO.getFreeRatio(), statisticDTO.getPlNo()); + } + logger.info("加权后的空置率之和:" + totalfreeRatio + " 时间戳个数:" + pageBean.getDataList().size()); + Double avgFreeRation = totalfreeRatio / pageBean.getDataList().size(); + String result = String.format("%.2f", avgFreeRation); + return new BizResultVO().setData(result); + } + + /** + * 根据时间段 给空置率加权
+ * 0:00-7:00加权10%,7:00-9:00加权40%,9:00-17:00加权15%,17:00-21:00加权25%,21:00-24:00加权10%,加权后的空置率之和除以时间戳数,得到“今日空置率” + * + * @param statisticBeginTime + * @param freeRatio 2017年6月19日 zhaowg + */ + private Double weightForFreeRation(Date statisticBeginTime, Double freeRatio, String plNo) { + freeRatio = freeRatio * 100;//转换为百分比形式 + /*logger.info( + "停车场编号:" + plNo + " 统计时间:" + DateUtil.getDateString(statisticBeginTime, DateUtil.DATETIME_FORMAT) + " 空置率:" + + freeRatio);*/ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(statisticBeginTime); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + if (hour <= 7) { + return freeRatio * 0.1; + } else if (hour <= 9) { + return freeRatio * 0.4; + } else if (hour <= 17) { + return freeRatio * 0.15; + } else if (hour <= 21) { + return freeRatio * 0.25; + } else { + return freeRatio * 0.1; + } + } + + public static void main(String[] args) { + BigDecimal m = BigDecimal.ZERO; + BigDecimal n = m.add(BigDecimal.TEN); + System.out.println(new BigDecimal("00.0").doubleValue() == 0); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/MonthBillManagementController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/MonthBillManagementController.java new file mode 100644 index 0000000..3af4587 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/MonthBillManagementController.java @@ -0,0 +1,582 @@ +/** + * + */ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.io.IOException; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.constants.SessionEnum; +import com.clouds.common.entity.UserInfo; +import com.clouds.common.utils.AmountUtils; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.SessionCommUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.clouds.common.web.vo.EasyUIDataGridVO; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.clouds.dto.BillManageDTO; +import com.zteits.clouds.api.dto.clouds.dto.BillManageDetailDTO; +import com.zteits.clouds.api.dto.clouds.dto.BillManageDetailForMonthDTO; +import com.zteits.clouds.api.dto.clouds.dto.BillManageForMonthDTO; +import com.zteits.clouds.api.dto.clouds.dto.BillManageForMonthDetailDTO; +import com.zteits.clouds.api.dto.clouds.dto.MonthBillMngtStatisticByParkinglotDTO; +import com.zteits.clouds.api.dto.clouds.dto.MonthBillMngtStatisticDTO; +import com.zteits.clouds.api.dto.clouds.dto.MonthBillSummaryStatisticDTO; +import com.zteits.clouds.api.dto.clouds.dto.YearMonthCardStatisticDTO; +import com.zteits.clouds.api.dto.clouds.param.BillQueryRequest; +import com.zteits.clouds.api.dto.clouds.param.MonthBillRequest; +import com.zteits.clouds.api.dto.pay.param.TdCompanyParkQueryRequest; +import com.zteits.clouds.api.dto.pay.param.YearMonthCardStatisticRequest; +import com.zteits.clouds.api.service.clouds.MonthBillManagementService; +import com.zteits.clouds.api.service.clouds.YearMonthCardStatisticService; +import com.zteits.clouds.api.service.pay.TdCustCompanyService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * @author hxz + * + */ +@Api(value = "结算管理 账单管理 月账单管理", description = "停车场云平台 月账单管理") +@Controller +@RequestMapping("/monthbill") +public class MonthBillManagementController extends BizController { + private static final Logger logger = LoggerFactory.getLogger(MonthBillManagementController.class); + + @Autowired + private MonthBillManagementService monthBillManagementService; + @Autowired + private YearMonthCardStatisticService yearMonthCardStatisticService; + + @Autowired + private TdCustCompanyService tdCustCompanyService; + @Autowired + private HttpSession session; + @Autowired + private SessionCommUtil sessionCommUtil; + @Value("${project.syscode}") + private String sysCode; + + @ApiOperation("月账单查询汇总统计") + @PostMapping("/summaryStatistic") + @ResponseBody + public BizResultVO getMonthBillSummaryStatistic( + @RequestBody MonthBillRequest request) { + logger.info("月账单查询汇总统计请求对象 req={}", JSONObject.toJSONString(request)); + BizResult respondResult = monthBillManagementService + .getMonthBillSummaryStatistic(request); + logger.info("月账单查询汇总统计响应结果 respondResult={}", JSONObject.toJSONString(respondResult)); + return new BizResultVO<>(respondResult); + } + + /** + * 临停收费, 按支付方式汇总统计,tp表示临停 + * + * @param request + */ + @ApiOperation("临停收费, 按支付方式汇总统计,tp表示临停") + @PostMapping("/tpStatistic") + @ResponseBody + public BizResultVO getMonthBillMngtTPStatistic(@RequestBody MonthBillRequest request) { + logger.info("临停收费, 按支付方式汇总统计 req={}", JSONObject.toJSONString(request)); + BizResult respondResult = monthBillManagementService + .getMonthBillMngtTPStatistic(request); + logger.info("临停收费, 按支付方式汇总统计 respondResult={}", JSONObject.toJSONString(respondResult)); + return new BizResultVO<>(respondResult); + } + + /** + * + * + * @param request + * @return + */ + @ApiOperation("临停收费, 按照停车场分组后,按支付方式分类统计,tp表示临停,Pklt表示停车场") + @PostMapping("/tpPkltStatistic") + @ResponseBody + BizResultVO> getMonthBillMngtTPStatisticByParkinglot( + @RequestBody MonthBillRequest request) { + logger.info("临停收费, 停车场分组,按支付方式分类 req={}", JSONObject.toJSONString(request)); + BizResult> respondResult = monthBillManagementService + .getMonthBillMngtTPStatisticByParkinglot(request); + logger.info("临停收费, 停车场分组,按支付方式分类respondResult={}", JSONObject.toJSONString(respondResult)); + return new BizResultVO<>(respondResult); + } + + /** + * + * + * @param request + * @return + */ + @ApiOperation("月卡、年卡, 按支付方式汇总统计") + @PostMapping("/cardStatistic") + @ResponseBody + BizResultVO getMonthBillMngtCardMYStatistic(@RequestBody MonthBillRequest request) { + logger.info("月卡、年卡, 按支付方式分类 req={}", JSONObject.toJSONString(request)); + BizResult respondResult = monthBillManagementService + .getMonthBillMngtCardMYStatistic(request); + logger.info("月卡、年卡, 按支付方式分类respondResult={}", JSONObject.toJSONString(respondResult)); + return new BizResultVO<>(respondResult); + } + + /** + * + * + * @param request + * @return + */ + @ApiOperation("月卡、年卡, 按支付方式汇总统计,Pklt表示停车场") + @PostMapping("/cardPkltStatistic") + @ResponseBody + BizResultVO> getMonthBillMngtCardMYStatisticByParkinglot( + @RequestBody MonthBillRequest request) { + logger.info("月卡、年卡, 停车场分组,按支付方式分类 req={}", JSONObject.toJSONString(request)); + BizResult> respondResult = monthBillManagementService + .getMonthBillMngtCardMYStatisticByParkinglot(request); + logger.info("月卡、年卡, 停车场分组,按支付方式分类respondResult={}", JSONObject.toJSONString(respondResult)); + return new BizResultVO<>(respondResult); + } + + // ----------------------------------------------------2017-8-1新添加----------------------------------------------- + + /** + * + * @param request + * @return + * @throws Exception + */ + @ApiOperation("月账单管理统计列表") + @PostMapping("/queryBillforMonthList") + @ResponseBody + public BizResultVO> queryBillforMonthList( + @RequestBody BillQueryRequest billQueryRequest, HttpServletRequest request, HttpServletResponse response) + throws Exception { + // 2.调用接口查询当前登录人管辖的停车场名称 + UserInfo userInfo = sessionCommUtil.getUserInfo(); + List plNos = new ArrayList<>(); + if (userInfo != null) { + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSessionId(session.getId()); + tdCompanyParkQueryRequest.setSysCode(sysCode); + BizResult> bizResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest); + // 拥有的停车场编号 + plNos = ResultUtils.getBizResultData(bizResult); + } +// if (CollectionUtils.isEmpty(plNos)) { +// throw new BizException(ErrorType.PARK_LOT_NOT_EXISTS, "停车场plnos不存在"); +// } + billQueryRequest.setParkIdList(plNos); + logger.info("月账单管理统计列表 req={}", JSONObject.toJSONString(billQueryRequest)); + BizResult> respondResult = monthBillManagementService + .queryBillforMonthList(billQueryRequest); + logger.info("月账单管理统计列表 respondResult={}", JSONObject.toJSONString(respondResult)); + return returnJqGridDataByList(respondResult, BillManageForMonthDTO.class); + } + + /** + * + * @param request + * @return + */ + @ApiOperation("月账单管理对账单统计明细") + @PostMapping("/queryBillforMonthDetail") + @ResponseBody + public BizResultVO> queryBillforMonthDetail( + @RequestBody BillQueryRequest billQueryRequest, HttpServletRequest request, HttpServletResponse response) + throws Exception { + // 2.调用接口查询当前登录人管辖的停车场名称 + UserInfo userInfo = sessionCommUtil.getUserInfo(); + List plNos = new ArrayList<>(); + if (userInfo != null) { + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSessionId(session.getId()); + tdCompanyParkQueryRequest.setSysCode(sysCode); + BizResult> bizResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest); + // 拥有的停车场编号 + plNos = ResultUtils.getBizResultData(bizResult); + } +// if (CollectionUtils.isEmpty(plNos)) { +// throw new BizException(ErrorType.PARK_LOT_NOT_EXISTS, "停车场plnos不存在"); +// } + billQueryRequest.setParkIdList(plNos); + logger.info("月账单管理对账单统计明细 req={}", JSONObject.toJSONString(billQueryRequest)); + BizResult> respondResult = monthBillManagementService + .queryBillforMonthDetail(billQueryRequest); + logger.info("月账单管理对账单统计明细 respondResult={}", JSONObject.toJSONString(respondResult)); + return returnJqGridDataByList(respondResult, BillManageForMonthDetailDTO.class); + } + + /** + * 月账单临停导出.
+ * + * @param request + * @param response + */ + @ApiOperation("月账单临停导出") + @GetMapping("/exportToExcleForBillForMonthTmp") + public void exportToExcleForBillForMonthTmp(@RequestParam List parkIdList, + @RequestParam List orderTypeList,@RequestParam String beginTime, + @RequestParam String endTime, HttpServletRequest request, HttpServletResponse response) { + logger.info("---begin--日账单导出调用后场dubbo服务,入参 beginTime={},endTime={}", beginTime, endTime); + BizResult> result = new BizResult>(); + try { + BillQueryRequest billQueryRequest = new BillQueryRequest(); + if (null == beginTime || null == endTime) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + + billQueryRequest.setSysCode(sysCode); + billQueryRequest.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + billQueryRequest.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + billQueryRequest.setParkIdList(parkIdList); + billQueryRequest.setOrderTypeList(orderTypeList); + billQueryRequest.setBaseRequest(new BaseInfo(1, 0)); + /** 查询月账单. */ + result = monthBillManagementService.queryBillforMonthDetailForList(billQueryRequest); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "流水号", "时间", "车主车牌号", "进场时间", "出场时间", "停车时长", "收费规则", "支付方式", "应收金额", "优惠券", + "红包", "实收金额", "共计" }; + String sheetName = "月账单"; + String fileName = "月账单管理" + format2.format(new Date()); + + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + + List list = new ArrayList(); + if (CollectionUtils.isNotEmpty(result.getData().getDataList())) { + list = result.getData().getDataList(); + } + for (BillManageDetailForMonthDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = StringUtils.isNotEmpty(e.getPayOrderNo()) ? e.getPayOrderNo() : ""; + obj[index++] = e.getPayFinishTime() != null + ? DateUtil.getDateString(e.getPayFinishTime(), DateUtil.DATETIME_FORMAT) : ""; + obj[index++] = StringUtils.isNotEmpty(e.getCarNum()) ? e.getCarNum() : ""; + obj[index++] = e.getParkInTime() != null + ? DateUtil.getDateString(e.getParkInTime(), DateUtil.DATETIME_FORMAT) : ""; + obj[index++] = e.getParkOutTime() != null + ? DateUtil.getDateString(e.getParkOutTime(), DateUtil.DATETIME_FORMAT) : ""; + obj[index++] = e.getParkingDuration() != null ? e.getParkingDuration() : DateUtil.secondToTime(0); + obj[index++] = ""; + if (e.getPayType() != null) { + switch (e.getPayType()) { + case 1: + obj[index++] = "支付宝"; + break; + case 2: + obj[index++] = "微信"; + break; + case 3: + obj[index++] = "银联"; + break; + case 4: + obj[index++] = "微信"; + break; + default: + obj[index++] = "现金"; + break; + } + } else { + obj[index++] = ""; + } + obj[index++] = e.getAmountDueTotal() != null ? AmountUtils.changeF2Y(e.getAmountDueTotal().longValue()) + : "0.00"; + obj[index++] = "0.00"; + obj[index++] = "0.00"; + obj[index++] = e.getPayedTotalAmount() != null + ? AmountUtils.changeF2Y(e.getPayedTotalAmount().longValue()) : "0.00"; + obj[index++] = e.getAmountDueTotal() != null ? AmountUtils.changeF2Y(e.getAmountDueTotal().longValue()) + : "0.00"; + contentList.add(obj); + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } catch (Exception e) { + result.setErrorInfo(ErrorType.BIZ_ERROR, "系统错误!"); + e.printStackTrace(); + } + + } + + /** + * 月账单年卡月卡导出.
+ * + * @param request + * @param response + */ + @ApiOperation("月账单年卡月卡导出") + @GetMapping("/exportToExcleForBillForYearOrMonth") + public void exportToExcleForBillForYearOrMonth(@RequestParam List parkIdList, + @RequestParam String beginTime,@RequestParam String endTime, + HttpServletRequest request, HttpServletResponse response) { + logger.info("---begin--月账单年卡月卡导出调用后场dubbo服务,入参 beginTime={},endTime={}", beginTime, endTime); + BizResult> result = new BizResult>(); + try { + YearMonthCardStatisticRequest yearMonthCardStatisticRequest = new YearMonthCardStatisticRequest(); + if (null == beginTime || null == endTime) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + + yearMonthCardStatisticRequest.setSysCode(sysCode); + yearMonthCardStatisticRequest.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + yearMonthCardStatisticRequest.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + yearMonthCardStatisticRequest.setParkIdList(parkIdList); + yearMonthCardStatisticRequest.setBaseRequest(new BaseInfo(1, 0)); + /** 查询月账单年卡月卡. */ + result = yearMonthCardStatisticService.queryYearMonthCardStatistic(yearMonthCardStatisticRequest); + + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "交易单号", "交易时间", "种类", "卡名称", "车牌号", "支付金额", "有效期" }; + String sheetName = "月账单"; + String fileName = "月账单管理" + format2.format(new Date()); + + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + + List list = new ArrayList(); + + if (CollectionUtils.isNotEmpty(result.getData().getDataList())) { + list = result.getData().getDataList(); + } + for (YearMonthCardStatisticDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = StringUtils.isNotEmpty(e.getOrderId()) ? e.getOrderId() : ""; + obj[index++] = e.getPayFinishTime() != null + ? DateUtil.getDateString(e.getPayFinishTime(), DateUtil.DATETIME_FORMAT) : ""; + String yearOrMonthCard = ""; + if (null != e.getOrderType()) { + if (2 == e.getOrderType()) { + yearOrMonthCard = "年卡"; + obj[index++] = yearOrMonthCard; + } else if (3 == e.getOrderType()) { + yearOrMonthCard = "月卡"; + obj[index++] = yearOrMonthCard; + } + } else { + obj[index++] = ""; + } + obj[index++] = StringUtils.isNotEmpty(e.getParkName()) ? e.getParkName() + yearOrMonthCard : ""; + + obj[index++] = StringUtils.isNotEmpty(e.getCarNumber()) ? e.getCarNumber() : ""; + + obj[index++] = e.getAmount() != null ? AmountUtils.changeF2Y(e.getAmount().longValue()) : "0.00"; + String effDate = ""; + String expDate = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + if (null != e.getEffDate()) { + effDate = format.format(e.getEffDate()); + } + if (null != e.getExpDate()) { + expDate = format.format(e.getExpDate()); + } + + obj[index++] = effDate + " - " + expDate; + + contentList.add(obj); + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } catch (Exception e) { + result.setErrorInfo(ErrorType.BIZ_ERROR, "系统错误!"); + e.printStackTrace(); + } + + } + + + + + /** + * 月账单所有导出.
+ * + * @param request + * @param response + */ + @ApiOperation("月账单所有导出") + @GetMapping("/exportToExcleForBillForAll") + public void exportToExcleForBillForAll( + @RequestParam String beginTime, + @RequestParam String endTime, HttpServletRequest request, HttpServletResponse response) { + BizResult> respondResult= new BizResult>(); + try { + BillQueryRequest billQueryRequest=new BillQueryRequest(); + if (null == beginTime || null == endTime) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + + billQueryRequest.setSysCode(sysCode); + billQueryRequest.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + billQueryRequest.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + billQueryRequest.setBaseRequest(new BaseInfo(1, 0)); + // 2.调用接口查询当前登录人管辖的停车场名称 + UserInfo userInfo = sessionCommUtil.getUserInfo(); + List plNos = new ArrayList<>(); + if (userInfo != null) { + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSessionId(session.getId()); + tdCompanyParkQueryRequest.setSysCode(sysCode); + BizResult> bizResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest); + // 拥有的停车场编号 + plNos = ResultUtils.getBizResultData(bizResult); + } + billQueryRequest.setParkIdList(plNos); + logger.info("月账单导出所有 req={}", JSONObject.toJSONString(billQueryRequest)); + respondResult = monthBillManagementService + .queryBillforMonthDetail(billQueryRequest); + logger.info("月账单导出所有 respondResult={}", JSONObject.toJSONString(respondResult)); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "停车场名称", "现金", "微信", "支付宝", "合计"}; + String[] sheetName = new String[]{"临停收费","年卡月卡收费"}; + String fileName = "月账单管理" + format2.format(new Date()); + + // 1.创建excel信息,多个sheet页 + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet workSheetTmp = workbook.createSheet(sheetName[0]); + XSSFSheet workSheetYearOrMonth = workbook.createSheet(sheetName[1]); + XSSFSheet[] worksheet= new XSSFSheet[]{workSheetTmp,workSheetYearOrMonth}; + // 2.设置excel表头和表体 + Layouter.buildReport(workSheetTmp, title, 0, 0); + Layouter.buildReport(workSheetYearOrMonth, title, 0, 0); + // 3.填充数据 + List contentYearOrMonthList = new ArrayList(); + List contentTmpList = new ArrayList(); + List list = new ArrayList(); + if (CollectionUtils.isNotEmpty(respondResult.getData())) { + list = respondResult.getData(); + } + for (BillManageForMonthDetailDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = StringUtils.isNotEmpty(e.getParkName()) ? e.getParkName() : ""; + obj[index++] = e.getTmpCashAmount() != null + ? AmountUtils.changeF2Y(e.getTmpCashAmount().longValue()) : "0.00"; + obj[index++] = e.getTmpWeChatAmount() != null ? AmountUtils.changeF2Y(e.getTmpWeChatAmount().longValue()) + : "0.00"; + obj[index++] = e.getTmpAlipayAmount() != null ? AmountUtils.changeF2Y(e.getTmpAlipayAmount().longValue()) + : "0.00"; + obj[index++] = e.getTmpAll() != null ? AmountUtils.changeF2Y(e.getTmpAll().longValue()) + : "0.00"; + contentTmpList.add(obj); + } + for (BillManageForMonthDetailDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = StringUtils.isNotEmpty(e.getParkName()) ? e.getParkName() : ""; + obj[index++] = e.getYearMontCashAmount() != null + ? AmountUtils.changeF2Y(e.getYearMontCashAmount().longValue()) : "0.00"; + obj[index++] = e.getYearMonthWeChatAmount() != null ? AmountUtils.changeF2Y(e.getYearMonthWeChatAmount().longValue()) + : "0.00"; + obj[index++] = e.getYearMonthAlipayAmount() != null ? AmountUtils.changeF2Y(e.getYearMonthAlipayAmount().longValue()) + : "0.00"; + obj[index++] = e.getYearMonthAll() != null ? AmountUtils.changeF2Y(e.getYearMonthAll().longValue()) + : "0.00"; + contentYearOrMonthList.add(obj); + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheetTmp, title, contentTmpList, 2); + ExcleFillDateManager fillUserManagerYearOrMonth = new ExcleFillDateManager(); + fillUserManagerYearOrMonth.fillSalesOrga(workSheetYearOrMonth, title, contentYearOrMonthList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, worksheet, fileName); + + } catch (Exception e) { + respondResult.setErrorInfo(ErrorType.BIZ_ERROR, "系统错误!"); + e.printStackTrace(); + } + + } + + + + + + + + + /** + * 通过session信息获取停车场编码.
+ * + * @param billQueryRequest + * @param userInfo + * @return + * @throws Exception + */ + private List queryParkNoByCustIds(TdCompanyParkQueryRequest tdCompanyParkQueryRequest) throws Exception { + /** 查询停车场编码. */ + BizResult> parkNoResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest); + if (parkNoResult.isSuccess() && parkNoResult != null && parkNoResult.getData() != null) { + logger.info("根据登录获取到对应的停车场编码=" + JSONArray.toJSONString(parkNoResult.getData())); + return parkNoResult.getData(); + } else { + logger.info("根据登录用户没有获取到对应的停车场编码"); + return null; + } + + } + + + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/ParkLotStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/ParkLotStatisticController.java new file mode 100644 index 0000000..1eba049 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/ParkLotStatisticController.java @@ -0,0 +1,132 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.entity.UserInfo; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.SessionCommUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.ParkFreeBerthGetByPlnoRequest; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; +import com.zteits.clouds.api.dto.pay.param.TdCompanyParkQueryRequest; +import com.zteits.clouds.api.service.park.ParkFreeBerthService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.clouds.api.service.pay.TdCustCompanyService; +import com.zteits.irain.portal.vo.govclouds.ParkLotStatisticVO; +import com.zteits.irain.portal.web.parkinglotcloudplatform.parklotmanage.ParkLotManageController; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +/** + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkLotStatisticController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年8月7日 下午5:21:16 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年8月7日 zhaowg v1.0.0 创建 + */ + +@Api("停车场信息统计") +@RestController +@RequestMapping("parklotstatistic") +public class ParkLotStatisticController { + private Logger logger = LoggerFactory.getLogger(ParkLotManageController.class); + @Autowired + private HttpSession session; + @Autowired + private SessionCommUtil sessionCommUtil; + @Autowired + private TdCustCompanyService tdCustCompanyService; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + @Autowired + private ParkFreeBerthService parkFreeBerthService; + + @ApiOperation("获取停车场信息统计") + @PostMapping("getParkLotStatistic") + public BizResultVO> getParkLotStatistic(@RequestParam String sysCode) throws Exception{ + List result = Lists.newArrayList(); + //拥有的停车场编号 + List plNos = this.GetParkLotNosByCurrUser(sysCode); + //查询对应的停车场信息 + if(CollectionUtils.isEmpty(plNos)){ + return new BizResultVO>().setData(result); + } + //空闲车位数 + ParkFreeBerthGetByPlnoRequest request = new ParkFreeBerthGetByPlnoRequest(); + request.setPlNos(plNos); + request.setSysCode(sysCode); + BizResult> freeBerthsNumBizResult = parkFreeBerthService.getParkFreeBerthByPlno(request ); + Map freeBerthsNumMap = ResultUtils.getBizResultData(freeBerthsNumBizResult); + for (String plNo : plNos) { + //先查询缓存 + ParkingLotDTO lotDTO = ParkingLotCacheUtil.getParkLotByPlNo(plNo); + if(lotDTO == null){ + //查询数据库 + QueryParkLotInfoByPkNoRequest request1 = new QueryParkLotInfoByPkNoRequest(); + request1.setSysCode(sysCode); + request1.setPklNo(plNo); + BizResult bizResult2 = parkingLotQueryService.QueryParkingLotByPkNo(request1); + lotDTO = ResultUtils.getBizResultData(bizResult2); + } + if(lotDTO == null || StringUtils.isBlank(lotDTO.getPlName()) || lotDTO.getPlName().equals("null")){ + continue; + } + ParkLotStatisticVO lotStatisticVO = new ParkLotStatisticVO(); + lotStatisticVO.setPlNo(plNo); + lotStatisticVO.setPlName(lotDTO.getPlName()); + lotStatisticVO.setFreeBerthsNum(freeBerthsNumMap.get(plNo)); + lotStatisticVO.setTotalBerthsNum(lotDTO.getPlBerthNum()); + lotStatisticVO.setUseingBerthsNum(lotDTO.getPlBerthNum()-freeBerthsNumMap.get(plNo)); + //设置地磁在线离线数量 + //TODO 临时方案,只有红山区有数据 + result.add(lotStatisticVO); + } + return new BizResultVO>().setData(result); + } + + private List GetParkLotNosByCurrUser(String sysCode) throws Exception { + logger.info("根据登录人权限获取停车场列表"); + List plNos = Lists.newArrayList(); + //2.调用接口查询当前登录人管辖的停车场名称 + plNos.add("A320211000"); + plNos.add("B1504020C7"); + /*UserInfo userInfo = sessionCommUtil.getUserInfo(); + if(userInfo!=null){ + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSysCode(sysCode); + tdCompanyParkQueryRequest.setSessionId(session.getId()); + BizResult> bizResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest ); + plNos = ResultUtils.getBizResultData(bizResult); + }else{ + throw new BizException(ErrorType.AUTH_TOKEN_NOT_EXISTS); + }*/ + return plNos; + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/TransactionStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/TransactionStatisticController.java new file mode 100644 index 0000000..ae11cda --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/TransactionStatisticController.java @@ -0,0 +1,331 @@ +/** + * + */ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.utils.AmountUtils; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ExceptionUtil; +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.clouds.dto.OrderTransDTO; +import com.zteits.clouds.api.dto.clouds.dto.OrderTransDetailDTO; +import com.zteits.clouds.api.dto.clouds.dto.OrderTransFoldLineDTO; +import com.zteits.clouds.api.dto.clouds.param.OrderTransactionQueryRequest; +import com.zteits.clouds.api.dto.park.param.InterfaceLogSaveRequest; +import com.zteits.clouds.api.dto.pay.TdBOrderDTO; +import com.zteits.clouds.api.dto.pay.param.TdBOrderRequest; +import com.zteits.clouds.api.service.clouds.OrderTransactionService; +import com.zteits.clouds.api.service.park.InterfaceLogService; +import com.zteits.clouds.api.service.pay.TdBOrderService; +import com.zteits.irain.portal.constant.ParkConstant.InterfaceLog; +//import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.OrderTransactionDetails; +//import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.TransactionRecord; +//import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.TransactionRequestObject; +//import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.TransactionStatisticSummary; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * Unification object used for responding request from web front . + * @author hxz + * + */ +class TransactionStatisticRespondObject { + //private List transactionRecordList; + //private TransactionStatisticSummary tranStcSummary; + private List transactionRecordList; + private D tranStcSummary; + + /** + * @return the transactionRecordList + */ + public List getTransactionRecordList() { + return transactionRecordList; + } + /** + * @param transactionRecordList the transactionRecordList to set + */ + public void setTransactionRecordList(List transactionRecordList) { + this.transactionRecordList = transactionRecordList; + } + /** + * @return the tranStcSummary + */ + public D getTranStcSummary() { + return tranStcSummary; + } + /** + * @param tranStcSummary the tranStcSummary to set + */ + public void setTranStcSummary(D tranStcSummary) { + this.tranStcSummary = tranStcSummary; + } +} + +/** + * @author hxz + * + */ +@Api("停车场云平台 数据统计 交易管理") +@RestController +@RequestMapping("/transaction") +public class TransactionStatisticController extends BizController { + private static final Logger logger = LoggerFactory.getLogger(TransactionStatisticController.class); + + @Value("${project.syscode}") + private String sysCode; + + @Autowired + private InterfaceLogService interfaceLogService; + + @Autowired + private OrderTransactionService orderTransactionService; + + @Autowired + private TdBOrderService tdborderservice; + + /** + * + * @param ID, 订单ID + * @return + * @throws Exception + */ + @ApiOperation("获取交易详情") + @PostMapping("getordertrancdetails") + public Object GetOrderTrancDetails (@RequestBody TdBOrderRequest request) throws Exception { + logger.info("[{}]获取交易详情请求参数",request.getOrderId()); + BizResult bizResult = tdborderservice.queryOrderByOrderId(request); + logger.info("[{}]获取交易详情结果",bizResult); + return new BizResultVO<>(bizResult); + } + + @ApiOperation("停车收入统计-->收入汇总查询") + @PostMapping("/gettransactionstatisticsummary") + public Object GetTransactionStatisticSummary (@RequestBody OrderTransactionQueryRequest requestObject) throws Exception{ + logger.info("[{}]--begin调用后场,停车收入统计-->收入汇总查询,入参={}",requestObject.getBaseRequest().getRequestId(),JSONObject.toJSON(requestObject)); + BizResult respondObject = orderTransactionService.queryOrderTransaction(requestObject); + logger.info("[{}]--end调用后场,停车收入统计-->收入汇总查询."); + return new BizResultVO<>(respondObject); + } + + @ApiOperation("停车收入统计-->明细数据") + @PostMapping("/gettransactionstatisticlist") + public Object GetTransactionStatisticList (@RequestBody OrderTransactionQueryRequest requestObject) throws Exception{ + + BizResult> respondObject = orderTransactionService.queryOrderTransactionDetail(requestObject); + + return returnJqGridData(respondObject, OrderTransDetailDTO.class); + } + + @ApiOperation("停车收入统计-->折线图") + @PostMapping("/getOrderTransactionFoldLine") + public BizResultVO> getOrderTransactionFoldLine(@RequestBody OrderTransactionQueryRequest requestObject) throws Exception{ + + logger.info("[{}]--begin调用后场,停车收入统计-->折线图,入参={}",requestObject.getBaseRequest().getRequestId(),JSONObject.toJSON(requestObject)); + BizResult> result = orderTransactionService.queryOrderTransactionFoldLine(requestObject); + logger.info("[{}]--end调用后场,停车收入统计-->折线图.",requestObject.getBaseRequest().getRequestId()); + return new BizResultVO>(result); + } + + /** + * Unification interface used for responding web front request. + * @param reqjsonstr + * @return + */ + @ApiOperation("获取交易相关统计数据 统一接口处理 ") + @RequestMapping("/gettransactionstatistic") + public Object GetTransactionStatistic(@RequestBody String reqjsonstr) { + BaseInfo baseInfo = new BaseInfo(); + String requestId = baseInfo.getRequestId(); + + logger.info("[RequestId:" + requestId + "]停车场云平台数据统计交易管理请求参数:" + reqjsonstr); + + // Write log + InterfaceLogSaveRequest logSaveRequest = new InterfaceLogSaveRequest(sysCode, + baseInfo, -1, reqjsonstr, -1); + + // Object responding web front request. + // TransactionStatisticRespondObject respondObject + TransactionStatisticRespondObject respondObject + = new TransactionStatisticRespondObject(); + + try { + if (StringUtils.isBlank(reqjsonstr)) { + throw new BizException(ErrorType.PARAMM_NULL, "请求报文"); + } + + // Request Object from web front. + //TransactionRequestObject tro = JSON.parseObject(reqjsonstr, TransactionRequestObject.class); + OrderTransactionQueryRequest requestObject = JSON.parseObject(reqjsonstr, OrderTransactionQueryRequest.class); + + // Get the "TransactionStatisticSummary" object through interface from 王富生. + //TransactionStatisticSummary tss = null; + BizResult tranStcSummary = orderTransactionService.queryOrderTransaction(requestObject); + respondObject.setTranStcSummary(tranStcSummary.getData()); + + // Get the list of "TransactionRecord" through interface from 王富生. + BizResult> tranRecordList = orderTransactionService.queryOrderTransactionDetail(requestObject); + List transactionRecordList = tranRecordList.getData().getDataList(); + respondObject.setTransactionRecordList(transactionRecordList); + + // Set log foreign key. + // logSaveRequest.setOutId(); + logSaveRequest.setStatus(InterfaceLog.Status.SUCCESS); + } catch (Exception e) { + logSaveRequest.setMessage(ExceptionUtil.getTrace(e)); + logSaveRequest.setStatus(InterfaceLog.Status.FAIL); + logger.info(e.toString()); + } finally { + logSaveRequest.setResponseBody(JSONObject.toJSONString(respondObject)); + logSaveRequest.setResponseTime(new Date()); + //保存日志 + try{ + interfaceLogService.SaveInterfaceLog(logSaveRequest); + }catch(Exception e){ + e.printStackTrace(); + } + } + + return respondObject; + } + + + + + @ApiOperation("导出交易管理数据统计excel") + @GetMapping("exportTransactionStatisticExcel") + public void excelParkingLotUseStatistic(@RequestParam String beginTime, + @RequestParam String endTime, @RequestParam List plNos, + Integer recType, + HttpServletRequest requests, + HttpServletResponse response) throws Exception{ + + OrderTransactionQueryRequest request=new OrderTransactionQueryRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); +// List plNoslist=new ArrayList<>(); +// plNoslist.add(plNos); + request.setParkIds(plNos); + request.setRecType(recType); + request.setBaseRequest(new BaseInfo(1, 0)); + BizResult> bizResult=orderTransactionService.queryOrderTransactionDetail(request); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[]{"交易时间","缴费状态","停车场名称","车牌号","订单号","停车类型","支付方式","金额","免费理由"}; + + String sheetName="交易管理"; + String fileName = "交易管理"+format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet,title,0, 0); + //3.填充数据 + List contentList=new ArrayList(); + List list =new ArrayList<>(); + if(CollectionUtils.isNotEmpty(bizResult.getData().getDataList())){ + list= bizResult.getData().getDataList(); + } + for (OrderTransDetailDTO e: list) { + Object[] obj=new Object[title.length]; + int index=0; + obj[index++]=e.getCreateTime() != null ? format.format(e.getCreateTime()) : ""; + if(e.getOrderState() != null){ + obj[index++]=(e.getOrderState() == 5 ? "异常缴费" :"正常缴费"); + }else{ + obj[index++]="-"; + } + obj[index++]=e.getParkName(); + obj[index++]=e.getCarNum(); + obj[index++]=e.getOrderNo(); + if(1==e.getPayType()){ + obj[index++]="免费停车"; + }else if(2==e.getPayType()){ + obj[index++]="收费停车"; + }else{ + obj[index++]="-"; + } + if(e.getPayType() != null){ + switch (e.getPayType()) { + case 1: + obj[index++]="支付宝"; + break; + case 2: + obj[index++]="微信"; + break; + case 3: + obj[index++]="银联"; + break; + case 4: + obj[index++]="微信"; + break; + default: + obj[index++]="现金"; + break; + } + }else{ + obj[index++]=""; + } + obj[index++]=(e.getOrderTotalFee() != null ? AmountUtils.changeF2Y(e.getOrderTotalFee().longValue()) : ""); + + if(e.getFreeReason() != null){ + switch (e.getFreeReason()) { + case 0: + obj[index++]="短时停车免费"; + break; + case 7: + obj[index++]="授权车免费"; + break; + case 8: + obj[index++]="手动免费开闸"; + break; + default: + obj[index++]="-"; + break; + } + }else{ + obj[index++]="-"; + } + contentList.add(obj); + } + ExcleFillDateManager fillUserManager=new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet,title,contentList,2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java new file mode 100644 index 0000000..d4597e7 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java @@ -0,0 +1,405 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.entity.UserInfo; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.SessionCommUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.clouds.common.web.vo.EasyUIDataGridVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticDTO; +import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticMaxAndMinDTO; +import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; +import com.zteits.clouds.api.dto.pay.param.TdCompanyParkQueryRequest; +import com.zteits.clouds.api.service.park.ParkingLotUseStatisticService; +import com.zteits.clouds.api.service.pay.TdCustCompanyService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.BerthsAndFlowLineChartVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO; +import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO.SerieVO; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * + * 停车场车流量数据统计 Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkingLotUseStatisticController.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年6月14日 下午3:02:39 Modification History: Date Author Version + * Description ---------------------------------------------------------* + * 2017年6月14日 langlw v1.0.0 创建 + */ +@Api(value = "停车场车流量数据统计", description = "停车场车流量数据统计") +@Controller +@RequestMapping(value = "/VehicleFlowStatistic") +public class VehicleFlowStatisticController extends BizController { + private Logger logger = LoggerFactory.getLogger(VehicleFlowStatisticController.class); + + @Value("${project.syscode}") + private String sysCode; + + @Autowired + private ParkingLotUseStatisticService parkingLotStatisticService; + @Autowired + private HttpSession session; + @Autowired + private SessionCommUtil sessionCommUtil; + @Autowired + private TdCustCompanyService tdCustCompanyService; + + @ApiOperation("分页查询车流量数据统计车位总流量") + @PostMapping("getVehicleFlowStatisticForPage") + @ResponseBody + public BizResultVO> queryParkingLotUseStatisticForPage( + @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { + if (null == request.getBeginTime() || null==request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + Calendar beginc = Calendar.getInstance(); + beginc.setTime(request.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(request.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + return returnJqGridData(bizResult, ParkingLotUseStatisticDTO.class); + } + + @ApiOperation("查询车流量最大值与最小值") + @PostMapping("getVehicleFlowMaxAndMin") + @ResponseBody + public BizResultVO QueryParkingLotUseStatisticMaxAndMin( + @RequestBody ParkingLotUseStatisticForPageRequest request) { + Calendar beginc = Calendar.getInstance(); + beginc.setTime(request.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(request.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + BizResult bizResult = parkingLotStatisticService + .QueryVehicleFlowStatisticMaxAndMin(request); + return new BizResultVO<>(bizResult); + } + + @ApiOperation("导出车流量数据统计excel") + @GetMapping("exportVehicleFlowStatisticExcel") + public void excelParkingLotUseStatistic(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam String plNos, HttpServletRequest requests, HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + List plNoslist = new ArrayList<>(); + plNoslist.add(plNos); + request.setPlNos(plNoslist); + request.setBaseRequest(new BaseInfo(1, 0)); + Calendar beginc = Calendar.getInstance(); + beginc.setTime(request.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(request.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "时间", "总车流量", "临时车流量", "固定车流量" }; + String sheetName = "车流量管理"; + String fileName = "车流量管理" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + for (ParkingLotUseStatisticDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = format.format(e.getStatisticBeginTime()); + obj[index++] = e.getVehicleFlow(); + obj[index++] = e.getTmpVehicleFlow(); + obj[index++] = e.getFixVehicleFlow(); + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + /** + * 根据时间获取车流量折线图 + * + * @param request + * @return + * @throws Exception + */ + @ApiOperation("根据时间获取车流量折线图") + @PostMapping("getVehicleFlowForLineChart") + @ResponseBody + public BizResultVO getVehicleFlowForLineChart( + @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { + + if (null == request.getBeginTime() || null==request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + //2.调用接口查询当前登录人管辖的停车场名称 + UserInfo userInfo = sessionCommUtil.getUserInfo(); + List plNos = new ArrayList<>(); + if(userInfo!=null){ + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSessionId(session.getId()); + tdCompanyParkQueryRequest.setSysCode(sysCode); + BizResult> bizResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest); + //拥有的停车场编号 + plNos = ResultUtils.getBizResultData(bizResult); + } + if(CollectionUtils.isEmpty(plNos)){ + throw new BizException(ErrorType.PARK_LOT_NOT_EXISTS, "停车场plnos不存在"); + } + request.setPlNos(plNos); + + logger.info("根据停车场编号获取该停车场今日车流量和车位折线图"); + Calendar beginTime = Calendar.getInstance(); + beginTime.setTime(request.getBeginTime()); + + Calendar endTime = Calendar.getInstance(); + endTime.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + List xAxisData = Lists.newArrayList(); + request.setBaseRequest(new BaseInfo(1, 0)); + String dateType=""; + + if (dayDifference == 0L) { + // 20分钟为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER20MINUTE); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY) * 3; + for (int i = 0; i < totaltimestampCount; i++) { + String hour = String.format("%02d", (i / 3)); + String minute = String.format("%02d", (i % 3) * 20); + xAxisData.add(hour + ":" + minute); + } + dateType="HH:mm"; + LineChartVO vehicleFlows=getVehicleFlows(request, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } else if (dayDifference <= 3L) { + // 1小时为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + String day = ""; + String month = ""; + for (int i = 0; i < dayDifference.intValue(); i++) { + beginTime.add(Calendar.DAY_OF_MONTH, 1); + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + month = String.format("%02d", (beginMonth)); + day = String.format("%02d", (beginDay)); + for (int j = 0; j < totaltimestampCount; j++) { + String hour = String.format("%02d", (j)); + xAxisData.add(month + "-" + day + " " + hour); + } + } + dateType="MM-dd HH"; + LineChartVO vehicleFlows=getVehicleFlows(request, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } else { + // 1天为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + for (int i = 0; i < dayDifference.intValue(); i++) { + beginTime.add(Calendar.DAY_OF_MONTH, 1); + int beginMonth = beginTime.get(Calendar.MONTH) + 1; + int beginDay = beginTime.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + xAxisData.add(month + "-" + day); + + } + dateType="MM-dd"; + LineChartVO vehicleFlows=getVehicleFlows(request, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } + + } + + + private LineChartVO getVehicleFlows(ParkingLotUseStatisticForPageRequest request, + List xAxisData,String dateType){ + // 调用后场服务 + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + PageBean pageBean = ResultUtils.getBizResultData(bizResult); + List useStatisticDTOs = Lists.newArrayList(); + if (pageBean != null) { + useStatisticDTOs = pageBean.getDataList(); + } + + // 保存固定车流量,时间戳和车流量对应关系 + Map fixVehicleFlowMap = Maps.newHashMap(); + // 保存临时车流量,时间戳和车流量对应关系 + Map tmpVehicleFlowMap = Maps.newHashMap(); + // 停车场编号和名称对应关系 + Map parkNameMap = Maps.newHashMap(); + // 通过停车场,和统计时间分组 + // Map> parkLotMap = Maps.newHashMap(); + if (!CollectionUtils.isEmpty(useStatisticDTOs)) { + for (ParkingLotUseStatisticDTO statisticDTO : useStatisticDTOs) { + String key = statisticDTO.getPlNo(); + parkNameMap.put(key, statisticDTO.getPlName()); + String statisBeginTime = DateUtil.getDateString(statisticDTO.getStatisticBeginTime(), dateType); + //保存固定车流量和临时车流量 + fixVehicleFlowMap.put(statisBeginTime, (fixVehicleFlowMap.get(statisBeginTime)==null?0:fixVehicleFlowMap.get(statisBeginTime))+statisticDTO.getFixVehicleFlow()); + tmpVehicleFlowMap.put(statisBeginTime, (tmpVehicleFlowMap.get(statisBeginTime)==null?0:tmpVehicleFlowMap.get(statisBeginTime))+statisticDTO.getTmpVehicleFlow()); + } + } + + // 封装车流量统计 + LineChartVO vehicleFlows = new LineChartVO(); + List vehicleFlows_legendData = Lists.newArrayList(); + vehicleFlows_legendData.add("临时车"); + vehicleFlows_legendData.add("固定车"); + vehicleFlows.setLegendData(vehicleFlows_legendData); + vehicleFlows.setxAxisData(xAxisData); + List vehicleSeries = Lists.newArrayList(); + // 固定车 + SerieVO fixSerieVo = new SerieVO(); + fixSerieVo.setName("固定车"); + List fixSerieVoData = Lists.newArrayList(); + // 临时车 + SerieVO tmpSerieVo = new SerieVO(); + tmpSerieVo.setName("临时车"); + List tmpSerieVoData = Lists.newArrayList(); + // 保存上一次的临时车值,当某个时间点没有数据时,则保持和上次一致 + Integer lastfixFlow = 0; + Integer lasttmpFlow = 0; + for (String timestamp : xAxisData) { + + if (fixVehicleFlowMap.containsKey(timestamp)) { + lastfixFlow = fixVehicleFlowMap.get(timestamp).intValue(); + }else{ + lastfixFlow =0; + } + fixSerieVoData.add(lastfixFlow); + + if (tmpVehicleFlowMap.containsKey(timestamp)) { + lasttmpFlow = tmpVehicleFlowMap.get(timestamp).intValue(); + }else{ + lasttmpFlow = 0; + } + tmpSerieVoData.add(lasttmpFlow); + } + fixSerieVo.setData(fixSerieVoData); + vehicleSeries.add(fixSerieVo); + tmpSerieVo.setData(tmpSerieVoData); + vehicleSeries.add(tmpSerieVo); + + vehicleFlows.setSeries(vehicleSeries); + return vehicleFlows; + } + + public static void main(String[] args) { + String json="{\"id\":\"1\",\"platform\":\"android\",\"parameter\":{\"drid\":\"177277364\",\"sex\":\"1\",\"type\":\"2\",\"creatorname\":\"Mrw\",\"username\":\"jack\",\"pwd\":\"123456\",\"remark\":\"平板用户\",\"createtime\":\"2017-07-24 23:59:59\"}}"; + JSONObject object =(JSONObject)JSONObject.parse(json); + System.out.println(object.get("id")); + System.out.println(object.get("platform")); + JSONObject parameter =(JSONObject)object.get("parameter"); + System.out.println(parameter.get("drid")); + System.out.println(parameter.get("sex")); + } + + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/YearMonthCardStatisticController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/YearMonthCardStatisticController.java new file mode 100644 index 0000000..6e5b2ec --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/YearMonthCardStatisticController.java @@ -0,0 +1,243 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.fastjson.JSON; + +import com.clouds.common.utils.excle.ExcelUtil; +import com.clouds.common.utils.excle.ExcleFillDateManager; +import com.clouds.common.utils.excle.Layouter; +import com.clouds.common.web.BizController; +import com.clouds.common.web.vo.BizResultVO; +import com.clouds.common.web.vo.EasyUIDataGridVO; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.bean.PageBean; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.clouds.dto.YearMonthCardStatisticDTO; +import com.zteits.clouds.api.dto.clouds.dto.YearMonthCardStatisticSumDTO; +import com.zteits.clouds.api.dto.pay.param.YearMonthCardStatisticRequest; +import com.zteits.clouds.api.service.clouds.YearMonthCardStatisticService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * 企业云平台->数据统计->年卡月卡统计。 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: InOutParkStatisticController.java + * @Description: + * @version: v1.0.0 + * @author: langlw + * @date: 2017年7月26日 上午11:30:04 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017年7月26日 langlw v1.0.0 创建 + */ +@Api(value = "企业云平台->数据统计->年卡月卡统计", description = "企业云平台->数据统计->年卡月卡统计") +@RestController +@RequestMapping(value = "/yearMonthCardStatistic") +public class YearMonthCardStatisticController extends BizController { + + private static final Logger logger = LoggerFactory.getLogger(InOutParkStatisticController.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private YearMonthCardStatisticService yearMonthCardStatisticService; + + @ApiOperation("年卡月卡统计") + @PostMapping("queryYearMonthCardStatistic") + @ResponseBody + public BizResultVO> queryYearMonthCardStatistic( + @RequestBody YearMonthCardStatisticRequest request) throws Exception { + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + if (null == request.getBeginTime() || null == request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + BizResult> bizResult = yearMonthCardStatisticService + .queryYearMonthCardStatistic(request); + return returnJqGridData(bizResult, YearMonthCardStatisticDTO.class); + } + + @ApiOperation("年卡月卡统计折线图") + @PostMapping("queryYearMonthCardStatisticForChart") + @ResponseBody + public BizResultVO> queryYearMonthCardStatisticForChart( + @RequestBody YearMonthCardStatisticRequest request) throws Exception { + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + if (null == request.getBeginTime() || null == request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + BizResult> bizResult = yearMonthCardStatisticService + .queryYearMonthCardStatisticSum(request); + logger.info("调用DUBBO服务返回结果:" + JSON.toJSONString(bizResult)); + return new BizResultVO<>(bizResult); + } + + @ApiOperation("导出年卡月卡统计excel") + @GetMapping("exportYearMonthStatisticExcel") + public void exportYearMonthStatisticExcel(@RequestParam Long beginTime, @RequestParam Long endTime, + @RequestParam List parkIdList, @RequestParam String parkNames, + Integer orderType, Integer payType, Integer dataState, + HttpServletRequest requests, HttpServletResponse response) throws Exception { + + YearMonthCardStatisticRequest request = new YearMonthCardStatisticRequest(); + request.setSysCode(sysCode); + request.setBeginTime(new Date(beginTime)); + request.setEndTime(new Date(endTime)); + + request.setParkIdList(parkIdList); + request.setBaseRequest(new BaseInfo(1, 0)); + request.setOrderType(orderType); + request.setPayType(payType); + request.setDataState(dataState); + + BizResult> bizResult = yearMonthCardStatisticService + .queryYearMonthCardStatistic(request); + BizResult> bizResultSum = yearMonthCardStatisticService + .queryYearMonthCardStatisticSum(request); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] {"交易时间", "停车场", "类型", "车牌号", "支付方式", "支付金额", "有效期", "状态"}; + String sheetName = "年卡月卡统计"; + String fileName = "年卡月卡统计" + format2.format(new Date()); + + String[] billTitle = new String[9]; + billTitle = new String[2]; + //if (!org.springframework.util.CollectionUtils.isEmpty(bizResultSum.getData())) { + // List dtoList = bizResultSum.getData(); + // String amountsum = ""; + // String sum = ""; + // for (YearMonthCardStatisticSumDTO dto : dtoList) { + // amountsum = dto.getAmountSum() == null ? " " : dto.getAmountSum() + "," + amountsum; + // sum = dto.getOrderSum() + "," + sum; + // } + // String ordertype = ""; + // if (null != orderType) { + // if (2 == orderType) { + // ordertype = "年卡"; + // } else if (3 == orderType) { + // ordertype = "月卡"; + // } + // } + // String datastate = ""; + // if (null != dataState) { + // if (1 == dataState) { + // datastate = "有效"; + // } else if (0 == dataState) { + // datastate = "无效"; + // } + // } + // + billTitle[0] = "年卡月卡统计"; + // billTitle[1] = "汇总"; + // billTitle[2] = "停车场: " + parkNames; + // billTitle[3] = "时间: " + endTime; + // billTitle[4] = "类型:" + (orderType != null ? ordertype : ""); + // billTitle[5] = "状态: " + (dataState != null ? datastate : ""); + // billTitle[6] = "支付方式: " + (payType != null ? payType : ""); + // billTitle[7] = "每个月的总笔数" + sum; + // billTitle[8] = "每个月的总金额数" + amountsum; + //} else { + // billTitle[0] = "年卡月卡统计"; + // billTitle[1] = "汇总"; + // billTitle[2] = "停车场: "; + // billTitle[3] = "时间: "; + // billTitle[4] = "类型:"; + // billTitle[5] = "状态: "; + // billTitle[6] = "支付方式: "; + // billTitle[7] = "每个月的总车数"; + // billTitle[8] = "每个月的总金额数"; + //} + + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title,0,0); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + for (YearMonthCardStatisticDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = e.getPayFinishTime() != null ? format.format(e.getPayFinishTime()) : ""; + obj[index++] = e.getParkName(); + String cardType=""; + if (null != e.getOrderType()) { + if (2 == e.getOrderType()) { + cardType = "年卡"; + }else{ + cardType = "月卡"; + } + } + obj[index++]=cardType; + obj[index++] = e.getCarNumber(); + if (e.getPayType() != null) { + switch (e.getPayType()) { + case 1: + obj[index++] = "支付宝"; + break; + case 2: + obj[index++] = "微信"; + break; + case 3: + obj[index++] = "银联"; + break; + case 4: + obj[index++] = "微信"; + break; + default: + obj[index++] = "现金"; + break; + } + } else { + obj[index++] = ""; + } + obj[index++] = e.getAmount() != null ? e.getAmount() : "0.00"; + obj[index++] = e.getEffDate() != null ? format.format(e.getEffDate()) + : "" + "-" + e.getExpDate() != null ? format.format(e.getExpDate()) : ""; + //有效、无效 + Date d = new Date(); + String state = ""; + if ((d.getTime() <= e.getExpDate().getTime()) && (d.getTime() >= e.getEffDate().getTime())) { + state = "有效"; + } else { + state = "无效"; + } + obj[index++] = state; + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/parklotmanage/ParkLotManageController.java a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/parklotmanage/ParkLotManageController.java new file mode 100644 index 0000000..da98071 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/parklotmanage/ParkLotManageController.java @@ -0,0 +1,121 @@ +package com.zteits.irain.portal.web.parkinglotcloudplatform.parklotmanage; + +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.clouds.common.cache.park.ParkingLotCacheUtil; +import com.clouds.common.entity.UserInfo; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.SessionCommUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; +import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; +import com.zteits.clouds.api.dto.pay.param.TdCompanyParkQueryRequest; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; +import com.zteits.clouds.api.service.pay.TdCustCompanyService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 停车场管理 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: ParkingLotController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月16日 下午5:27:21 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月16日 zhaowg v1.0.0 创建 + */ +@Api(value="停车场管理",description="停车场管理") +@RestController +@RequestMapping("parkLotManage") +public class ParkLotManageController{ + private Logger logger = LoggerFactory.getLogger(ParkLotManageController.class); + @Autowired + private HttpSession session; + @Autowired + private SessionCommUtil sessionCommUtil; + @Autowired + private TdCustCompanyService tdCustCompanyService; + @Autowired + private ParkingLotQueryService parkingLotQueryService; + /** + * 根据登录人权限获取停车场名称列表 + * @return + * 2017年6月16日 zhaowg + * @throws Exception + */ + @ApiOperation("根据登录人权限获取停车场名称列表") + @GetMapping("getParkLotNamesByUserId") + public BizResultVO>> GetParkLotNameListByUserId(@RequestParam String sysCode) throws Exception { + List> result = Lists.newArrayList(); + //拥有的停车场编号 + List plNos = this.GetParkLotNosByCurrUser(sysCode); + //查询对应的停车场信息 + if(CollectionUtils.isEmpty(plNos)){ + return new BizResultVO>>().setData(result); + } + for (String plNo : plNos) { + Map plNoMap = Maps.newHashMap(); + //先查询缓存 + ParkingLotDTO lotDTO = ParkingLotCacheUtil.getParkLotByPlNo(plNo); + if(lotDTO == null){ + //查询数据库 + QueryParkLotInfoByPkNoRequest request = new QueryParkLotInfoByPkNoRequest(); + request.setSysCode(sysCode); + request.setPklNo(plNo); + BizResult bizResult2 = parkingLotQueryService.QueryParkingLotByPkNo(request); + lotDTO = ResultUtils.getBizResultData(bizResult2); + } + if(lotDTO == null || StringUtils.isBlank(lotDTO.getPlName()) || lotDTO.getPlName().equals("null")){ + continue; + } + plNoMap.put("code",plNo ); + plNoMap.put("name",lotDTO.getPlName()); + result.add(plNoMap); + } + + return new BizResultVO>>().setData(result); + } + + private List GetParkLotNosByCurrUser(String sysCode) throws Exception { + logger.info("根据登录人权限获取停车场列表"); + List plNos = Lists.newArrayList(); + //2.调用接口查询当前登录人管辖的停车场名称 + UserInfo userInfo = sessionCommUtil.getUserInfo(); + if(userInfo!=null){ + TdCompanyParkQueryRequest tdCompanyParkQueryRequest = new TdCompanyParkQueryRequest(); + tdCompanyParkQueryRequest.setCustIdList(userInfo.getOrgIds()); + tdCompanyParkQueryRequest.setSysCode(sysCode); + tdCompanyParkQueryRequest.setSessionId(session.getId()); + BizResult> bizResult = tdCustCompanyService.queryParkNoByCustIds(tdCompanyParkQueryRequest ); + plNos = ResultUtils.getBizResultData(bizResult); + }else{ + throw new BizException(ErrorType.AUTH_TOKEN_NOT_EXISTS); + } + return plNos; + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/qingdao/EqpAndPosStatusSyncController.java a/src/main/java/com/zteits/irain/portal/web/qingdao/EqpAndPosStatusSyncController.java new file mode 100644 index 0000000..7d15bfd --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/qingdao/EqpAndPosStatusSyncController.java @@ -0,0 +1,57 @@ +package com.zteits.irain.portal.web.qingdao; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSON; +import com.clouds.common.cache.park.EqpAndPosStatusSyncCacheUtil; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.irain.portal.vo.qingdao.eqppossync.GeoTotalNumSyncReq; +import com.zteits.irain.portal.vo.qingdao.eqppossync.PosTotalNumSyncReq; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * 设备和POST状态同步 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: EqpAndPosStatusSyncController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年7月26日 下午4:19:10 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年7月26日 zhaowg v1.0.0 创建 + */ +@Api(description="设备和POS机状态同步") +@RestController +@RequestMapping("eqpAndPosStatusSync") +public class EqpAndPosStatusSyncController { + + private static final Logger logger = LoggerFactory.getLogger(EqpAndPosStatusSyncController.class); + + @ApiOperation("POS机总数统计同步接口") + @PostMapping("syncPosTotalNum") + public BizResultVO syncPosTotalNum(@RequestBody PosTotalNumSyncReq totalNumSyncReq){ + logger.info("POS机总数统计同步接口 请求参数:"+JSON.toJSONString(totalNumSyncReq)); + EqpAndPosStatusSyncCacheUtil.setPosTotalNum(totalNumSyncReq.getNuminuse(), totalNumSyncReq.getNumunused()); + return new BizResultVO().setData(true); + } + + @ApiOperation("地磁总数统计同步接口") + @PostMapping("syncGeoTotalNum") + public BizResultVO syncGeoTotalNum(@RequestBody GeoTotalNumSyncReq totalNumSyncReq){ + logger.info("地磁总数统计同步接口 请求参数:"+JSON.toJSONString(totalNumSyncReq)); + EqpAndPosStatusSyncCacheUtil.setGeoTotalNum(totalNumSyncReq.getNumonline(), totalNumSyncReq.getNumoffline()); + return new BizResultVO().setData(true); + } + +} diff --git b/src/main/java/com/zteits/irain/portal/web/qingdao/QDInOutController.java a/src/main/java/com/zteits/irain/portal/web/qingdao/QDInOutController.java new file mode 100644 index 0000000..e6d2b22 --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/qingdao/QDInOutController.java @@ -0,0 +1,226 @@ +/** + * + */ +package com.zteits.irain.portal.web.qingdao; + + +import java.math.BigDecimal; +import java.util.Date; + +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.clouds.common.utils.DateUtil; +import com.clouds.common.utils.ExceptionUtil; +import com.clouds.common.web.BizController; +import com.zteits.clouds.api.apibase.bean.BaseInfo; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.param.InParkingRequest; +import com.zteits.clouds.api.dto.park.param.InterfaceLogSaveRequest; +import com.zteits.clouds.api.dto.park.param.OutParkingRequest; +import com.zteits.clouds.api.service.park.InterfaceLogService; +import com.zteits.irain.portal.constant.ParkConstant; +import com.zteits.irain.portal.constant.ParkConstant.InterfaceLog; +import com.zteits.irain.portal.service.interfaces.inoutparklot.InOutParkLotReportService; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordInParkLotRequest; +import com.zteits.irain.portal.service.interfaces.inoutparklot.param.RecordOutParkLotRequest; +import com.zteits.irain.portal.vo.qingdao.RespondMessage; +import com.zteits.irain.portal.vo.qingdao.inoutpark.QDInOutParkReq; + +import io.swagger.annotations.Api; + +/** + * 青岛进出场上报 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: QDInOutController.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年6月22日 下午2:29:28 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月22日 hxz v1.0.0 创建 + */ +@Api("青岛 进车上报、出车上报") +@RestController +@RequestMapping("/qd") +public class QDInOutController extends BizController { + private static final Logger logger = LoggerFactory.getLogger(QDInOutController.class); + + @Value("${project.syscode}") + private String sysCode; + @Autowired + private InterfaceLogService interfaceLogService; + @Autowired + private InOutParkLotReportService inOutParkLotReportService; + + @PostMapping("/inout") + public RespondMessage HandleReceivedData(@RequestBody String jsonOrder) { + BaseInfo baseInfo = new BaseInfo(); + String requestId = baseInfo.getRequestId(); + logger.info("[RequestId:" + requestId + "]QD 进车上报内容:" + jsonOrder); + //记录日志 + InterfaceLogSaveRequest logSaveRequest = new InterfaceLogSaveRequest(sysCode, + baseInfo,null, jsonOrder,InterfaceLog.FromType.QINGDAO); + logSaveRequest.setEncryptParam(jsonOrder); + logSaveRequest.setSyncStatus(1); + QDInOutParkReq qdinoutParkReq = null; + RespondMessage respondMessage = new RespondMessage(); + try { + if(StringUtils.isBlank(jsonOrder)){ + throw new BizException(ErrorType.PARAMM_NULL, "请求报文"); + } + //转换对象 + qdinoutParkReq = JSON.parseObject(jsonOrder, QDInOutParkReq.class); + //记录日志主键 + Long outId = null; + + if (qdinoutParkReq.getInOut().equals(ParkConstant.QDInOutParkLot.InOutType.INPARKLOT)) { + //进场 + logSaveRequest.setType(ParkConstant.InterfaceLog.Type.TYPE_IN_PARKING); + outId = inParkLotSave(qdinoutParkReq,logSaveRequest); + }else if(qdinoutParkReq.getInOut().equals(ParkConstant.QDInOutParkLot.InOutType.OUTPARKLOT_ESCAPE) + || qdinoutParkReq.getInOut().equals(ParkConstant.QDInOutParkLot.InOutType.OUTPARKLOT_NOMAL)){ + //出场 + logSaveRequest.setType(ParkConstant.InterfaceLog.Type.TYPE_OUT_PARKING); + outId = outParkLotSave(qdinoutParkReq,logSaveRequest); + } + + //记录外部主键 + logSaveRequest.setOutId(outId); + logSaveRequest.setStatus(InterfaceLog.Status.SUCCESS); + + respondMessage.setErrorCode("null"); + respondMessage.setStatus("success"); + + } catch (Exception e) { + e.printStackTrace(); + logSaveRequest.setMessage(ExceptionUtil.getTrace(e)); + logSaveRequest.setStatus(InterfaceLog.Status.FAIL); + + respondMessage.setStatus("fail"); + respondMessage.setErrorCode("100006"); + } finally { + logSaveRequest.setResponseBody(JSONObject.toJSONString(respondMessage)); + logSaveRequest.setResponseTime(new Date()); + //保存日志 + try{ + interfaceLogService.SaveInterfaceLog(logSaveRequest); + }catch(Exception e){ + e.printStackTrace(); + } + } + return respondMessage; + } + + /** + * 出场操作记录 + * @param qdinoutParkReq + * @return + * @throws Exception + * 2017年6月22日 zhaowg + */ + private Long outParkLotSave(QDInOutParkReq qdinoutParkReq,InterfaceLogSaveRequest logSaveRequest) throws Exception { + // Initialize objects. + RecordOutParkLotRequest request = new RecordOutParkLotRequest(); + request.setFromType(InterfaceLog.FromType.QINGDAO); + request.setSourceType(InterfaceLog.SourceType.GEO); + request.setSysCode(sysCode); + // Object used for accepting data from parking lot. + OutParkingRequest acceptObject = new OutParkingRequest(); + + // Set Object info. + acceptObject.setSysCode(sysCode); + acceptObject.setParkCode(qdinoutParkReq.getParkinglotNo()); + acceptObject.setRecordId(qdinoutParkReq.getOrderNo()); + acceptObject.setVplNumber(qdinoutParkReq.getVehicleNo()); + acceptObject.setPayType(qdinoutParkReq.getPayType()==null?"":qdinoutParkReq.getPayType().toString()); + if (null != qdinoutParkReq.getOutTime()) { + acceptObject.setOutTime(DateUtil.to_date(qdinoutParkReq.getOutTime(), DateUtil.DATETIME_FORMAT)); + } + if (qdinoutParkReq.getInOut().equals(ParkConstant.QDInOutParkLot.InOutType.OUTPARKLOT_NOMAL)) { + // 订单记录状态 已支付,正常离开 + acceptObject.setOrderStatus(5); //暂时默认处理,需与青岛共同商定状态规则,未考虑预订 + if (0 < qdinoutParkReq.getRecAmount()) { + logger.info("need to pay: " + qdinoutParkReq.getRecAmount().toString()); + acceptObject.setCalcCharge(BigDecimal.valueOf(qdinoutParkReq.getRecAmount())); + } + if (0 < qdinoutParkReq.getAmount()) { + logger.info("Paid: " + qdinoutParkReq.getAmount()); + acceptObject.setParkingCharge(BigDecimal.valueOf(qdinoutParkReq.getAmount())); + } + acceptObject.setFromType(InterfaceLog.FromType.QINGDAO); + } + + if (qdinoutParkReq.getInOut().equals(ParkConstant.QDInOutParkLot.InOutType.OUTPARKLOT_ESCAPE)) { + // 订单记录状态 逃逸 + acceptObject.setOrderStatus(6); //暂时默认处理,需与青岛共同商定状态规则,未考虑预订 + if (0 < qdinoutParkReq.getRecAmount()) { + logger.info("need to pay: " + qdinoutParkReq.getRecAmount().toString()); + acceptObject.setCalcCharge(BigDecimal.valueOf(qdinoutParkReq.getRecAmount())); + } + } + + acceptObject.setParkingPlaceCode(qdinoutParkReq.getParkingNo()); + acceptObject.setParkingPlaceStatus(0); //暂时默认处理,需与青岛共同商定状态规则,未考虑预订 + acceptObject.setFreeBerths(qdinoutParkReq.getFree()); + request.setOutParkLotReq(acceptObject); + //保存转化之后的请求数据 + logSaveRequest.setRequestConversionBody(JSON.toJSONString(acceptObject)); + + // 调用出车服务 + Long outId = inOutParkLotReportService.OutParkLotRecord(request); + return outId; + } + + /** + * 进场操作记录 + * @param qdinoutParkReq + * @return + * @throws Exception + * 2017年6月22日 zhaowg + */ + private Long inParkLotSave(QDInOutParkReq qdinoutParkReq,InterfaceLogSaveRequest logSaveRequest) throws Exception { + RecordInParkLotRequest request = new RecordInParkLotRequest(); + request.setFromType(InterfaceLog.FromType.QINGDAO); + request.setSourceType(InterfaceLog.SourceType.GEO); + request.setSysCode(sysCode); + // Object used for accepting data from parking lot. + InParkingRequest acceptObject = new InParkingRequest(); + + // Set Object info. + acceptObject.setSysCode(sysCode); + acceptObject.setParkCode(qdinoutParkReq.getParkinglotNo()); + acceptObject.setRecordId(qdinoutParkReq.getOrderNo()); + acceptObject.setVplNumber(qdinoutParkReq.getVehicleNo()); + if (null != qdinoutParkReq.getInTime()) { + acceptObject.setInTime(DateUtil.to_date(qdinoutParkReq.getInTime(),DateUtil.DATETIME_FORMAT)); + } + logger.info("in time:" + acceptObject.getInTime()); + acceptObject.setOrderStatus(4); //暂时默认处理,需与青岛共同商定状态规则,未考虑预订 + acceptObject.setParkingPlaceCode(qdinoutParkReq.getParkingNo()); + acceptObject.setParkingPlaceStatus(1); //暂时默认处理,需与青岛共同商定状态规则,未考虑预订 + acceptObject.setFreeBerths(qdinoutParkReq.getFree()); + acceptObject.setFromType(InterfaceLog.FromType.QINGDAO); + request.setInParkLotReq(acceptObject); + //保存转化之后的请求数据 + logSaveRequest.setRequestConversionBody(JSON.toJSONString(acceptObject)); + //调用进车服务 + Long outId = inOutParkLotReportService.InParkLotRecord(request); + return outId; + } +} diff --git b/src/main/java/com/zteits/irain/portal/web/run/RunParklotController.java a/src/main/java/com/zteits/irain/portal/web/run/RunParklotController.java new file mode 100644 index 0000000..e67f6ce --- /dev/null +++ a/src/main/java/com/zteits/irain/portal/web/run/RunParklotController.java @@ -0,0 +1,174 @@ +package com.zteits.irain.portal.web.run; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONObject; + +import com.clouds.common.log.LogSelf; +import com.clouds.common.utils.LogSelfFactory; +import com.clouds.common.utils.ResultUtils; +import com.clouds.common.web.vo.BizResultVO; +import com.zteits.clouds.api.apibase.bean.BizResult; +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.park.dto.TabParkinglotDTO; +import com.zteits.clouds.api.dto.run.dto.ParkFreeQueryDTO; +import com.zteits.clouds.api.dto.run.dto.ParkFreeResDTO; +import com.zteits.clouds.api.dto.run.dto.ParkSpaceStateDTO; +import com.zteits.clouds.api.dto.run.param.FreeNumParklogByParkNosQueryRequest; +import com.zteits.clouds.api.dto.run.param.FreePakingSpaceQueryRequest; +import com.zteits.clouds.api.service.run.IParkService; +import com.zteits.irain.portal.service.interfaces.induction.InductionService; +import com.zteits.irain.portal.service.interfaces.induction.param.DoLevelTwoAndThreeInductionReleaseBatchRequest; +import com.zteits.irain.portal.service.interfaces.induction.param.InductionRelease; +import com.zteits.irain.portal.service.interfaces.parklotidleberths.ParkLotIdleBerthsService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: com.zteits.irain.portal.web.run.controller + * @Description: + * @version: v1.0.0 + * @author: atao + * @date: 2017/5/25 下午12:27 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2017/5/25 atao v1.0.0 创建 + */ +@Api("获取空余车位信息") +@RestController +@RequestMapping("/runParklot") +public class RunParklotController { + + LogSelf log = LogSelfFactory.getLogSelf(RunParklotController.class); + + + @Autowired + private IParkService parkService; + + @Autowired + private ParkLotIdleBerthsService parkLotIdleBerthsService; + + @Autowired + private InductionService inductionService; + + /** + * 根据停车场编号查询空余车位信息 + * + * @return + */ + @PostMapping("/queryParklotFreeInfo") + public BizResultVO queryParklotFreeNumByParkNos( + @RequestBody FreeNumParklogByParkNosQueryRequest request) { + BizResultVO bizResultVO = new BizResultVO<>(); + ParkFreeResDTO parkFreeResDTO = new ParkFreeResDTO(); + List parkDatas = new ArrayList<>(); + List queryDTOS = request.getQueryDTOList(); + + List dubboNos = new ArrayList<>(); + List redisNos = new ArrayList<>(); + + for (ParkFreeQueryDTO dto : queryDTOS) { + if ("1".equals(dto.getType())) { + //1是路侧停车场 + dubboNos.add(dto.getParkNo()); + } else { + //2是室内停车场 + redisNos.add(dto.getParkNo()); + } + } + + //调用室内 + if(!CollectionUtils.isEmpty(redisNos)){ + Map redisData = parkLotIdleBerthsService.getIdleBerthFromRedisByParkNos(redisNos); + ParkSpaceStateDTO parkSpaceStateDTO = null; + for (String key : redisData.keySet()) { + TabParkinglotDTO tabParkinglotDTO = redisData.get(key); + if (null != tabParkinglotDTO) { + parkSpaceStateDTO = new ParkSpaceStateDTO(); + parkSpaceStateDTO.setParkNo(key); + parkSpaceStateDTO.setParkName(tabParkinglotDTO.getPklName()); + parkSpaceStateDTO.setFreeNum(String + .valueOf(tabParkinglotDTO.getIdleberths() == null ? 0 : tabParkinglotDTO.getIdleberths() + 10000) + .substring(1)); + parkDatas.add(parkSpaceStateDTO); + } + + } + } + + //调用路测 + if(!CollectionUtils.isEmpty(dubboNos)){ + FreePakingSpaceQueryRequest request1 = new FreePakingSpaceQueryRequest(); + + request1.setSysCode(request.getSysCode()); + request1.setParkNos(dubboNos); + + BizResult> dubboData = parkService.queryParkSpaceFreeNum(request1); + + if (!ResultUtils.isSuccess(dubboData)) { + throw new BizException(dubboData.getErrCode()); + } + + List parkSpaceStateDTOS = dubboData.getData(); + + if (!CollectionUtils.isEmpty(parkSpaceStateDTOS)) { + parkDatas.addAll(parkSpaceStateDTOS); + } + } + parkFreeResDTO.setParkDatas(parkDatas); + parkFreeResDTO.setTotal(getTotlaFreeNum(parkDatas)); + bizResultVO.setCode(ErrorType.BIZ_SUCCESS.getCode()); + bizResultVO.setMsg(ErrorType.BIZ_SUCCESS.getMsg()); + bizResultVO.setData(parkFreeResDTO); + + try { + //传固定值 + DoLevelTwoAndThreeInductionReleaseBatchRequest releaseBatchRequest + = new DoLevelTwoAndThreeInductionReleaseBatchRequest(); + List list = new ArrayList<>(); + InductionRelease inductionRelease = null; + for (ParkSpaceStateDTO dto : parkDatas) { + inductionRelease = new InductionRelease(); + inductionRelease.setBerth_left(dto.getFreeNum()); + inductionRelease.setOwner_code("1001"); + inductionRelease.setParking_code(dto.getParkNo()); + inductionRelease.setRange_code(dto.getParkNo()); + list.add(inductionRelease); + } + releaseBatchRequest.setJsonStr(list); + + BizResultVO bizResultVO1 = inductionService.doLevelTwoAndThreeInductionReleaseBatch(releaseBatchRequest); + log.info("二三级诱导批量发布返回数据为:" + JSONObject.toJSONString(bizResultVO1)); + } catch (Exception e) { + e.printStackTrace(); + log.error("二三级诱导发布捕获异常", e); + } + + return bizResultVO; + } + + private String getTotlaFreeNum(List list) { + int i = 0; + for (ParkSpaceStateDTO dto : list) { + i += Integer.valueOf(dto.getFreeNum()); + } + return String.valueOf(10000 + i).substring(1); + } + + public static void main(String[] args) { + String i = "0111"; + System.out.println(Integer.valueOf(i)); + } + +} diff --git b/src/main/resources/application-prod.properties a/src/main/resources/application-prod.properties new file mode 100644 index 0000000..89f2cee --- /dev/null +++ a/src/main/resources/application-prod.properties @@ -0,0 +1,27 @@ +#irain +irain.url=http://api.parkingwang.com:8280 +server.port=8192 +#irain艾润 +irain.appid=avakrky0gk1m7n00 +#irain +irain.appsecret=rrr6uz3aqvutpsq2lsna0k18cea4mabw +#irain aes +irain.aes=avakrky0gk1m7n00 + +irain.park_code=734861a1e8656ffa51bdd90829941ca9 + +spring.dubbo.application.name=${spring.application.name} +spring.dubbo.registry.address=zookeeper://10.168.17.175:2181?backup=10.117.221.34:2181,10.117.6.166:2181 +spring.dubbo.provider.version=1.0.0 +spring.dubbo.cunsumer.check=false + +#spring session redis config +spring.redis.host=10.117.61.52 +spring.redis.port=7001 +spring.redis.password=myredis + +#ebochong config +ebochong.url= +ebochong.clientCode=12345678 +ebochong.key=2xJLZAlyolvMMz4+c/8nRA== + diff --git b/src/main/resources/application-test.properties a/src/main/resources/application-test.properties new file mode 100644 index 0000000..d9089be --- /dev/null +++ a/src/main/resources/application-test.properties @@ -0,0 +1,22 @@ +server.port=8304 +#irain +irain.url=http://api.parkingwang.com:8280 +#irain艾润 +irain.appid=avakrky0gk1m7n00 +#irain +irain.appsecret=rrr6uz3aqvutpsq2lsna0k18cea4mabw +#irain aes +irain.aes=avakrky0gk1m7n00 + +irain.park_code=734861a1e8656ffa51bdd90829941ca9 + + +#dubbo address +spring.dubbo.registry.address=zookeeper://192.168.129.137:2181 +spring.dubbo.registry.port=23809 +spring.dubbo.provider.version=1.0.0-test + +#spring session redis config +spring.redis.host=192.168.129.137 +spring.redis.port=6379 +spring.redis.password=myredis diff --git b/src/main/resources/application-test195.properties a/src/main/resources/application-test195.properties new file mode 100644 index 0000000..ab4bb91 --- /dev/null +++ a/src/main/resources/application-test195.properties @@ -0,0 +1,19 @@ +#irain +irain.url=http://api.parkingwang.com:8280 +#irain艾润 +irain.appid=avakrky0gk1m7n00 +#irain +irain.appsecret=rrr6uz3aqvutpsq2lsna0k18cea4mabw +#irain aes +irain.aes=avakrky0gk1m7n00 + +irain.park_code=734861a1e8656ffa51bdd90829941ca9 + +spring.dubbo.registry.address=zookeeper://192.168.1.195:2181 +spring.dubbo.cunsumer.check=false +spring.dubbo.provider.version=1.0.0-test195 + +#spring session redis config +spring.redis.host=192.168.1.195 +spring.redis.port=63790 +spring.redis.password=redis_63790 diff --git b/src/main/resources/application-test61.properties a/src/main/resources/application-test61.properties new file mode 100644 index 0000000..3283e92 --- /dev/null +++ a/src/main/resources/application-test61.properties @@ -0,0 +1,24 @@ +#irain +irain.url=http://api.parkingwang.com:8280 +#irain艾润 +irain.appid=avakrky0gk1m7n00 +#irain +irain.appsecret=rrr6uz3aqvutpsq2lsna0k18cea4mabw +#irain aes +irain.aes=avakrky0gk1m7n00 + +irain.park_code=734861a1e8656ffa51bdd90829941ca9 + +spring.dubbo.registry.address=zookeeper://192.168.129.137:2181 +spring.dubbo.cunsumer.check=true + +#spring session redis config +spring.redis.host=192.168.129.137 +spring.redis.port=6379 +spring.redis.password="" + +#ebochong config +ebochong.url= +ebochong.clientCode=12345678 +ebochong.key=2xJLZAlyolvMMz4+c/8nRA== + diff --git b/src/main/resources/application.properties a/src/main/resources/application.properties new file mode 100644 index 0000000..7b7ac06 --- /dev/null +++ a/src/main/resources/application.properties @@ -0,0 +1,53 @@ +project.syscode=zteits-park-portal +spring.application.name=zteits-park-portal +server.port=8099 + +# logging +logging.level.root=info +#logging.level.org.springframework.web=DEBUG +logging.level.com.zteits.irain.portal=debug +#logging.path=${user.home}/logs +logging.file=${spring.application.name}.log +logging.config=classpath:logback-spring.xml + +#irain +irain.url=http://api.parkingwang.com:8280 +#irain艾润 +irain.appid=avakrky0gk1m7n00 +#irain +irain.appsecret=rrr6uz3aqvutpsq2lsna0k18cea4mabw +#irain aes +irain.aes=avakrky0gk1m7n00 +irain.park_code=734861a1e8656ffa51bdd90829941ca9 + + +#诱导配置 +#一级诱导回显地址 +induction.showLevelOneInductionReleaseUrl=http://106.74.36.99:18089/ATMS-LED-Server/leveloneInduction/showLevelOneInductionRelease +#二级、三级诱导批量发布地址 +induction.doLevelTwoAndThreeInductionReleaseBatchUrl=http://106.74.36.99:18089/ATMS-LED-Server/berthcount/doLevelTwoAndThreeInductionReleaseBatch + +#Swagger auto config +swagger2.auto.basePackage=com.zteits.irain.portal.web +swagger2.auto.paths.not=/ +#swagger2.auto.apiInfo.title=中兴智能交通-艾润API +#swagger2.auto.apiInfo.description=中兴智能交通-艾润相关的API文档 + +spring.dubbo.application.name=${spring.application.name} +spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 +spring.dubbo.provider.version=1.0.0 +spring.dubbo.cunsumer.check=false + + +#spring session redis config +spring.redis.host=192.168.1.195 +spring.redis.port=63790 +spring.redis.password=redis_63790 + + +#ebochong config +ebochong.url= +ebochong.clientCode=12345678 +ebochong.key=2xJLZAlyolvMMz4+c/8nRA== + + diff --git b/src/main/resources/dubbo/dubbo-park-consumer.xml a/src/main/resources/dubbo/dubbo-park-consumer.xml new file mode 100644 index 0000000..a193d5f --- /dev/null +++ a/src/main/resources/dubbo/dubbo-park-consumer.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git b/src/main/resources/logback-spring.xml a/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..1ee1460 --- /dev/null +++ a/src/main/resources/logback-spring.xml @@ -0,0 +1,34 @@ + + + ${LOG_PATH}/${LOG_FILE} + + + ${logging.path}${logging.file}-%d{yyyy-MM-dd}.%i.log + + 1GB + 60 + 20GB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + diff --git b/src/test/java/com/zteits/irain/portal/swagger/Swagger2MarkupTest.java a/src/test/java/com/zteits/irain/portal/swagger/Swagger2MarkupTest.java new file mode 100644 index 0000000..9cff0cd --- /dev/null +++ a/src/test/java/com/zteits/irain/portal/swagger/Swagger2MarkupTest.java @@ -0,0 +1,117 @@ +/* + * + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + */ +package com.zteits.irain.portal.swagger; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.io.BufferedWriter; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; + +import com.zteits.irain.portal.ParkPortalApplication; +import com.zteits.tool.swagger.config.Swagger2AutoConfiguration; + +import springfox.documentation.staticdocs.Swagger2MarkupResultHandler; + + +/** + * 通过Swagger生成asciidoc文档
+ * 两种方式:
+ * 1.先生成swagger.json,然后将swagger.json生成asciidoc文档。
+ * 2.直接生成asciidoc文档。 + * 目前使用第二种 + * + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: Swagger2MarkupTest.java + * @Description: + * @version: v1.0.0 + * @author: zhaowg + * @date: 2017年4月25日 下午2:18:51 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年4月25日 zhaowg v1.0.0 创建 + */ +@WebAppConfiguration +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = {ParkPortalApplication.class, Swagger2AutoConfiguration.class}) +@AutoConfigureMockMvc +public class Swagger2MarkupTest { + + private static final Logger log = LoggerFactory.getLogger(Swagger2MarkupTest.class); + + @Autowired + private MockMvc mockMvc; + /** + * 生成swagger.json文件,然后使用pom.xml中的convertSwagger2markup任务,生成asciidoc文档。
+ * 缺点: + * 如果没有swagger.json文件,mvn执行打包任务时报错。
+ * 使用mvn打包时一般忽略test,导致报错。 + * @throws Exception + */ + //@Test + public void createSpringfoxSwaggerJson() throws Exception { + log.debug("生成swagger.json文件"); + String outputDir = System.getProperty("io.springfox.staticdocs.outputDir"); + if(StringUtils.isBlank(outputDir)){ + outputDir = "target/swagger"; + } + MvcResult mvcResult = this.mockMvc.perform(get("/v2/api-docs?group=zteitsApi") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn(); + + MockHttpServletResponse response = mvcResult.getResponse(); + String swaggerJson = response.getContentAsString(); + Files.createDirectories(Paths.get(outputDir)); + try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputDir, "swagger.json"), StandardCharsets.UTF_8)){ + writer.write(swaggerJson); + } + } + /** + * 直接生成AsciiDoc文件,需要将pom.xml文档中的convertSwagger2markup注释掉。 + * @throws Exception + */ + @Test + public void convertSwaggerToAsciiDoc() throws Exception { + this.mockMvc.perform(get("/v2/api-docs?group=zteitsApi") + .accept(MediaType.APPLICATION_JSON)) + .andDo(Swagger2MarkupResultHandler + .outputDirectory("target/asciidoc/generated").build()) + .andExpect(status().isOk()); + } +}