From f6b2c5d5f43811895f30d7739504ccc93661dea9 Mon Sep 17 00:00:00 2001 From: dafanshu <654789936@qq.com> Date: Sat, 14 Jul 2018 10:04:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- bigfans-cloud-api-gateway/pom.xml | 4 +- bigfans-cloud-base/pom.xml | 34 +++++- bigfans-cloud-discovery-eureka/pom.xml | 2 +- bigfans-cloud-service-cart/pom.xml | 13 +-- .../bigfans/cartservice/CartServiceApp.java | 4 - bigfans-cloud-service-catalog/pom.xml | 8 +- .../catalogservice/CatalogServiceApp.java | 1 - bigfans-cloud-service-notification/pom.xml | 6 +- bigfans-cloud-service-order/pom.xml | 10 +- .../bigfans/orderservice/OrderServiceApp.java | 4 - bigfans-cloud-service-payment/pom.xml | 8 +- .../bigfans/paymentservice/PayServiceApp.java | 4 - bigfans-cloud-service-pricing/pom.xml | 6 +- bigfans-cloud-service-review/pom.xml | 6 +- bigfans-cloud-service-search/pom.xml | 6 +- bigfans-cloud-service-shipping/pom.xml | 90 --------------- .../shippingservice/ShippingServiceApp.java | 13 --- .../api/clients/OrderServiceClient.java | 37 ------ .../config/CORSConfiguration.java | 27 ----- .../config/DataSourceConfig.java | 108 ------------------ .../config/EventBusConfig.java | 38 ------ .../shippingservice/config/KafkaConfig.java | 63 ---------- .../shippingservice/config/PluginConfig.java | 29 ----- .../config/RedisTemplateConfig.java | 41 ------- .../config/RestTemplateConfig.java | 21 ---- .../shippingservice/config/WebConfig.java | 40 ------- .../shippingservice/dao/DeliveryDAO.java | 15 --- .../dao/impl/DeliveryDAOImpl.java | 20 ---- .../listener/OrderListener.java | 41 ------- .../shippingservice/model/Delivery.java | 14 --- .../bigfans/shippingservice/model/Order.java | 41 ------- .../model/entity/DeliveryEntity.java | 54 --------- .../service/DeliveryService.java | 16 --- .../service/impl/DeliveryServiceImpl.java | 26 ----- .../src/main/resources/application.yml | 58 ---------- .../src/main/resources/log4j2.xml | 26 ----- bigfans-cloud-service-system/pom.xml | 8 +- bigfans-cloud-service-user/pom.xml | 8 +- bigfans-cloud-zipkin-server/pom.xml | 1 - .../sleuth/server/ZipkinServerApp.java | 2 - .../framework/dao/DistributeIDGenerator.java | 5 - .../bigfans/framework/utils/QiniuUtils.java | 31 ----- pom.xml | 63 +++++----- 44 files changed, 121 insertions(+), 936 deletions(-) delete mode 100644 bigfans-cloud-service-shipping/pom.xml delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/CORSConfiguration.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java delete mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java delete mode 100644 bigfans-cloud-service-shipping/src/main/resources/application.yml delete mode 100644 bigfans-cloud-service-shipping/src/main/resources/log4j2.xml diff --git a/.gitignore b/.gitignore index f335e1c..a8d15f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ # Created by .ignore support plugin (hsz.mobi) .idea/ -*.iml \ No newline at end of file +*.iml +target/ +out/ +*.log \ No newline at end of file diff --git a/bigfans-cloud-api-gateway/pom.xml b/bigfans-cloud-api-gateway/pom.xml index 61c1bd9..6224fc4 100644 --- a/bigfans-cloud-api-gateway/pom.xml +++ b/bigfans-cloud-api-gateway/pom.xml @@ -17,11 +17,11 @@ org.springframework.cloud - spring-cloud-starter-zuul + spring-cloud-starter-netflix-zuul org.springframework.cloud - spring-cloud-starter-eureka + spring-cloud-starter-netflix-eureka-client - - org.springframework.boot - spring-boot-starter-test - test - - - org.apache.kafka - kafka_2.12 - - - org.elasticsearch.client - transport - - - org.elasticsearch - elasticsearch - - - org.elasticsearch.plugin - transport-netty4-client - - - mysql - mysql-connector-java - - - com.alibaba - druid - - - bigfans-cloud - bigfans-cloud-base - 0.0.1-SNAPSHOT - - - org.neo4j.driver - neo4j-java-driver - - - com.qiniu - qiniu-java-sdk - - - net.coobird - thumbnailator - - - alidayu - alidayu - - - - - - \ No newline at end of file diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java deleted file mode 100644 index e1c21eb..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.bigfans.shippingservice; - -/** - * @author lichong - * @create 2018-03-25 上午8:05 - **/ -public class ShippingServiceApp { - - public static void main(String[] args) throws Exception{ - - } - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java deleted file mode 100644 index 1646e94..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.bigfans.shippingservice.api.clients; - -import com.bigfans.framework.utils.BeanUtils; -import com.bigfans.framework.web.RestResponse; -import com.bigfans.shippingservice.model.Order; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponents; -import org.springframework.web.util.UriComponentsBuilder; - -import java.util.Map; -import java.util.concurrent.CompletableFuture; - -/** - * @author lichong - * @create 2018-02-25 下午4:21 - **/ -@Component -public class OrderServiceClient { - - @Autowired - private RestTemplate restTemplate; - - public CompletableFuture getOrder(String orderId){ - return CompletableFuture.supplyAsync(() -> { - UriComponents builder = UriComponentsBuilder.fromUriString("http://order-service/orders/{id}").build().expand(orderId).encode(); - ResponseEntity responseEntity = restTemplate.getForEntity(builder.toUri(), RestResponse.class); - RestResponse restResponse = responseEntity.getBody(); - Map data = (Map) restResponse.getData(); - Order order = new Order(); - BeanUtils.mapToModel(data , order); - return order; - }); - } -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/CORSConfiguration.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/CORSConfiguration.java deleted file mode 100644 index d0eaaf6..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/CORSConfiguration.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.bigfans.shippingservice.config; - -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -public class CORSConfiguration { - - @Bean - public FilterRegistrationBean corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOrigin("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); - bean.setOrder(0); - return bean; - } - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java deleted file mode 100644 index f33dbac..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.bigfans.shippingservice.config; - -import com.alibaba.druid.pool.DruidDataSource; -import com.bigfans.framework.dao.DynamicDataSource; -import org.apache.ibatis.session.SqlSessionFactory; -import org.mybatis.spring.SqlSessionFactoryBean; -import org.mybatis.spring.SqlSessionTemplate; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.core.env.Environment; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.datasource.DataSourceTransactionManager; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.support.TransactionTemplate; - -import javax.sql.DataSource; - -@Configuration -public class DataSourceConfig implements EnvironmentAware { - - private static final String MYBATIS_MAPPER_LOCATION = "classpath:mybatis/mapper/*-Mapper.xml"; - private static final String MYBATIS_CONFIG_LOCATION = "classpath:mybatis/MybatisConfig.xml"; - - private Environment env; - - @Override - public void setEnvironment(Environment env) { - this.env = env; - } - - /** - * 主库配置 - */ - @Bean(name = "masterDataSource") - public DataSource createMasterDataSource() throws Exception { - DruidDataSource dataSource = new DruidDataSource(); - dataSource.setDriverClassName(env.getProperty("master.datasource.driverClassName")); - dataSource.setUrl(env.getProperty("master.datasource.url")); - dataSource.setUsername(env.getProperty("master.datasource.username")); - dataSource.setPassword(env.getProperty("master.datasource.password")); - dataSource.setTestWhileIdle(true); - return dataSource; - } - - /** - * 从库配置 - */ - @Bean(name = "clusterDataSource1") - public DataSource createCluster1DataSource() throws Exception { - DruidDataSource dataSource = new DruidDataSource(); - dataSource.setDriverClassName(env.getProperty("cluster1.datasource.driverClassName")); - dataSource.setUrl(env.getProperty("cluster1.datasource.url")); - dataSource.setUsername(env.getProperty("cluster1.datasource.username")); - dataSource.setPassword(env.getProperty("cluster1.datasource.password")); - dataSource.setTestWhileIdle(true); - return dataSource; - } - - @Bean(name = "dynamicDataSource") - @Primary - public DataSource createDynamicDataSource( - @Qualifier("masterDataSource") DataSource masterDataSource , - @Qualifier("clusterDataSource1") DataSource clusterDataSource1){ - DynamicDataSource dynamicDataSource = new DynamicDataSource(); - dynamicDataSource.putMaster(masterDataSource); - dynamicDataSource.putCluster(clusterDataSource1); - dynamicDataSource.setTargetDataSources(); - return dynamicDataSource; - } - - @Bean(name = "transactionManager") - public DataSourceTransactionManager createTransactionManager(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception { - return new DataSourceTransactionManager(dynamicDataSource); - } - - @Bean(name = "sqlSessionFactory") - public SqlSessionFactory masterSqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) - throws Exception { - final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); - sessionFactory.setDataSource(dynamicDataSource); - ResourcePatternResolver pathResolver = new PathMatchingResourcePatternResolver(); - sessionFactory.setConfigLocation(pathResolver.getResource(MYBATIS_CONFIG_LOCATION)); - sessionFactory.setMapperLocations(pathResolver.getResources(MYBATIS_MAPPER_LOCATION)); - return sessionFactory.getObject(); - } - - @Bean - public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){ - return new SqlSessionTemplate(sqlSessionFactory); - } - - @Bean - public JdbcTemplate jdbcTemplate(@Qualifier("dynamicDataSource") DataSource dynamicDataSource){ - return new JdbcTemplate(dynamicDataSource); - } - - @Bean - public TransactionTemplate transactionTemplate(@Qualifier("dynamicDataSource") DataSource dynamicDataSource){ - PlatformTransactionManager transactionManager = new DataSourceTransactionManager(dynamicDataSource); - TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); - return transactionTemplate; - } -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java deleted file mode 100644 index 5bd7141..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.bigfans.shippingservice.config; - -import com.bigfans.framework.event.ApplicationEventBus; -import com.bigfans.framework.event.EventRepository; -import com.bigfans.framework.event.JdbcEventRepository; -import com.bigfans.framework.event.SpringEventBus; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * @author lichong - * @create 2018-02-05 下午8:33 - **/ -@Configuration -public class EventBusConfig implements ApplicationContextAware{ - - private ApplicationContext applicationContext; - - @Bean - public EventRepository eventRepository(JdbcTemplate jdbcTemplate){ - return new JdbcEventRepository(jdbcTemplate); - } - - @Bean - public ApplicationEventBus eventBus(EventRepository eventRepository){ - return new SpringEventBus(applicationContext); - }; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java deleted file mode 100644 index 8f78ce0..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.bigfans.shippingservice.config; - -import com.bigfans.framework.kafka.KafkaConsumerTaskManager; -import com.bigfans.framework.kafka.KafkaFactory; -import com.bigfans.framework.kafka.KafkaTemplate; -import org.apache.kafka.clients.consumer.ConsumerConfig; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Properties; - -/** - * @author lichong - * @create 2018-02-04 上午10:46 - **/ -@Configuration -public class KafkaConfig { - - @Value("${kafka.servers}") - private String servers; - @Value("${kafka.groupId}") - private String groupId; - @Value("${kafka.clientId}") - private String clientId; - - @Bean - public KafkaFactory kafkaFactory(){ - - Properties producerProperties = new Properties(); - producerProperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, servers); - producerProperties.put(ProducerConfig.ACKS_CONFIG, "all"); - producerProperties.put(ProducerConfig.RETRIES_CONFIG, 0); - producerProperties.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384); - producerProperties.put(ProducerConfig.LINGER_MS_CONFIG, 1); - producerProperties.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432); - producerProperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); - producerProperties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); - - Properties consumerProperties = new Properties(); - consumerProperties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, servers); - consumerProperties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); - consumerProperties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); - consumerProperties.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); - consumerProperties.put(ConsumerConfig.CLIENT_ID_CONFIG, "simple"); - - KafkaFactory factory = new KafkaFactory(); - factory.setConsumerProperties(consumerProperties); - factory.setProducerProperties(producerProperties); - return factory; - } - - @Bean - public KafkaConsumerTaskManager kafkaConsumerManager(KafkaFactory kafkaFactory){ - return new KafkaConsumerTaskManager(kafkaFactory); - } - - @Bean - public KafkaTemplate kafkaTemplate(KafkaFactory kafkaFactory){ - return new KafkaTemplate(kafkaFactory); - } -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java deleted file mode 100644 index f881891..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.bigfans.shippingservice.config; - -import com.bigfans.framework.cache.CacheProvider; -import com.bigfans.framework.cache.RedisCacheProvider; -import com.bigfans.framework.redis.JedisTemplate; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author lichong - * @create 2018-03-21 下午9:21 - **/ -@Configuration -@RefreshScope -public class PluginConfig { - - @Value("${cache.type}") - private String cacheType; - @Value("${cache.dbindex}") - private Integer cacheDbIndex; - - @Bean - public CacheProvider cachePlugin(JedisTemplate jedisTemplate){ - CacheProvider cacheProvider = new RedisCacheProvider(jedisTemplate , cacheDbIndex); - return cacheProvider; - } -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java deleted file mode 100644 index 605dd65..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.bigfans.shippingservice.config; - -import com.bigfans.framework.redis.JedisConnectionFactory; -import com.bigfans.framework.redis.JedisTemplate; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class RedisTemplateConfig { - - @Value("${jedis.host}") - private String host; - @Value("${jedis.port}") - private Integer port; - @Value("${jedis.auth}") - private String auth; - @Value("${jedis.max_idle}") - private Integer max_idle; - @Value("${jedis.timeout}") - private Integer timeout; - @Value("${jedis.test_on_borrow}") - private Boolean test_on_borrow; - @Value("${jedis.default_db_index}") - private Integer default_db_index; - - @Bean(name = "jedisTemplate") - public JedisTemplate createTemplate() { - JedisConnectionFactory factory = new JedisConnectionFactory(); - factory.setHost(host); - factory.setPort(port); - factory.setAuth(auth); - factory.setMax_idle(max_idle); - factory.setTimeout(timeout); - factory.setTest_on_borrow(test_on_borrow); - factory.setDefaultDbIndex(default_db_index); - JedisTemplate jedisTemplate = new JedisTemplate(factory); - return jedisTemplate; - } - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java deleted file mode 100644 index 734bed9..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.bigfans.shippingservice.config; - -import org.springframework.cloud.client.loadbalancer.LoadBalanced; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.client.RestTemplate; - -/** - * @author lichong - * @create 2018-02-14 下午5:06 - **/ -@Configuration -public class RestTemplateConfig { - - @LoadBalanced - @Bean - public RestTemplate restTemplate(){ - return new RestTemplate(); - } - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java deleted file mode 100644 index 0659185..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.bigfans.shippingservice.config; - -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * @author lichong - * @create 2018-02-28 下午10:25 - **/ -@Configuration -public class WebConfig implements WebMvcConfigurer { - - @Bean - public FilterRegistrationBean corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOrigin("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); - bean.setOrder(0); - return bean; - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { -// registry.addInterceptor(new DefaultInterceptor()).addPathPatterns("/**"); -// registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login"); - } -} - - diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java deleted file mode 100644 index 176c14d..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.bigfans.shippingservice.dao; - -import com.bigfans.framework.dao.BaseDAO; -import com.bigfans.shippingservice.model.Delivery; - -/** - * - * @Description:配送DAO操作 - * @author lichong - * 2015年1月17日下午7:36:35 - * - */ -public interface DeliveryDAO extends BaseDAO { - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java deleted file mode 100644 index 02e2546..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.bigfans.shippingservice.dao.impl; - -import com.bigfans.framework.dao.MybatisDAOImpl; -import com.bigfans.shippingservice.dao.DeliveryDAO; -import com.bigfans.shippingservice.model.Delivery; -import org.springframework.stereotype.Repository; - - -/** - * - * @Description:配送DAO操作 - * @author lichong - * 2015年1月17日下午7:36:35 - * - */ -@Repository(DeliveryDAOImpl.BEAN_NAME) -public class DeliveryDAOImpl extends MybatisDAOImpl implements DeliveryDAO { - - public static final String BEAN_NAME = "deliveryDAO"; -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java deleted file mode 100644 index 850a62d..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.bigfans.shippingservice.listener; - -import com.bigfans.framework.kafka.KafkaConsumerBean; -import com.bigfans.framework.kafka.KafkaListener; -import com.bigfans.model.event.payment.OrderPaidEvent; -import com.bigfans.shippingservice.api.clients.OrderServiceClient; -import com.bigfans.shippingservice.model.Delivery; -import com.bigfans.shippingservice.model.Order; -import com.bigfans.shippingservice.service.DeliveryService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -@KafkaConsumerBean -public class OrderListener { - - @Autowired - private DeliveryService deliveryService; - @Autowired - private OrderServiceClient orderServiceClient; - - @KafkaListener - public void on(OrderPaidEvent event) { - try { - String orderId = event.getOrderId(); - Order order = orderServiceClient.getOrder(orderId).get(); - Delivery delivery = new Delivery(); - delivery.setAddress(order.getAddressDetail()); - delivery.setConsignee(order.getAddressConsignee()); - delivery.setEmail(order.getAddressEmail()); - delivery.setMobile(order.getAddressPhone()); - delivery.setUserId(order.getUserId()); - delivery.setOrderId(order.getId()); - delivery.setFreight(order.getFreight()); - deliveryService.create(delivery); - } catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java deleted file mode 100644 index 3722694..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.bigfans.shippingservice.model; - -import com.bigfans.shippingservice.model.entity.DeliveryEntity; - -/** - * - * @Description: 配送 - * @author lichong - * 2015年1月17日下午7:36:25 - * - */ -public class Delivery extends DeliveryEntity { - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java deleted file mode 100644 index 8241733..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.bigfans.shippingservice.model; - -import lombok.Data; - -import java.math.BigDecimal; -import java.util.Date; - -@Data -public class Order { - - protected String id; - protected Date createDate; - protected Date updateDate; - // 用户信息 - protected String userId; - // 支付信息 - protected String paymentId; - // 支付类型ID - protected String payMethodCode; - // 支付类型名称 - protected String payMethodName; - // 收货地址 - protected String addressId; - // 收货人 - protected String addressConsignee; - // 送货详细地址 - protected String addressDetail; - // 收货人电话 - protected String addressPhone; - // 收货人email - protected String addressEmail; - // 留言 - protected String note; - // 运费 - protected BigDecimal freight; - protected Integer prodTotalQuantity; - // 商品总价格 - protected BigDecimal prodTotalPrice; - // 总价格(计算完邮费和各种优惠后的应付款额) - protected BigDecimal totalPrice; -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java deleted file mode 100644 index 25e8ce5..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.bigfans.shippingservice.model.entity; - -import com.bigfans.framework.model.AbstractModel; -import lombok.Data; - -import javax.persistence.Column; -import javax.persistence.Table; -import java.math.BigDecimal; -import java.util.Date; - -/** - * - * @Description:配送实体 - * @author lichong 2014年12月14日下午4:48:01 - * - */ -@Data -@Table(name="Delivery") -public class DeliveryEntity extends AbstractModel { - private static final long serialVersionUID = 5625942998949303053L; - - public static final String STATUS_UNSENT = "preparing"; - public static final String STATUS_DELIVERING = "delivering"; - public static final String STATUS_SIGNED = "signed"; - - @Column(name="order_id") - protected String orderId; - @Column(name="user_id") - protected String userId; - @Column(name="address") - protected String address; - @Column(name="consignee") - protected String consignee; - @Column(name="postalcode") - protected String postalcode; - @Column(name="mobile") - protected String mobile; - @Column(name="tel") - protected String tel; - @Column(name="email") - protected String email; - @Column(name="complete_date",columnDefinition="DATETIME") - protected Date completeDate; - @Column(name="status") - protected String status = STATUS_UNSENT; - // 运费 - @Column(name="freight") - protected BigDecimal freight; - - public String getModule() { - return "Delivery"; - } - -} \ No newline at end of file diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java deleted file mode 100644 index 7013046..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.bigfans.shippingservice.service; - -import com.bigfans.framework.dao.BaseService; -import com.bigfans.shippingservice.model.Delivery; - - -/** - * - * @Description:配送服务接口 - * @author lichong - * 2014年12月16日上午10:14:08 - * - */ -public interface DeliveryService extends BaseService { - -} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java deleted file mode 100644 index aefb894..0000000 --- a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.bigfans.shippingservice.service.impl; - -import com.bigfans.framework.dao.BaseServiceImpl; -import com.bigfans.shippingservice.dao.DeliveryDAO; -import com.bigfans.shippingservice.model.Delivery; -import com.bigfans.shippingservice.service.DeliveryService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * - * @Description:配送服务类 - * @author lichong - * 2014年12月16日上午10:13:56 - * - */ -@Service(DeliveryServiceImpl.BEAN_NAME) -public class DeliveryServiceImpl extends BaseServiceImpl implements DeliveryService { - - public static final String BEAN_NAME = "deliveryService"; - - @Autowired - public DeliveryServiceImpl(DeliveryDAO deliveryDAO) { - super(deliveryDAO); - } -} diff --git a/bigfans-cloud-service-shipping/src/main/resources/application.yml b/bigfans-cloud-service-shipping/src/main/resources/application.yml deleted file mode 100644 index cd0eddc..0000000 --- a/bigfans-cloud-service-shipping/src/main/resources/application.yml +++ /dev/null @@ -1,58 +0,0 @@ -server: - port: 8805 -spring: - application: - name: shipping-service - datasource: - initialize: false -# zipkin: -# base-url: http://127.0.0.1:7002 -eureka: - instance: - instance-id: ${spring.application.name}:${server.port} - preferIpAddress: true - health-check-url-path: /application - status-page-url: http://${spring.cloud.client.hostname}:${server.port}/swagger-ui.html - client: - registerWithEureka: true - fetchRegistry: true - registry-fetch-interval-seconds: 20 - serviceUrl: - defaultZone: http://localhost:8761/eureka/ - eureka-server-connect-timeout-seconds: 5 - -## master -master: - datasource: - url: jdbc:mysql://127.0.0.1:3307/bigfans_shipping?autoReconnect=true&useUnicode=true&characterEncoding=utf8 - username: root - password: admin - driverClassName: com.mysql.jdbc.Driver - -## cluster -cluster1: - datasource: - url: jdbc:mysql://127.0.0.1:3307/bigfans_shipping?autoReconnect=true&useUnicode=true&characterEncoding=utf8 - username: root - password: admin - driverClassName: com.mysql.jdbc.Driver - -## kafka -kafka: - servers: 192.168.0.103:9092 - groupId: ${spring.application.name} - clientId: ${spring.application.name}-client - -## redis -#Redis服务器IP -jedis: - host: 127.0.0.1 -#Redis的端口号 - port: 6379 -#访问密码 - auth: -#控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值是8。 - max_idle: 10 - timeout: 1000 -#在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; - test_on_borrow: false \ No newline at end of file diff --git a/bigfans-cloud-service-shipping/src/main/resources/log4j2.xml b/bigfans-cloud-service-shipping/src/main/resources/log4j2.xml deleted file mode 100644 index db6917b..0000000 --- a/bigfans-cloud-service-shipping/src/main/resources/log4j2.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - %d %p %C{1.} [%t] %m%n - - - - - %d %p %C{1.} [%t] %m%n - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bigfans-cloud-service-system/pom.xml b/bigfans-cloud-service-system/pom.xml index 701c266..171cd2a 100644 --- a/bigfans-cloud-service-system/pom.xml +++ b/bigfans-cloud-service-system/pom.xml @@ -17,15 +17,19 @@ org.springframework.cloud - spring-cloud-starter-eureka + spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-actuator + + org.springframework.boot + spring-boot-starter-web + org.springframework.cloud - spring-cloud-starter-hystrix + spring-cloud-starter-netflix-hystrix \ No newline at end of file -- Gitee From 3de24231bc8bceb9c94525befca4418872585065 Mon Sep 17 00:00:00 2001 From: dafanshu <654789936@qq.com> Date: Sun, 5 Aug 2018 19:29:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E6=9B=B4=E6=96=B0=201.?= =?UTF-8?q?=20=E7=BD=91=E5=85=B3=E5=B1=82=E4=BB=8Ezuul=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E6=88=90springcloud=20gateway=202.=20=E4=BC=98=E5=8C=96sku?= =?UTF-8?q?=E7=AE=97=E6=B3=95=203.=20=E5=85=B6=E4=BB=96...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bigfans-cloud-api-gateway/pom.xml | 2 +- .../cloud/api/gateway/GatewayApplication.java | 2 - .../api/gateway/config/FiltersConfig.java | 21 -- .../gateway/config/ResourceServerConfig.java | 32 --- .../cloud/api/gateway/config/RouteConfig.java | 23 +++ .../api/gateway/config/SecurityConfig.java | 36 ---- .../api/gateway/filter/AccessFilter.java | 130 ++++++------ .../api/gateway/filter/ErrorHandleFilter.java | 43 ---- .../src/main/resources/application.yml | 177 +++++++++++----- .../src/main/resources/application_zuul.yml | 95 +++++++++ .../bigfans/catalogservice/api/SkuApi.java | 195 +++++------------- .../bigfans/catalogservice/dao/SkuDAO.java | 2 + .../catalogservice/dao/SpecOptionDAO.java | 3 + .../catalogservice/dao/SpecValueDAO.java | 2 +- .../catalogservice/dao/impl/SkuDAOImpl.java | 6 + .../dao/impl/SpecOptionDAOImpl.java | 7 + .../dao/impl/SpecValueDAOImpl.java | 2 +- .../com/bigfans/catalogservice/model/SKU.java | 33 ++- .../catalogservice/model/SkuResult.java | 3 +- .../catalogservice/model/SpecGroup.java | 22 -- .../catalogservice/model/vo/SpecGroupVO.java | 29 +++ .../catalogservice/model/vo/SpecOptionVO.java | 18 ++ .../catalogservice/model/vo/SpecValueVO.java | 22 ++ .../service/sku/SkuService.java | 2 + .../service/sku/SkuServiceImpl.java | 6 + .../service/spec/SpecOptionService.java | 2 + .../service/spec/SpecOptionServiceImpl.java | 5 + .../service/spec/SpecValueService.java | 2 +- .../service/spec/SpecValueServiceImpl.java | 4 +- .../resources/mybatis/mapper/Sku-Mapper.xml | 10 +- .../mybatis/mapper/SpecOption-Mapper.xml | 6 + .../mybatis/mapper/SpecValue-Mapper.xml | 2 +- bigfans-cloud-service-payment/pom.xml | 18 ++ .../paymentservice/api/PaymentApi.java | 3 - .../paymentservice/config/WebConfig.java | 2 +- .../config/WebSocketConfig.java | 19 -- .../api/mgr/CouponManageApi.java | 30 +++ bigfans-cloud-service-shipping/pom.xml | 96 +++++++++ .../shippingservice/ShippingServiceApp.java | 13 ++ .../api/clients/OrderServiceClient.java | 37 ++++ .../config/DataSourceConfig.java | 108 ++++++++++ .../config/EventBusConfig.java | 38 ++++ .../shippingservice/config/KafkaConfig.java | 63 ++++++ .../shippingservice/config/PluginConfig.java | 29 +++ .../config/RedisTemplateConfig.java | 41 ++++ .../config/RestTemplateConfig.java | 21 ++ .../shippingservice/config/WebConfig.java | 40 ++++ .../shippingservice/dao/DeliveryDAO.java | 15 ++ .../dao/impl/DeliveryDAOImpl.java | 20 ++ .../listener/OrderListener.java | 41 ++++ .../shippingservice/model/Delivery.java | 14 ++ .../bigfans/shippingservice/model/Order.java | 41 ++++ .../model/entity/DeliveryEntity.java | 54 +++++ .../service/DeliveryService.java | 16 ++ .../service/impl/DeliveryServiceImpl.java | 26 +++ .../src/main/resources/application.yml | 58 ++++++ .../src/main/resources/log4j2.xml | 26 +++ .../bigfans/userservice/api/WeChatApi.java | 22 ++ .../framework/lock/DistributedLock.java | 8 + .../lock/ZookeeperDistributedLock.java | 8 + pom.xml | 6 + 61 files changed, 1403 insertions(+), 454 deletions(-) delete mode 100644 bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/FiltersConfig.java delete mode 100644 bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/ResourceServerConfig.java create mode 100644 bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/RouteConfig.java delete mode 100644 bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/SecurityConfig.java delete mode 100644 bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/ErrorHandleFilter.java create mode 100644 bigfans-cloud-api-gateway/src/main/resources/application_zuul.yml delete mode 100644 bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SpecGroup.java create mode 100644 bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecGroupVO.java create mode 100644 bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecOptionVO.java create mode 100644 bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecValueVO.java delete mode 100644 bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebSocketConfig.java create mode 100644 bigfans-cloud-service-pricing/src/main/java/com/bigfans/pricingservice/api/mgr/CouponManageApi.java create mode 100644 bigfans-cloud-service-shipping/pom.xml create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java create mode 100644 bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java create mode 100644 bigfans-cloud-service-shipping/src/main/resources/application.yml create mode 100644 bigfans-cloud-service-shipping/src/main/resources/log4j2.xml create mode 100644 bigfans-cloud-service-user/src/main/java/com/bigfans/userservice/api/WeChatApi.java create mode 100644 bigfans-framework/src/main/java/com/bigfans/framework/lock/DistributedLock.java create mode 100644 bigfans-framework/src/main/java/com/bigfans/framework/lock/ZookeeperDistributedLock.java diff --git a/bigfans-cloud-api-gateway/pom.xml b/bigfans-cloud-api-gateway/pom.xml index 6224fc4..5f6b594 100644 --- a/bigfans-cloud-api-gateway/pom.xml +++ b/bigfans-cloud-api-gateway/pom.xml @@ -17,7 +17,7 @@ org.springframework.cloud - spring-cloud-starter-netflix-zuul + spring-cloud-starter-gateway org.springframework.cloud diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/GatewayApplication.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/GatewayApplication.java index 4518f07..fec019f 100644 --- a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/GatewayApplication.java +++ b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/GatewayApplication.java @@ -2,13 +2,11 @@ package org.bigfans.cloud.api.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.zuul.EnableZuulProxy; /** * Hello world! * */ -@EnableZuulProxy @SpringBootApplication public class GatewayApplication { diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/FiltersConfig.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/FiltersConfig.java deleted file mode 100644 index 0ee3cad..0000000 --- a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/FiltersConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bigfans.cloud.api.gateway.config; - -import org.bigfans.cloud.api.gateway.filter.AccessFilter; -import org.bigfans.cloud.api.gateway.filter.ErrorHandleFilter; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class FiltersConfig { - - @Bean - public AccessFilter accessFilter() { - return new AccessFilter(); - } - - @Bean - public ErrorHandleFilter errorHandleFilter(){ - return new ErrorHandleFilter(); - } - -} diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/ResourceServerConfig.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/ResourceServerConfig.java deleted file mode 100644 index aedc699..0000000 --- a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/ResourceServerConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -//package org.bigfans.cloud.api.gateway.config; -// -//import org.springframework.context.annotation.Configuration; -//import org.springframework.security.config.annotation.web.builders.HttpSecurity; -//import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; -//import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter; -//import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer; -// -////@EnableResourceServer -////@Configuration -//public class ResourceServerConfig extends ResourceServerConfigurerAdapter { -// -// @Override -// public void configure(ResourceServerSecurityConfigurer resources) throws Exception { -// super.configure(resources); -// } -// -// @Override -// public void configure(HttpSecurity http) throws Exception { -// http -// .authorizeRequests() -// .antMatchers("/user-service/**").hasAuthority("AUTHORITY_SUPER") -// .antMatchers("/addresse-service/**").hasAuthority("AUTHORITY_SUPER") -// .antMatchers("/point-service/**").hasAuthority("AUTHORITY_SUPER") -// .antMatchers("/itemservice-service/**").hasAuthority("AUTHORITY_SUPER") -// .antMatchers("/order-service/**").hasAuthority("AUTHORITY_SUPER") -// .antMatchers("/payment-service/**").hasAuthority("AUTHORITY_SUPER") -// .antMatchers("/deliveriy-service/**").hasAuthority("AUTHORITY_SUPER") -// .anyRequest().authenticated(); -// } -// -//} diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/RouteConfig.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/RouteConfig.java new file mode 100644 index 0000000..4103fa9 --- /dev/null +++ b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/RouteConfig.java @@ -0,0 +1,23 @@ +package org.bigfans.cloud.api.gateway.config; + +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author lichong + * @create 2018-07-29 下午7:46 + **/ +@Configuration +public class RouteConfig { + + public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { + return builder.routes() + .route(t -> t.path("/hello") + .and() + .uri("http://localhost:8080")) + .build(); + } + +} diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/SecurityConfig.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/SecurityConfig.java deleted file mode 100644 index 16f84d2..0000000 --- a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/config/SecurityConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -//package org.bigfans.cloud.api.gateway.config; -// -//import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -//import org.springframework.security.config.annotation.web.builders.HttpSecurity; -//import org.springframework.security.config.annotation.web.builders.WebSecurity; -//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -//import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter; -//import org.springframework.security.web.csrf.CsrfFilter; -// -//@Configuration -//@EnableOAuth2Sso -//public class SecurityConfig extends WebSecurityConfigurerAdapter{ -// -// @Override -// protected void configure(HttpSecurity http) throws Exception { -// http.authorizeRequests().antMatchers("/sso/**", "/login").permitAll().anyRequest().authenticated() -// .and() -// .csrf().disable() -// .logout().permitAll() -// .logoutSuccessUrl("/"); -// } -// -// @Override -// protected void configure(AuthenticationManagerBuilder auth) throws Exception { -// // TODO Auto-generated method stub -// super.configure(auth); -// } -// -// @Override -// public void configure(WebSecurity web) throws Exception { -// // TODO Auto-generated method stub -// super.configure(web); -// } -//} diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/AccessFilter.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/AccessFilter.java index 1e6711f..ebba3c2 100644 --- a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/AccessFilter.java +++ b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/AccessFilter.java @@ -2,53 +2,53 @@ package org.bigfans.cloud.api.gateway.filter; import com.bigfans.Constants; import com.bigfans.framework.CurrentUser; -import com.bigfans.framework.CurrentUserFactory; import com.bigfans.framework.utils.JsonUtils; import com.bigfans.framework.utils.JwtUtils; import com.bigfans.framework.utils.StringHelper; -import com.netflix.zuul.ZuulFilter; -import com.netflix.zuul.context.RequestContext; -import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.http.HttpCookie; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseCookie; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.Date; +import java.util.Map; +import java.util.UUID; /** - * 检查用户是否登录 - * * @author lichong - */ -public class AccessFilter extends ZuulFilter { + * @create 2018-07-31 下午9:53 + **/ +@Component +public class AccessFilter implements GlobalFilter, Ordered { @Override - public boolean shouldFilter() { - RequestContext ctx = RequestContext.getCurrentContext(); - String method = ctx.getRequest().getMethod(); - String url = (String) ctx.get(FilterConstants.REQUEST_URI_KEY); - String serviceId = (String) ctx.get(FilterConstants.PROXY_KEY); - return !"options".equalsIgnoreCase(method.toLowerCase()) && !url.equals("/login"); - } - - @Override - public Object run() { - RequestContext ctx = RequestContext.getCurrentContext(); - HttpServletRequest request = ctx.getRequest(); - String authorization = request.getHeader(Constants.OAUTH.HEADER_KEY_NAME); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + ServerHttpResponse response = exchange.getResponse(); + HttpMethod method = request.getMethod(); + String path = request.getPath().value(); + if(path.contains("/login")){ + return chain.filter(exchange); + } + String authorization = this.extractAuthorization(request.getHeaders()); String token = ""; boolean hasAuth = false; + Map cookies = request.getCookies().toSingleValueMap(); if (authorization == null) { - Cookie[] cookies = request.getCookies(); if (cookies != null) { - for (Cookie cookie : cookies) { - if (cookie.getName().equals(Constants.TOKEN.TMP_COOKIE_NAME)) { - String tmpToken = cookie.getValue(); - if (tmpToken != null) { - hasAuth = true; - token = tmpToken; - } - } + String tmpToken = this.extraTempToken(cookies); + if (tmpToken != null) { + hasAuth = true; + token = tmpToken; } } } else { @@ -58,56 +58,52 @@ public class AccessFilter extends ZuulFilter { token = authorization.substring(7, authorization.length()); if (StringHelper.isNotEmpty(token)) { hasAuth = true; - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if (cookie.getName().equals(Constants.TOKEN.TMP_COOKIE_NAME)) { - cookie.setMaxAge(0); - cookie.setPath("/"); - } - } - } + cookies.remove(Constants.TOKEN.TMP_COOKIE_NAME); } } } } if (!hasAuth) { - token = this.createTempToken(request, ctx.getResponse()); - Cookie cookie = new Cookie(Constants.TOKEN.TMP_COOKIE_NAME, token); - cookie.setHttpOnly(false); - // 如果不设置路径,只有当前路径和自路径可以访问,访问其他地址时候cookie不会被传递到服务端 - cookie.setPath("/"); - cookie.setDomain("localhost"); - // 设置7天内有效 - cookie.setMaxAge(60 * 60 * 24 * 7); - // 浏览器退出时清空cookie - // cookie.setMaxAge(-1); - ctx.getResponse().addCookie(cookie); + token = this.createTempToken(UUID.randomUUID().toString()); + ResponseCookie responseCookie = ResponseCookie + .from(Constants.TOKEN.TMP_COOKIE_NAME, token) + .maxAge(60 * 60 * 24 * 7) + .domain("localhost") + .path("/") + .httpOnly(false) + .build(); + response.addCookie(responseCookie); } - ctx.addZuulRequestHeader(Constants.TOKEN.HEADER_KEY_NAME, token); - return null; + ServerHttpRequest requestWithToken = exchange.getRequest().mutate() + .header(Constants.TOKEN.HEADER_KEY_NAME, token) + .build(); + return chain.filter(exchange.mutate().request(requestWithToken).build()); + } + + + + protected String extractAuthorization(HttpHeaders headers){ + return headers.get(Constants.OAUTH.HEADER_KEY_NAME) == null ? null : headers.get(Constants.OAUTH.HEADER_KEY_NAME).get(0); } - protected String createTempToken(HttpServletRequest request, HttpServletResponse response) { + protected String extraTempToken(Map cookies){ + return cookies.get(Constants.TOKEN.TMP_COOKIE_NAME) == null ? null : cookies.get(Constants.TOKEN.TMP_COOKIE_NAME).getValue(); + } + + @Override + public int getOrder() { + return 0; + } + + protected String createTempToken(String uid) { CurrentUser currentUser = new CurrentUser(); currentUser.setAccount("tempUser"); currentUser.setLoginTime(new Date()); currentUser.setPeriod(60 * 60 * 24 * 7); currentUser.setType(CurrentUser.TYPE.TMP_USER); - currentUser.setUid(request.getSession().getId()); + currentUser.setUid(uid); // 创建临时的token作为用户唯一凭证 String tempToken = JwtUtils.create(JsonUtils.toJsonString(currentUser), Constants.TOKEN.JWT_SECURITY_KEY); return tempToken; } - - @Override - public String filterType() { - return FilterConstants.ROUTE_TYPE; - } - - @Override - public int filterOrder() { - return 0; - } - } diff --git a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/ErrorHandleFilter.java b/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/ErrorHandleFilter.java deleted file mode 100644 index 20020f1..0000000 --- a/bigfans-cloud-api-gateway/src/main/java/org/bigfans/cloud/api/gateway/filter/ErrorHandleFilter.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bigfans.cloud.api.gateway.filter; - -import com.netflix.zuul.ZuulFilter; -import com.netflix.zuul.context.RequestContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; - -import javax.servlet.http.HttpServletResponse; - -/** - * @author lichong - * @create 2018-04-25 下午9:39 - **/ -public class ErrorHandleFilter extends ZuulFilter { - - private Logger logger = LoggerFactory.getLogger(ErrorHandleFilter.class); - - @Override - public String filterType() { - return FilterConstants.ERROR_TYPE; - } - - @Override - public int filterOrder() { - return 0; - } - - @Override - public boolean shouldFilter() { - return true; - } - - @Override - public Object run() { - RequestContext ctx = RequestContext.getCurrentContext(); - Throwable throwable = ctx.getThrowable(); - logger.error("this is a ErrorFilter :" + throwable.getCause().getMessage(), throwable); - ctx.set("error.status_code", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - ctx.set("error.exception", throwable.getCause()); - return null; - } -} diff --git a/bigfans-cloud-api-gateway/src/main/resources/application.yml b/bigfans-cloud-api-gateway/src/main/resources/application.yml index 5cd6b5f..baeccd4 100644 --- a/bigfans-cloud-api-gateway/src/main/resources/application.yml +++ b/bigfans-cloud-api-gateway/src/main/resources/application.yml @@ -3,6 +3,77 @@ server: spring: application: name: bigfans-api-gateway + cloud: + gateway: + discovery: + locator: true + routes: + - id: catalog-service + uri: lb://catalog-service + predicates: + - Path=/api/catalog-service/** + filters: + - StripPrefix=2 + - id: cart-service + uri: lb://cart-service + predicates: + - Path=/api/cart-service/** + filters: + - StripPrefix=2 + - id: order-service + uri: lb://order-service + predicates: + - Path=/api/order-service/** + filters: + - StripPrefix=2 + - id: payment-service + uri: lb://payment-service + predicates: + - Path= /api/payment-service/** + filters: + - StripPrefix=2 + - id: notification-service + uri: lb://notification-service + predicates: + - Path=/api/notification-service/** + filters: + - StripPrefix=2 + - id: pricing-service + uri: lb://pricing-service + predicates: + - Path=/api/pricing-service/** + filters: + - StripPrefix=2 + - id: review-service + uri: lb://review-service + predicates: + - Path=/api/review-service/** + filters: + - StripPrefix=2 + - id: search-service + uri: lb://search-service + predicates: + - Path=/api/search-service/** + filters: + - StripPrefix=2 + - id: shipping-service + uri: lb://shipping-service + predicates: + - Path=/api/shipping-service/** + filters: + - StripPrefix=2 + - id: user-service + uri: lb://user-service + predicates: + - Path=/api/user-service/** + filters: + - StripPrefix=2 + - id: system-service + uri: lb://system-service + predicates: + - Path=/api/system-service/** + filters: + - StripPrefix=2 eureka: client: registerWithEureka: true #是否注册到服务中心 @@ -11,59 +82,59 @@ eureka: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true -zuul: - max: - host: - connections: 500 - host: - socket-timeout-millis: 60000 - connect-timeout-millis: 60000 - prefix: /api #前缀, 这样请求url需要为/api/core-service才会匹配到/core-service - routes: - catalog-service: - path: /catalog-service/** - service-id: catalog-service - sensitiveHeaders: Cookie,Set-Cookie - cart-service: - path: /cart-service/** - service-id: cart-service - sensitiveHeaders: Cookie,Set-Cookie - order-service: - path: /order-service/** - service-id: order-service - sensitiveHeaders: Cookie,Set-Cookie - payment-service: - path: /payment-service/** - service-id: payment-service - sensitiveHeaders: Cookie,Set-Cookie - notification-service: - path: /notification-service/** - service-id: notification-service - sensitiveHeaders: Cookie,Set-Cookie - pricing-service: - path: /pricing-service/** - service-id: pricing-service - sensitiveHeaders: Cookie,Set-Cookie - review-service: - path: /review-service/** - service-id: review-service - sensitiveHeaders: Cookie,Set-Cookie - search-service: - path: /search-service/** - service-id: search-service - sensitiveHeaders: Cookie,Set-Cookie - shipping-service: - path: /shipping-service/** - service-id: shipping-service - sensitiveHeaders: Cookie,Set-Cookie - user-service: - path: /user-service/** - service-id: user-service - sensitiveHeaders: Cookie,Set-Cookie - system-service: - path: /system-service/** - service-id: system-service - sensitiveHeaders: Cookie,Set-Cookie +#zuul: +# max: +# host: +# connections: 500 +# host: +# socket-timeout-millis: 60000 +# connect-timeout-millis: 60000 +# prefix: /api #前缀, 这样请求url需要为/api/core-service才会匹配到/core-service +# routes: +# catalog-service: +# path: /catalog-service/** +# service-id: catalog-service +# sensitiveHeaders: Cookie,Set-Cookie +# cart-service: +# path: /cart-service/** +# service-id: cart-service +# sensitiveHeaders: Cookie,Set-Cookie +# order-service: +# path: /order-service/** +# service-id: order-service +# sensitiveHeaders: Cookie,Set-Cookie +# payment-service: +# path: /payment-service/** +# service-id: payment-service +# sensitiveHeaders: Cookie,Set-Cookie +# notification-service: +# path: /notification-service/** +# service-id: notification-service +# sensitiveHeaders: Cookie,Set-Cookie +# pricing-service: +# path: /pricing-service/** +# service-id: pricing-service +# sensitiveHeaders: Cookie,Set-Cookie +# review-service: +# path: /review-service/** +# service-id: review-service +# sensitiveHeaders: Cookie,Set-Cookie +# search-service: +# path: /search-service/** +# service-id: search-service +# sensitiveHeaders: Cookie,Set-Cookie +# shipping-service: +# path: /shipping-service/** +# service-id: shipping-service +# sensitiveHeaders: Cookie,Set-Cookie +# user-service: +# path: /user-service/** +# service-id: user-service +# sensitiveHeaders: Cookie,Set-Cookie +# system-service: +# path: /system-service/** +# service-id: system-service +# sensitiveHeaders: Cookie,Set-Cookie #security: # basic: # enabled: false diff --git a/bigfans-cloud-api-gateway/src/main/resources/application_zuul.yml b/bigfans-cloud-api-gateway/src/main/resources/application_zuul.yml new file mode 100644 index 0000000..5cd6b5f --- /dev/null +++ b/bigfans-cloud-api-gateway/src/main/resources/application_zuul.yml @@ -0,0 +1,95 @@ +server: + port: 8080 +spring: + application: + name: bigfans-api-gateway +eureka: + client: + registerWithEureka: true #是否注册到服务中心 + fetchRegistry: true #是否拉取服务注册信息 + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + instance: + prefer-ip-address: true +zuul: + max: + host: + connections: 500 + host: + socket-timeout-millis: 60000 + connect-timeout-millis: 60000 + prefix: /api #前缀, 这样请求url需要为/api/core-service才会匹配到/core-service + routes: + catalog-service: + path: /catalog-service/** + service-id: catalog-service + sensitiveHeaders: Cookie,Set-Cookie + cart-service: + path: /cart-service/** + service-id: cart-service + sensitiveHeaders: Cookie,Set-Cookie + order-service: + path: /order-service/** + service-id: order-service + sensitiveHeaders: Cookie,Set-Cookie + payment-service: + path: /payment-service/** + service-id: payment-service + sensitiveHeaders: Cookie,Set-Cookie + notification-service: + path: /notification-service/** + service-id: notification-service + sensitiveHeaders: Cookie,Set-Cookie + pricing-service: + path: /pricing-service/** + service-id: pricing-service + sensitiveHeaders: Cookie,Set-Cookie + review-service: + path: /review-service/** + service-id: review-service + sensitiveHeaders: Cookie,Set-Cookie + search-service: + path: /search-service/** + service-id: search-service + sensitiveHeaders: Cookie,Set-Cookie + shipping-service: + path: /shipping-service/** + service-id: shipping-service + sensitiveHeaders: Cookie,Set-Cookie + user-service: + path: /user-service/** + service-id: user-service + sensitiveHeaders: Cookie,Set-Cookie + system-service: + path: /system-service/** + service-id: system-service + sensitiveHeaders: Cookie,Set-Cookie +#security: +# basic: +# enabled: false +# ignored: +# - /sso/oauth/token/** +# oauth2: +# client: +# clientId: bigfans +# clientSecret: bigfans +# accessTokenUri: http://localhost:8010/sso/oauth/token # 通过authentication_code获取token的地址 +# userAuthorizationUri: http://localhost:8010/sso/oauth/authorize #用于返回authentication_code的地址 +# resource: +# #userInfoUri: http://localhost:8010/sso/me +# token-info-uri: http://localhost:8010/sso/oauth/check_token +#logging: +# level: +# com.netflix : debug +hystrix: + command: + default: + execution: + timeout: + enabled: true + isolation: + thread: + timeoutInMilliseconds: 60000 +ribbon: + ReadTimeout: 60000 + ConnectTimeout: 60000 diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/api/SkuApi.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/api/SkuApi.java index 7980779..592e723 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/api/SkuApi.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/api/SkuApi.java @@ -1,15 +1,17 @@ package com.bigfans.catalogservice.api; import com.bigfans.catalogservice.model.*; +import com.bigfans.catalogservice.model.entity.SpecOptionEntity; +import com.bigfans.catalogservice.model.vo.SpecGroupVO; +import com.bigfans.catalogservice.model.vo.SpecOptionVO; +import com.bigfans.catalogservice.model.vo.SpecValueVO; import com.bigfans.catalogservice.service.product.ProductService; import com.bigfans.catalogservice.service.sku.SkuService; -import com.bigfans.catalogservice.service.sku.StockLogService; import com.bigfans.catalogservice.service.sku.StockService; import com.bigfans.catalogservice.service.spec.SpecOptionService; import com.bigfans.catalogservice.service.spec.SpecService; import com.bigfans.catalogservice.service.spec.SpecValueService; -import com.bigfans.framework.Applications; -import com.bigfans.framework.CurrentUser; +import com.bigfans.framework.utils.CollectionUtils; import com.bigfans.framework.web.RestResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -38,162 +40,69 @@ public class SkuApi { @Autowired private StockService stockService; - @GetMapping("/sku/{prodId}") public RestResponse getSku(@PathVariable(value = "prodId") String prodId) throws Exception { - SkuResult result = new SkuResult(); - SKU selectedSku = skuService.getByPid(prodId); - if (selectedSku == null) { - return RestResponse.ok(); - } - List skuList = skuService.listByPgId(selectedSku.getPgId()); - if (skuList == null) { + // 1. 获取当前商品组下所有sku + List skuList = skuService.listByProdId(prodId); + if(CollectionUtils.isEmpty(skuList)){ return RestResponse.ok(); } - Map skuMap = skuList.stream().collect(Collectors.toMap(SKU::getSkuKey , Function.identity())); - // 1. 保存所有的sku字符串 - Set pgSkuVals = new HashSet<>(); - Map> optValsMap = new HashMap<>(); - for (SKU sku : skuList) { - Map optValMap = sku.getSkuMap(); - pgSkuVals.add(sku.getValKey()); - for (Map.Entry entry : optValMap.entrySet()) { - if (optValsMap.containsKey(entry.getKey())) { - optValsMap.get(entry.getKey()).add(entry.getValue()); + SKU selectedSku = skuList.stream().filter(sku -> prodId.equals(sku.getProdId())).findFirst().get(); + // 保存每个选项下面的所有可选值 + Map> allOptValMaps = new HashMap<>(); + List optionIdList = new ArrayList<>(); + List valueIdList = new ArrayList<>(); + skuList.forEach((sku) -> { + Map skuMap = sku.getSkuMap(); + for (Map.Entry entry : skuMap.entrySet()) { + if (allOptValMaps.containsKey(entry.getKey())) { + allOptValMaps.get(entry.getKey()).add(entry.getValue()); } else { Set vals = new HashSet<>(); vals.add(entry.getValue()); - optValsMap.put(entry.getKey(), vals); + allOptValMaps.put(entry.getKey(), vals); + optionIdList.add(entry.getKey()); } + optionIdList.add(entry.getValue()); } - } - // 2. 根据当前选中的sku属性,确定出所有可选的sku组合 - Set combinedValKeys = new HashSet<>(); - Map selectedSkuMap = selectedSku.getSkuMap(); - for (Map.Entry entry : selectedSkuMap.entrySet()) { + }); - // 取出当前pg中所有商品中的sku属性,和当前选中商品属性依次组合,产生可选的商品sku组合 - List> skus = new ArrayList<>(); - for (Map.Entry interEntry : selectedSkuMap.entrySet()) { - if (entry.getKey().equals(interEntry.getKey())) { - skus.add(new ArrayList<>(optValsMap.get(interEntry.getKey()))); - continue; - } - // 保证sku的顺序 - List clonedKey = new ArrayList<>(); - clonedKey.add(interEntry.getValue()); - skus.add(clonedKey); - } + List specOptionList = specOptionService.listByIdList(optionIdList); + List specValueList = specValueService.listByIdList(valueIdList); + Map specOptionNameMap = specOptionList.stream().collect(Collectors.toMap(SpecOption::getId , SpecOption::getName)); + Map specValueNameMap = specValueList.stream().collect(Collectors.toMap(SpecValue::getId , SpecValue::getValue)); - combinedValKeys.addAll(this.combine(skus)); - } - - // 3. 确定可以disable的valId - List valToDisable = new ArrayList<>(); - List valToEnable = new ArrayList<>(); - List outOfStock = new ArrayList<>(); - for (String valKey : combinedValKeys) { - boolean disable = false; - boolean oos = false; - if (pgSkuVals.contains(valKey)) { - Stock stock = stockService.getBySkuValKey(valKey); - // 如果没有库存,添加到不可选列表 - if (stock == null || stock.getRest() <= 0) { - oos = true; - } - } else { - disable = true; - } - String[] optValPairs = valKey.split(";"); - for (String optValPair : optValPairs) { - if (disable) { - valToDisable.add(optValPair); - } else if (oos) { - outOfStock.add(optValPair); + // 根据当前选中的商品计算出所有可选sku组合 + Map selectedSkuMap = selectedSku.getSkuMap(); + List groupVOList = new ArrayList<>(); + for(Map.Entry entry : selectedSkuMap.entrySet()){ + String selectedOpt = entry.getKey(); + String selectedVal = entry.getValue(); + SpecGroupVO group = new SpecGroupVO(); + group.setOption(specOptionNameMap.get(selectedOpt)); + + Set allValues = allOptValMaps.get(selectedOpt); + for (String val : allValues) { + Map currentSkuMap = new HashMap<>(selectedSkuMap); + currentSkuMap.put(selectedOpt , val); + SKU availableSku = skuList.stream().filter((item) -> item.skuMapEquals(currentSkuMap)).findFirst().orElse(null); + SpecValueVO valueVO = new SpecValueVO(); + valueVO.setValue(specValueNameMap.get(val)); + valueVO.setSelected(val.equals(selectedVal)); + if(availableSku != null){ + valueVO.setSelectable(true); + valueVO.setOutOfStock(availableSku.outOfStock()); + valueVO.setProdId(availableSku.getProdId()); } else { - valToEnable.add(optValPair); - } - } - } - // 4. 确定最终的不可选valId - Set disabledValIdList = new HashSet<>(); - Set outOfStockList = new HashSet<>(); - // 4.1 不可点的valId - for (String valD : valToDisable) { - if (valToEnable.contains(valD)) { - continue; - } - disabledValIdList.add(valD); - } - - // 4.2 缺货的valId - for (String valD : outOfStock) { - if (valToEnable.contains(valD)) { - continue; - } - outOfStockList.add(valD); - } - - // 5. 创建返回结果 - List specGroups = new ArrayList<>(); - for (Map.Entry> entry : optValsMap.entrySet()) { - String optId = entry.getKey(); - Set valIds = entry.getValue(); - SpecOption specOption = specOptionService.load(optId); - List productSpecs = new ArrayList<>(); - for (String valId : valIds) { - List selectedVals = selectedSku.getValIdList(); - - boolean selectable = true; - boolean selected = false; - boolean oos = false; - if (disabledValIdList.contains(valId)) { - selectable = false; + valueVO.setSelectable(false); } - if(outOfStockList.contains(valId)){ - oos = true; - } - if (selectedVals.contains(valId)) { - selected = true; - } - - Map currentSkuMap = new HashMap<>(selectedSku.getSkuMap()); - currentSkuMap.put(optId , valId); - StringBuilder skuKey = new StringBuilder(32); - for(Map.Entry currentSkuEntry : currentSkuMap.entrySet()){ - skuKey.append(currentSkuEntry.getKey()); - skuKey.append(SKU.SKU_SEPARATOR); - skuKey.append(currentSkuEntry.getValue()); - skuKey.append(SKU.KEYS_SEPARATOR); - } - skuKey.deleteCharAt(skuKey.length()-1); - skuKey.trimToSize(); - SKU currentSku = skuMap.get(skuKey.toString()); - SpecValue specValue = specValueService.load(valId); - ProductSpec productSpec = new ProductSpec(); - if(currentSku != null){ - productSpec.setProdId(currentSku.getProdId()); - } - productSpec.setOptionId(optId); - productSpec.setOption(specOption.getName()); - productSpec.setValueId(specValue.getId()); - productSpec.setValue(specValue.getValue()); - productSpec.setOutOfStock(oos); - productSpec.setSelectable(selectable); - productSpec.setSelected(selected); - productSpecs.add(productSpec); + group.addValue(valueVO); } - SpecGroup group = new SpecGroup(); - group.setOption(specOption); - group.setValues(productSpecs); - specGroups.add(group); + groupVOList.add(group); } - result.setDisabledValIdList(disabledValIdList); - result.setSelectedSku(selectedSku); - result.setSkuMap(optValsMap); - result.setSpecGroups(specGroups); - + SkuResult result = new SkuResult(); + result.setSpecGroups(groupVOList); return RestResponse.ok(result); } diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SkuDAO.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SkuDAO.java index 63e03b5..ef6ccc2 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SkuDAO.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SkuDAO.java @@ -15,6 +15,8 @@ public interface SkuDAO extends BaseDAO { List listByPgId(String pgId); + List listByProdId(String prodId); + SKU getByValKey(String valKey); SKU getByPid(String prodId); diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecOptionDAO.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecOptionDAO.java index e4bd3ed..803a385 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecOptionDAO.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecOptionDAO.java @@ -42,6 +42,9 @@ public interface SpecOptionDAO extends BaseDAO{ */ List listByPid(String pid, Long start, Long pagesize); + + List listByIdList(List idList); + /** * 查询商品下的所有的规格项 * @param pid diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecValueDAO.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecValueDAO.java index 6a5ffe0..ef2ba18 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecValueDAO.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/SpecValueDAO.java @@ -14,7 +14,7 @@ import java.util.List; */ public interface SpecValueDAO extends BaseDAO{ - List listById(String[] idList); + List listByIdList(List idList); List listByOptionId(String optionId); diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SkuDAOImpl.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SkuDAOImpl.java index 40f0c4c..a913691 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SkuDAOImpl.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SkuDAOImpl.java @@ -32,6 +32,12 @@ public class SkuDAOImpl extends MybatisDAOImpl implements SkuDAO { return getSqlSession().selectList(className +".list", params); } + public List listByProdId(String prodId) { + ParameterMap params = new ParameterMap(); + params.put("prodId", prodId); + return getSqlSession().selectList(className +".list", params); + } + @Override @Cacheable public SKU getByValKey(String valKey) { diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecOptionDAOImpl.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecOptionDAOImpl.java index 8485e6d..88e42d4 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecOptionDAOImpl.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecOptionDAOImpl.java @@ -49,6 +49,13 @@ public class SpecOptionDAOImpl extends MybatisDAOImpl implements Spe return getSqlSession().selectList(className + ".list", params); } + @Override + public List listByIdList(List idList) { + ParameterMap params = new ParameterMap(); + params.put("idList", idList); + return getSqlSession().selectList(className + ".list", params); + } + @Override public List list(String catId, String pgId, String pid, Long start, Long pagesize) { ParameterMap params = new ParameterMap(start , pagesize); diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecValueDAOImpl.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecValueDAOImpl.java index 6920baa..5831a1e 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecValueDAOImpl.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/dao/impl/SpecValueDAOImpl.java @@ -21,7 +21,7 @@ public class SpecValueDAOImpl extends MybatisDAOImpl implements SpecV public static final String BEAN_NAME = "specValueDAO"; @Override - public List listById(String[] idList) { + public List listByIdList(List idList) { ParameterMap params = new ParameterMap(); params.put("idList", idList); return getSqlSession().selectList(className + ".list", params); diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SKU.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SKU.java index 5b75ddc..4695fa8 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SKU.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SKU.java @@ -21,7 +21,8 @@ public class SKU extends SKUEntity { public static final String KEYS_SEPARATOR = ";"; public static final String SKU_SEPARATOR = ":"; - + + private Integer stock; private Map skuMap; private List optIdList; private List valIdList; @@ -32,6 +33,24 @@ public class SKU extends SKUEntity { } return skuMap.get(optId); } + + public boolean skuMapEquals(Map targetMap){ + if(this.skuMap == null){ + this.parseSkuMap(); + } + boolean eq = false; + if(targetMap.size() != this.skuMap.size()){ + return eq; + } + eq = true; + for (Map.Entry entry: this.skuMap.entrySet()) { + if(!targetMap.get(entry.getKey()).equals(entry.getValue())){ + eq = false; + break; + } + } + return eq; + } public void parseSkuMap(){ if(skuMap != null){ @@ -68,4 +87,16 @@ public class SKU extends SKUEntity { parseSkuMap(); return valIdList; } + + public Integer getStock() { + return stock; + } + + public void setStock(Integer stock) { + this.stock = stock; + } + + public boolean outOfStock(){ + return this.stock == null || this.stock == 0; + } } diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SkuResult.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SkuResult.java index 669bad9..e7f04c7 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SkuResult.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SkuResult.java @@ -1,5 +1,6 @@ package com.bigfans.catalogservice.model; +import com.bigfans.catalogservice.model.vo.SpecGroupVO; import com.bigfans.framework.utils.CollectionUtils; import lombok.Data; @@ -22,7 +23,7 @@ public class SkuResult implements Serializable { private Map> skuMap; private SKU selectedSku; private Set disabledValIdList; - private List specGroups; + private List specGroups; public Boolean getHasSku() { return CollectionUtils.isNotEmpty(skuMap); diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SpecGroup.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SpecGroup.java deleted file mode 100644 index 4f23e53..0000000 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/SpecGroup.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.bigfans.catalogservice.model; - -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** - * 商品规格组,封装商品规格项->规格值 - * - * @author lichong - * - */ -@Data -public class SpecGroup implements Serializable{ - - private static final long serialVersionUID = 7399149219218538867L; - - private SpecOption option; - private List values; - -} diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecGroupVO.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecGroupVO.java new file mode 100644 index 0000000..941d717 --- /dev/null +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecGroupVO.java @@ -0,0 +1,29 @@ +package com.bigfans.catalogservice.model.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 商品规格组,封装商品规格项->规格值 + * + * @author lichong + * + */ +@Data +public class SpecGroupVO implements Serializable{ + + private static final long serialVersionUID = 7399149219218538867L; + + protected String option; + protected List values; + + public void addValue(SpecValueVO valueVO){ + if(this.values == null){ + this.values = new ArrayList<>(); + } + this.values.add(valueVO); + } +} diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecOptionVO.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecOptionVO.java new file mode 100644 index 0000000..572b311 --- /dev/null +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecOptionVO.java @@ -0,0 +1,18 @@ +package com.bigfans.catalogservice.model.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author lichong + * @create 2018-07-28 下午1:32 + **/ +@Data +public class SpecOptionVO implements Serializable { + + private static final long serialVersionUID = 1; + + private String id; + private String name; +} diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecValueVO.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecValueVO.java new file mode 100644 index 0000000..ece8a1e --- /dev/null +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/model/vo/SpecValueVO.java @@ -0,0 +1,22 @@ +package com.bigfans.catalogservice.model.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author lichong + * @create 2018-07-28 下午1:33 + **/ +@Data +public class SpecValueVO implements Serializable { + + private static final long serialVersionUID = 1; + + protected Boolean selected; + protected Boolean selectable; + protected Boolean outOfStock; + protected String value; + protected String prodId; + +} diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuService.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuService.java index 618a171..efbfe3f 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuService.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuService.java @@ -18,5 +18,7 @@ public interface SkuService extends BaseService { SKU getByValKey(String valKey) throws Exception; List listByPgId(String pgId) throws Exception; + + List listByProdId(String prodId) throws Exception; } diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuServiceImpl.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuServiceImpl.java index b74d1f2..5f8aad6 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuServiceImpl.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/sku/SkuServiceImpl.java @@ -69,6 +69,12 @@ public class SkuServiceImpl extends BaseServiceImpl implements SkuService { return skudao.listByPgId(pgId); } + @Override + @Transactional(readOnly = true) + public List listByProdId(String prodId) throws Exception { + return skudao.listByProdId(prodId); + } + @Override @Transactional(readOnly = true) public SKU getByValKey(String valKey) throws Exception { diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionService.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionService.java index 2b32324..26ffc1d 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionService.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionService.java @@ -39,5 +39,7 @@ public interface SpecOptionService extends BaseService { List listByCatId(String catId, Long start , Long pagesize) throws Exception; List list(String catId , String pgId ,String pid , Long start , Long pagesize) throws Exception; + + List listByIdList(List idList) throws Exception; } diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionServiceImpl.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionServiceImpl.java index b802cf8..38872b3 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionServiceImpl.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecOptionServiceImpl.java @@ -103,4 +103,9 @@ public class SpecOptionServiceImpl extends BaseServiceImpl implement return specOptionDAO.list(catId , pgId ,pid , start , pagesize); } + @Override + public List listByIdList(List idList) throws Exception { + return specOptionDAO.listByIdList(idList); + } + } diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueService.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueService.java index f72a068..fad4933 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueService.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueService.java @@ -14,7 +14,7 @@ import java.util.List; */ public interface SpecValueService extends BaseService { - List listById(String[] ids) throws Exception; + List listByIdList(List idList) throws Exception; List listByOptionId(String optionId) throws Exception; diff --git a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueServiceImpl.java b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueServiceImpl.java index 6676be4..4f33bcb 100644 --- a/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueServiceImpl.java +++ b/bigfans-cloud-service-catalog/src/main/java/com/bigfans/catalogservice/service/spec/SpecValueServiceImpl.java @@ -33,8 +33,8 @@ public class SpecValueServiceImpl extends BaseServiceImpl implements @Override @Cacheable @Transactional(readOnly = true) - public List listById(String[] ids) throws Exception{ - return specValueDAO.listById(ids); + public List listByIdList(List idList) throws Exception{ + return specValueDAO.listByIdList(idList); } @Override diff --git a/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/Sku-Mapper.xml b/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/Sku-Mapper.xml index 8a20fc2..ab7d3b9 100644 --- a/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/Sku-Mapper.xml +++ b/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/Sku-Mapper.xml @@ -39,15 +39,19 @@ diff --git a/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecOption-Mapper.xml b/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecOption-Mapper.xml index db66637..db411e2 100644 --- a/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecOption-Mapper.xml +++ b/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecOption-Mapper.xml @@ -47,6 +47,12 @@ #{categoryId} + + AND so.id in + + #{id} + + order by so.update_date desc , so.order_num asc diff --git a/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecValue-Mapper.xml b/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecValue-Mapper.xml index 7a98dde..368c2ca 100644 --- a/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecValue-Mapper.xml +++ b/bigfans-cloud-service-catalog/src/main/resources/mybatis/mapper/SpecValue-Mapper.xml @@ -39,7 +39,7 @@ SpecValue sv deleted = 0 - + AND sv.id in #{id} diff --git a/bigfans-cloud-service-payment/pom.xml b/bigfans-cloud-service-payment/pom.xml index f60ba82..189b76d 100644 --- a/bigfans-cloud-service-payment/pom.xml +++ b/bigfans-cloud-service-payment/pom.xml @@ -38,6 +38,12 @@ spring-boot-starter-test test + junit junit @@ -55,6 +61,18 @@ org.apache.kafka kafka_2.12 + + org.alipay.sdk + sdk-java20161213173952 + system + ${project.basedir}/lib/alipay-sdk-java20161213173952.jar + + + org.alipay.sdk + sdk-20161215 + system + ${project.basedir}/lib/alipay-trade-sdk-20161215.jar + bigfans-cloud bigfans-cloud-base diff --git a/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/api/PaymentApi.java b/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/api/PaymentApi.java index 1eb5a7c..197f0e3 100644 --- a/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/api/PaymentApi.java +++ b/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/api/PaymentApi.java @@ -47,9 +47,6 @@ public class PaymentApi extends BaseController { @Autowired private OrderServiceClient orderServiceClient; - @Autowired - private SimpMessagingTemplate messagingTemplate; - @PostMapping("/pay") public RestResponse create(@RequestBody Payment payment) throws Exception{ paymentService.create(payment); diff --git a/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebConfig.java b/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebConfig.java index e65ea08..01f64f7 100644 --- a/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebConfig.java +++ b/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebConfig.java @@ -35,7 +35,7 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new DefaultInterceptor()).addPathPatterns("/**"); - registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login"); + registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login","/static","/images"); } } diff --git a/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebSocketConfig.java b/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebSocketConfig.java deleted file mode 100644 index b54ff16..0000000 --- a/bigfans-cloud-service-payment/src/main/java/com/bigfans/paymentservice/config/WebSocketConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.bigfans.paymentservice.config; - -import org.springframework.context.annotation.Configuration; -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 { - - - - - @Override - public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) { - stompEndpointRegistry.addEndpoint("/checkPaymentStatus").withSockJS(); - } -} diff --git a/bigfans-cloud-service-pricing/src/main/java/com/bigfans/pricingservice/api/mgr/CouponManageApi.java b/bigfans-cloud-service-pricing/src/main/java/com/bigfans/pricingservice/api/mgr/CouponManageApi.java new file mode 100644 index 0000000..33a0cdc --- /dev/null +++ b/bigfans-cloud-service-pricing/src/main/java/com/bigfans/pricingservice/api/mgr/CouponManageApi.java @@ -0,0 +1,30 @@ +package com.bigfans.pricingservice.api.mgr; + +import com.bigfans.framework.annotations.NeedLogin; +import com.bigfans.framework.web.BaseController; +import com.bigfans.framework.web.RestResponse; +import com.bigfans.pricingservice.model.Coupon; +import com.bigfans.pricingservice.service.CouponService; +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.RestController; + +/** + * @author lichong + * @create 2018-08-04 下午6:10 + **/ +@RestController("/coupon") +public class CouponManageApi extends BaseController { + + @Autowired + private CouponService couponService; + + @PostMapping("/create") + @NeedLogin(roles = "admin") + public RestResponse create(@RequestBody Coupon coupon) throws Exception { + couponService.create(coupon); + return RestResponse.ok(); + } + +} diff --git a/bigfans-cloud-service-shipping/pom.xml b/bigfans-cloud-service-shipping/pom.xml new file mode 100644 index 0000000..f893d85 --- /dev/null +++ b/bigfans-cloud-service-shipping/pom.xml @@ -0,0 +1,96 @@ + + + + bigfans-cloud + bigfans-cloud + 0.0.1-SNAPSHOT + + 4.0.0 + + bigfans-cloud-service-shipping + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + junit + junit + test + + + mysql + mysql-connector-java + + + com.alibaba + druid + + + org.apache.kafka + kafka_2.12 + + + com.lmax + disruptor + + + bigfans-cloud + bigfans-cloud-base + 0.0.1-SNAPSHOT + + + org.neo4j.driver + neo4j-java-driver + + + org.elasticsearch.client + transport + + + com.belerweb + pinyin4j + + + net.coobird + thumbnailator + + + alidayu + alidayu + + + + + + \ No newline at end of file diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java new file mode 100644 index 0000000..e1c21eb --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/ShippingServiceApp.java @@ -0,0 +1,13 @@ +package com.bigfans.shippingservice; + +/** + * @author lichong + * @create 2018-03-25 上午8:05 + **/ +public class ShippingServiceApp { + + public static void main(String[] args) throws Exception{ + + } + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java new file mode 100644 index 0000000..1646e94 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/api/clients/OrderServiceClient.java @@ -0,0 +1,37 @@ +package com.bigfans.shippingservice.api.clients; + +import com.bigfans.framework.utils.BeanUtils; +import com.bigfans.framework.web.RestResponse; +import com.bigfans.shippingservice.model.Order; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + * @author lichong + * @create 2018-02-25 下午4:21 + **/ +@Component +public class OrderServiceClient { + + @Autowired + private RestTemplate restTemplate; + + public CompletableFuture getOrder(String orderId){ + return CompletableFuture.supplyAsync(() -> { + UriComponents builder = UriComponentsBuilder.fromUriString("http://order-service/orders/{id}").build().expand(orderId).encode(); + ResponseEntity responseEntity = restTemplate.getForEntity(builder.toUri(), RestResponse.class); + RestResponse restResponse = responseEntity.getBody(); + Map data = (Map) restResponse.getData(); + Order order = new Order(); + BeanUtils.mapToModel(data , order); + return order; + }); + } +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java new file mode 100644 index 0000000..f33dbac --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/DataSourceConfig.java @@ -0,0 +1,108 @@ +package com.bigfans.shippingservice.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.bigfans.framework.dao.DynamicDataSource; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.env.Environment; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; + +import javax.sql.DataSource; + +@Configuration +public class DataSourceConfig implements EnvironmentAware { + + private static final String MYBATIS_MAPPER_LOCATION = "classpath:mybatis/mapper/*-Mapper.xml"; + private static final String MYBATIS_CONFIG_LOCATION = "classpath:mybatis/MybatisConfig.xml"; + + private Environment env; + + @Override + public void setEnvironment(Environment env) { + this.env = env; + } + + /** + * 主库配置 + */ + @Bean(name = "masterDataSource") + public DataSource createMasterDataSource() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setDriverClassName(env.getProperty("master.datasource.driverClassName")); + dataSource.setUrl(env.getProperty("master.datasource.url")); + dataSource.setUsername(env.getProperty("master.datasource.username")); + dataSource.setPassword(env.getProperty("master.datasource.password")); + dataSource.setTestWhileIdle(true); + return dataSource; + } + + /** + * 从库配置 + */ + @Bean(name = "clusterDataSource1") + public DataSource createCluster1DataSource() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setDriverClassName(env.getProperty("cluster1.datasource.driverClassName")); + dataSource.setUrl(env.getProperty("cluster1.datasource.url")); + dataSource.setUsername(env.getProperty("cluster1.datasource.username")); + dataSource.setPassword(env.getProperty("cluster1.datasource.password")); + dataSource.setTestWhileIdle(true); + return dataSource; + } + + @Bean(name = "dynamicDataSource") + @Primary + public DataSource createDynamicDataSource( + @Qualifier("masterDataSource") DataSource masterDataSource , + @Qualifier("clusterDataSource1") DataSource clusterDataSource1){ + DynamicDataSource dynamicDataSource = new DynamicDataSource(); + dynamicDataSource.putMaster(masterDataSource); + dynamicDataSource.putCluster(clusterDataSource1); + dynamicDataSource.setTargetDataSources(); + return dynamicDataSource; + } + + @Bean(name = "transactionManager") + public DataSourceTransactionManager createTransactionManager(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception { + return new DataSourceTransactionManager(dynamicDataSource); + } + + @Bean(name = "sqlSessionFactory") + public SqlSessionFactory masterSqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) + throws Exception { + final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(dynamicDataSource); + ResourcePatternResolver pathResolver = new PathMatchingResourcePatternResolver(); + sessionFactory.setConfigLocation(pathResolver.getResource(MYBATIS_CONFIG_LOCATION)); + sessionFactory.setMapperLocations(pathResolver.getResources(MYBATIS_MAPPER_LOCATION)); + return sessionFactory.getObject(); + } + + @Bean + public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){ + return new SqlSessionTemplate(sqlSessionFactory); + } + + @Bean + public JdbcTemplate jdbcTemplate(@Qualifier("dynamicDataSource") DataSource dynamicDataSource){ + return new JdbcTemplate(dynamicDataSource); + } + + @Bean + public TransactionTemplate transactionTemplate(@Qualifier("dynamicDataSource") DataSource dynamicDataSource){ + PlatformTransactionManager transactionManager = new DataSourceTransactionManager(dynamicDataSource); + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + return transactionTemplate; + } +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java new file mode 100644 index 0000000..5bd7141 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/EventBusConfig.java @@ -0,0 +1,38 @@ +package com.bigfans.shippingservice.config; + +import com.bigfans.framework.event.ApplicationEventBus; +import com.bigfans.framework.event.EventRepository; +import com.bigfans.framework.event.JdbcEventRepository; +import com.bigfans.framework.event.SpringEventBus; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; + +/** + * @author lichong + * @create 2018-02-05 下午8:33 + **/ +@Configuration +public class EventBusConfig implements ApplicationContextAware{ + + private ApplicationContext applicationContext; + + @Bean + public EventRepository eventRepository(JdbcTemplate jdbcTemplate){ + return new JdbcEventRepository(jdbcTemplate); + } + + @Bean + public ApplicationEventBus eventBus(EventRepository eventRepository){ + return new SpringEventBus(applicationContext); + }; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java new file mode 100644 index 0000000..8f78ce0 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/KafkaConfig.java @@ -0,0 +1,63 @@ +package com.bigfans.shippingservice.config; + +import com.bigfans.framework.kafka.KafkaConsumerTaskManager; +import com.bigfans.framework.kafka.KafkaFactory; +import com.bigfans.framework.kafka.KafkaTemplate; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +/** + * @author lichong + * @create 2018-02-04 上午10:46 + **/ +@Configuration +public class KafkaConfig { + + @Value("${kafka.servers}") + private String servers; + @Value("${kafka.groupId}") + private String groupId; + @Value("${kafka.clientId}") + private String clientId; + + @Bean + public KafkaFactory kafkaFactory(){ + + Properties producerProperties = new Properties(); + producerProperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, servers); + producerProperties.put(ProducerConfig.ACKS_CONFIG, "all"); + producerProperties.put(ProducerConfig.RETRIES_CONFIG, 0); + producerProperties.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384); + producerProperties.put(ProducerConfig.LINGER_MS_CONFIG, 1); + producerProperties.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432); + producerProperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); + producerProperties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); + + Properties consumerProperties = new Properties(); + consumerProperties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, servers); + consumerProperties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); + consumerProperties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); + consumerProperties.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); + consumerProperties.put(ConsumerConfig.CLIENT_ID_CONFIG, "simple"); + + KafkaFactory factory = new KafkaFactory(); + factory.setConsumerProperties(consumerProperties); + factory.setProducerProperties(producerProperties); + return factory; + } + + @Bean + public KafkaConsumerTaskManager kafkaConsumerManager(KafkaFactory kafkaFactory){ + return new KafkaConsumerTaskManager(kafkaFactory); + } + + @Bean + public KafkaTemplate kafkaTemplate(KafkaFactory kafkaFactory){ + return new KafkaTemplate(kafkaFactory); + } +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java new file mode 100644 index 0000000..f881891 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/PluginConfig.java @@ -0,0 +1,29 @@ +package com.bigfans.shippingservice.config; + +import com.bigfans.framework.cache.CacheProvider; +import com.bigfans.framework.cache.RedisCacheProvider; +import com.bigfans.framework.redis.JedisTemplate; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author lichong + * @create 2018-03-21 下午9:21 + **/ +@Configuration +@RefreshScope +public class PluginConfig { + + @Value("${cache.type}") + private String cacheType; + @Value("${cache.dbindex}") + private Integer cacheDbIndex; + + @Bean + public CacheProvider cachePlugin(JedisTemplate jedisTemplate){ + CacheProvider cacheProvider = new RedisCacheProvider(jedisTemplate , cacheDbIndex); + return cacheProvider; + } +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java new file mode 100644 index 0000000..605dd65 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RedisTemplateConfig.java @@ -0,0 +1,41 @@ +package com.bigfans.shippingservice.config; + +import com.bigfans.framework.redis.JedisConnectionFactory; +import com.bigfans.framework.redis.JedisTemplate; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RedisTemplateConfig { + + @Value("${jedis.host}") + private String host; + @Value("${jedis.port}") + private Integer port; + @Value("${jedis.auth}") + private String auth; + @Value("${jedis.max_idle}") + private Integer max_idle; + @Value("${jedis.timeout}") + private Integer timeout; + @Value("${jedis.test_on_borrow}") + private Boolean test_on_borrow; + @Value("${jedis.default_db_index}") + private Integer default_db_index; + + @Bean(name = "jedisTemplate") + public JedisTemplate createTemplate() { + JedisConnectionFactory factory = new JedisConnectionFactory(); + factory.setHost(host); + factory.setPort(port); + factory.setAuth(auth); + factory.setMax_idle(max_idle); + factory.setTimeout(timeout); + factory.setTest_on_borrow(test_on_borrow); + factory.setDefaultDbIndex(default_db_index); + JedisTemplate jedisTemplate = new JedisTemplate(factory); + return jedisTemplate; + } + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java new file mode 100644 index 0000000..734bed9 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/RestTemplateConfig.java @@ -0,0 +1,21 @@ +package com.bigfans.shippingservice.config; + +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +/** + * @author lichong + * @create 2018-02-14 下午5:06 + **/ +@Configuration +public class RestTemplateConfig { + + @LoadBalanced + @Bean + public RestTemplate restTemplate(){ + return new RestTemplate(); + } + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java new file mode 100644 index 0000000..0659185 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/config/WebConfig.java @@ -0,0 +1,40 @@ +package com.bigfans.shippingservice.config; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author lichong + * @create 2018-02-28 下午10:25 + **/ +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Bean + public FilterRegistrationBean corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + config.addAllowedOrigin("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + source.registerCorsConfiguration("/**", config); + FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); + bean.setOrder(0); + return bean; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { +// registry.addInterceptor(new DefaultInterceptor()).addPathPatterns("/**"); +// registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login"); + } +} + + diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java new file mode 100644 index 0000000..176c14d --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/DeliveryDAO.java @@ -0,0 +1,15 @@ +package com.bigfans.shippingservice.dao; + +import com.bigfans.framework.dao.BaseDAO; +import com.bigfans.shippingservice.model.Delivery; + +/** + * + * @Description:配送DAO操作 + * @author lichong + * 2015年1月17日下午7:36:35 + * + */ +public interface DeliveryDAO extends BaseDAO { + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java new file mode 100644 index 0000000..02e2546 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/dao/impl/DeliveryDAOImpl.java @@ -0,0 +1,20 @@ +package com.bigfans.shippingservice.dao.impl; + +import com.bigfans.framework.dao.MybatisDAOImpl; +import com.bigfans.shippingservice.dao.DeliveryDAO; +import com.bigfans.shippingservice.model.Delivery; +import org.springframework.stereotype.Repository; + + +/** + * + * @Description:配送DAO操作 + * @author lichong + * 2015年1月17日下午7:36:35 + * + */ +@Repository(DeliveryDAOImpl.BEAN_NAME) +public class DeliveryDAOImpl extends MybatisDAOImpl implements DeliveryDAO { + + public static final String BEAN_NAME = "deliveryDAO"; +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java new file mode 100644 index 0000000..850a62d --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/listener/OrderListener.java @@ -0,0 +1,41 @@ +package com.bigfans.shippingservice.listener; + +import com.bigfans.framework.kafka.KafkaConsumerBean; +import com.bigfans.framework.kafka.KafkaListener; +import com.bigfans.model.event.payment.OrderPaidEvent; +import com.bigfans.shippingservice.api.clients.OrderServiceClient; +import com.bigfans.shippingservice.model.Delivery; +import com.bigfans.shippingservice.model.Order; +import com.bigfans.shippingservice.service.DeliveryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +@KafkaConsumerBean +public class OrderListener { + + @Autowired + private DeliveryService deliveryService; + @Autowired + private OrderServiceClient orderServiceClient; + + @KafkaListener + public void on(OrderPaidEvent event) { + try { + String orderId = event.getOrderId(); + Order order = orderServiceClient.getOrder(orderId).get(); + Delivery delivery = new Delivery(); + delivery.setAddress(order.getAddressDetail()); + delivery.setConsignee(order.getAddressConsignee()); + delivery.setEmail(order.getAddressEmail()); + delivery.setMobile(order.getAddressPhone()); + delivery.setUserId(order.getUserId()); + delivery.setOrderId(order.getId()); + delivery.setFreight(order.getFreight()); + deliveryService.create(delivery); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java new file mode 100644 index 0000000..3722694 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Delivery.java @@ -0,0 +1,14 @@ +package com.bigfans.shippingservice.model; + +import com.bigfans.shippingservice.model.entity.DeliveryEntity; + +/** + * + * @Description: 配送 + * @author lichong + * 2015年1月17日下午7:36:25 + * + */ +public class Delivery extends DeliveryEntity { + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java new file mode 100644 index 0000000..8241733 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/Order.java @@ -0,0 +1,41 @@ +package com.bigfans.shippingservice.model; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Order { + + protected String id; + protected Date createDate; + protected Date updateDate; + // 用户信息 + protected String userId; + // 支付信息 + protected String paymentId; + // 支付类型ID + protected String payMethodCode; + // 支付类型名称 + protected String payMethodName; + // 收货地址 + protected String addressId; + // 收货人 + protected String addressConsignee; + // 送货详细地址 + protected String addressDetail; + // 收货人电话 + protected String addressPhone; + // 收货人email + protected String addressEmail; + // 留言 + protected String note; + // 运费 + protected BigDecimal freight; + protected Integer prodTotalQuantity; + // 商品总价格 + protected BigDecimal prodTotalPrice; + // 总价格(计算完邮费和各种优惠后的应付款额) + protected BigDecimal totalPrice; +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java new file mode 100644 index 0000000..25e8ce5 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/model/entity/DeliveryEntity.java @@ -0,0 +1,54 @@ +package com.bigfans.shippingservice.model.entity; + +import com.bigfans.framework.model.AbstractModel; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Table; +import java.math.BigDecimal; +import java.util.Date; + +/** + * + * @Description:配送实体 + * @author lichong 2014年12月14日下午4:48:01 + * + */ +@Data +@Table(name="Delivery") +public class DeliveryEntity extends AbstractModel { + private static final long serialVersionUID = 5625942998949303053L; + + public static final String STATUS_UNSENT = "preparing"; + public static final String STATUS_DELIVERING = "delivering"; + public static final String STATUS_SIGNED = "signed"; + + @Column(name="order_id") + protected String orderId; + @Column(name="user_id") + protected String userId; + @Column(name="address") + protected String address; + @Column(name="consignee") + protected String consignee; + @Column(name="postalcode") + protected String postalcode; + @Column(name="mobile") + protected String mobile; + @Column(name="tel") + protected String tel; + @Column(name="email") + protected String email; + @Column(name="complete_date",columnDefinition="DATETIME") + protected Date completeDate; + @Column(name="status") + protected String status = STATUS_UNSENT; + // 运费 + @Column(name="freight") + protected BigDecimal freight; + + public String getModule() { + return "Delivery"; + } + +} \ No newline at end of file diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java new file mode 100644 index 0000000..7013046 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/DeliveryService.java @@ -0,0 +1,16 @@ +package com.bigfans.shippingservice.service; + +import com.bigfans.framework.dao.BaseService; +import com.bigfans.shippingservice.model.Delivery; + + +/** + * + * @Description:配送服务接口 + * @author lichong + * 2014年12月16日上午10:14:08 + * + */ +public interface DeliveryService extends BaseService { + +} diff --git a/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java new file mode 100644 index 0000000..aefb894 --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/java/com/bigfans/shippingservice/service/impl/DeliveryServiceImpl.java @@ -0,0 +1,26 @@ +package com.bigfans.shippingservice.service.impl; + +import com.bigfans.framework.dao.BaseServiceImpl; +import com.bigfans.shippingservice.dao.DeliveryDAO; +import com.bigfans.shippingservice.model.Delivery; +import com.bigfans.shippingservice.service.DeliveryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * @Description:配送服务类 + * @author lichong + * 2014年12月16日上午10:13:56 + * + */ +@Service(DeliveryServiceImpl.BEAN_NAME) +public class DeliveryServiceImpl extends BaseServiceImpl implements DeliveryService { + + public static final String BEAN_NAME = "deliveryService"; + + @Autowired + public DeliveryServiceImpl(DeliveryDAO deliveryDAO) { + super(deliveryDAO); + } +} diff --git a/bigfans-cloud-service-shipping/src/main/resources/application.yml b/bigfans-cloud-service-shipping/src/main/resources/application.yml new file mode 100644 index 0000000..cd0eddc --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/resources/application.yml @@ -0,0 +1,58 @@ +server: + port: 8805 +spring: + application: + name: shipping-service + datasource: + initialize: false +# zipkin: +# base-url: http://127.0.0.1:7002 +eureka: + instance: + instance-id: ${spring.application.name}:${server.port} + preferIpAddress: true + health-check-url-path: /application + status-page-url: http://${spring.cloud.client.hostname}:${server.port}/swagger-ui.html + client: + registerWithEureka: true + fetchRegistry: true + registry-fetch-interval-seconds: 20 + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + eureka-server-connect-timeout-seconds: 5 + +## master +master: + datasource: + url: jdbc:mysql://127.0.0.1:3307/bigfans_shipping?autoReconnect=true&useUnicode=true&characterEncoding=utf8 + username: root + password: admin + driverClassName: com.mysql.jdbc.Driver + +## cluster +cluster1: + datasource: + url: jdbc:mysql://127.0.0.1:3307/bigfans_shipping?autoReconnect=true&useUnicode=true&characterEncoding=utf8 + username: root + password: admin + driverClassName: com.mysql.jdbc.Driver + +## kafka +kafka: + servers: 192.168.0.103:9092 + groupId: ${spring.application.name} + clientId: ${spring.application.name}-client + +## redis +#Redis服务器IP +jedis: + host: 127.0.0.1 +#Redis的端口号 + port: 6379 +#访问密码 + auth: +#控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值是8。 + max_idle: 10 + timeout: 1000 +#在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; + test_on_borrow: false \ No newline at end of file diff --git a/bigfans-cloud-service-shipping/src/main/resources/log4j2.xml b/bigfans-cloud-service-shipping/src/main/resources/log4j2.xml new file mode 100644 index 0000000..db6917b --- /dev/null +++ b/bigfans-cloud-service-shipping/src/main/resources/log4j2.xml @@ -0,0 +1,26 @@ + + + + + + %d %p %C{1.} [%t] %m%n + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bigfans-cloud-service-user/src/main/java/com/bigfans/userservice/api/WeChatApi.java b/bigfans-cloud-service-user/src/main/java/com/bigfans/userservice/api/WeChatApi.java new file mode 100644 index 0000000..36c8e22 --- /dev/null +++ b/bigfans-cloud-service-user/src/main/java/com/bigfans/userservice/api/WeChatApi.java @@ -0,0 +1,22 @@ +package com.bigfans.userservice.api; + +import com.bigfans.framework.web.BaseController; +import com.bigfans.framework.web.RestResponse; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author lichong + * @create 2018-08-04 下午8:45 + **/ +@RestController("/wechat") +public class WeChatApi extends BaseController { + + private String appId = "wxb394f3ec882dfc42"; + + @GetMapping("/exchangeOpenId") + public RestResponse exchangeOpenId(){ + return RestResponse.ok(); + } + +} diff --git a/bigfans-framework/src/main/java/com/bigfans/framework/lock/DistributedLock.java b/bigfans-framework/src/main/java/com/bigfans/framework/lock/DistributedLock.java new file mode 100644 index 0000000..0d017f4 --- /dev/null +++ b/bigfans-framework/src/main/java/com/bigfans/framework/lock/DistributedLock.java @@ -0,0 +1,8 @@ +package com.bigfans.framework.lock; + +/** + * @author lichong + * @create 2018-07-22 上午9:49 + **/ +public interface DistributedLock { +} diff --git a/bigfans-framework/src/main/java/com/bigfans/framework/lock/ZookeeperDistributedLock.java b/bigfans-framework/src/main/java/com/bigfans/framework/lock/ZookeeperDistributedLock.java new file mode 100644 index 0000000..7e19fbb --- /dev/null +++ b/bigfans-framework/src/main/java/com/bigfans/framework/lock/ZookeeperDistributedLock.java @@ -0,0 +1,8 @@ +package com.bigfans.framework.lock; + +/** + * @author lichong + * @create 2018-07-22 上午9:49 + **/ +public class ZookeeperDistributedLock implements DistributedLock { +} diff --git a/pom.xml b/pom.xml index 6290f3b..31f22b2 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ bigfans-cloud-service-pricing bigfans-cloud-service-notification bigfans-cloud-config-server + bigfans-cloud-service-shipping UTF-8 @@ -37,6 +38,7 @@ 6.2.2 0.9.0 3.4.2 + 4.1.23.Final @@ -110,6 +112,10 @@ thumbnailator 0.4.6 + + io.netty + netty-all + -- Gitee