diff --git a/yshop-admin/src/main/java/co/yixiang/config/ConfigurerAdapter.java b/yshop-admin/src/main/java/co/yixiang/config/ConfigurerAdapter.java index 6585164f..6ff83ef9 100644 --- a/yshop-admin/src/main/java/co/yixiang/config/ConfigurerAdapter.java +++ b/yshop-admin/src/main/java/co/yixiang/config/ConfigurerAdapter.java @@ -34,19 +34,19 @@ public class ConfigurerAdapter implements WebMvcConfigurer { @Value("${file.avatar}") private String avatar; -// @Bean -// public CorsFilter corsFilter() { -// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); -// CorsConfiguration config = new CorsConfiguration(); -// config.setAllowCredentials(true); -// // 设置允许跨域请求的域名 -// config.setAllowedOriginPatterns(Arrays.asList("*")); -// config.addAllowedOrigin("*"); -// config.addAllowedHeader("*"); -// config.addAllowedMethod("*"); -// source.registerCorsConfiguration("/**", config); -// return new CorsFilter(source); -// } + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); // 允许cookies跨域 + config.addAllowedOriginPattern("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin + config.addAllowedHeader("*");// #允许访问的头信息,*表示全部 + config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 + config.addAllowedMethod("OPTIONS");// 允许提交请求的方法类型,*表示全部允许 + + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { diff --git a/yshop-admin/src/main/java/co/yixiang/config/CorsFilter.java b/yshop-admin/src/main/java/co/yixiang/config/CorsFilter.java index ba25d157..24b4d7e5 100644 --- a/yshop-admin/src/main/java/co/yixiang/config/CorsFilter.java +++ b/yshop-admin/src/main/java/co/yixiang/config/CorsFilter.java @@ -1,47 +1,47 @@ -package co.yixiang.config; - -/** - * @author :LionCity - * @date :Created in 2020-12-21 13:38 - * @description: - * @modified By: - * @version: - */ -import java.io.IOException; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpFilter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import co.yixiang.utils.StringUtils; -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpHeaders; -import org.springframework.stereotype.Component; - -@Component -@Order(-9999) -public class CorsFilter extends HttpFilter { - - /** - * - */ - private static final long serialVersionUID = -8387103310559517243L; - - @Override - protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException { - - String origin = req.getHeader(HttpHeaders.ORIGIN); - - if (!StringUtils.isEmpty(origin)){ - res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); - res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Origin, x-requested-with, Content-Type, Accept, Authorization"); - res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); - res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, OPTIONS, DELETE"); - res.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma"); - res.addHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "60"); - } - super.doFilter(req, res, chain); - } -} +//package co.yixiang.config; +// +///** +// * @author :LionCity +// * @date :Created in 2020-12-21 13:38 +// * @description: +// * @modified By: +// * @version: +// */ +//import java.io.IOException; +// +//import javax.servlet.FilterChain; +//import javax.servlet.ServletException; +//import javax.servlet.http.HttpFilter; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +// +//import co.yixiang.utils.StringUtils; +//import org.springframework.core.annotation.Order; +//import org.springframework.http.HttpHeaders; +//import org.springframework.stereotype.Component; +// +//@Component +//@Order(-9999) +//public class CorsFilter extends HttpFilter { +// +// /** +// * +// */ +// private static final long serialVersionUID = -8387103310559517243L; +// +// @Override +// protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException { +// +// String origin = req.getHeader(HttpHeaders.ORIGIN); +// +// if (!StringUtils.isEmpty(origin)){ +// res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); +// res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Origin, x-requested-with, Content-Type, Accept, Authorization"); +// res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); +// res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, OPTIONS, DELETE"); +// res.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma"); +// res.addHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "60"); +// } +// super.doFilter(req, res, chain); +// } +//} diff --git a/yshop-admin/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java b/yshop-admin/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java index 160f414c..df222114 100644 --- a/yshop-admin/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java +++ b/yshop-admin/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java @@ -6,7 +6,6 @@ package co.yixiang.modules.security.config; import co.yixiang.annotation.AnonymousAccess; -import co.yixiang.config.CorsFilter; import co.yixiang.modules.security.security.JwtAccessDeniedHandler; import co.yixiang.modules.security.security.JwtAuthenticationEntryPoint; import co.yixiang.modules.security.security.TokenConfigurer; @@ -24,6 +23,7 @@ import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.filter.CorsFilter; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; diff --git a/yshop-admin/src/main/resources/config/application-prod.yml b/yshop-admin/src/main/resources/config/application-prod.yml index 884c8d2d..d1c794b0 100644 --- a/yshop-admin/src/main/resources/config/application-prod.yml +++ b/yshop-admin/src/main/resources/config/application-prod.yml @@ -6,9 +6,9 @@ spring: druid: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/yshopb2c?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull - username: root - password: xxcs@!2019 + url: jdbc:mysql://localhost:3366/yshopb2c?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + username: yshopb2c + password: bkfGfAimifjPZtNE # 初始化配置 initial-size: 3 @@ -41,10 +41,10 @@ spring: redis: #数据库索引 - database: 2 + database: 5 host: 127.0.0.1 - port: 6379 - password: + port: 6399 # Redis服务器连接端口 + password: 6379@@6379 # Redis服务器连接密码(默认为空) #连接超时时间 timeout: 5000 @@ -87,8 +87,9 @@ swagger: file: - path: /home/yshop/file/ - avatar: /home/yshop/avatar/ + path: /www/wwwroot/thapi.xinxintuan.co/upload/file/ + avatar: /www/wwwroot/thapi.xinxintuan.co/upload/avatar/ # 文件大小 /M maxSize: 100 avatarMaxSize: 5 + diff --git a/yshop-app/Dockerfile b/yshop-app/Dockerfile new file mode 100644 index 00000000..775c8e9b --- /dev/null +++ b/yshop-app/Dockerfile @@ -0,0 +1,18 @@ +FROM anapsix/alpine-java:8_server-jre_unlimited + +MAINTAINER wangiegie@gmail.com + +ENV TZ=Asia/Shanghai +ENV JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom" + +RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN mkdir -p /yshop-app + +WORKDIR /yshop-app + +EXPOSE 8008 + +ADD ./target/yshop-app-3.1.jar ./ + +CMD java $JAVA_OPTS -jar yshop-app-3.1.jar --spring.profiles.active=dev diff --git a/yshop-app/src/main/java/co/yixiang/common/config/CorsFilter.java b/yshop-app/src/main/java/co/yixiang/common/config/CorsFilter.java new file mode 100644 index 00000000..f9ca45aa --- /dev/null +++ b/yshop-app/src/main/java/co/yixiang/common/config/CorsFilter.java @@ -0,0 +1,47 @@ +package co.yixiang.common.config; + +/** + * @author :LionCity + * @date :Created in 2020-12-21 13:38 + * @description: + * @modified By: + * @version: + */ + +import co.yixiang.utils.StringUtils; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Component; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +@Order(-9999) +public class CorsFilter extends HttpFilter { + + /** + * + */ + private static final long serialVersionUID = -8387103310559517243L; + + @Override + protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException { + + String origin = req.getHeader(HttpHeaders.ORIGIN); + + if (!StringUtils.isEmpty(origin)){ + res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin); + res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Origin, x-requested-with, Content-Type, Accept, Authorization"); + res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + res.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, OPTIONS, DELETE"); + res.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma"); + res.addHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "60"); + } + super.doFilter(req, res, chain); + } +} diff --git a/yshop-app/src/main/java/co/yixiang/common/config/InterceptorConfig.java b/yshop-app/src/main/java/co/yixiang/common/config/InterceptorConfig.java index 9cede892..2cc24eed 100644 --- a/yshop-app/src/main/java/co/yixiang/common/config/InterceptorConfig.java +++ b/yshop-app/src/main/java/co/yixiang/common/config/InterceptorConfig.java @@ -46,18 +46,18 @@ public class InterceptorConfig implements WebMvcConfigurer { registry.addInterceptor(this.getPermissionInterceptor()); } - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOrigin("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - source.registerCorsConfiguration("/**", config); - return new CorsFilter(source); - - } +// @Bean +// public CorsFilter corsFilter() { +// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); +// CorsConfiguration config = new CorsConfiguration(); +// config.setAllowCredentials(true); +// config.addAllowedOrigin("*"); +// config.addAllowedHeader("*"); +// config.addAllowedMethod("*"); +// source.registerCorsConfiguration("/**", config); +// return new CorsFilter(source); +// +// } @Override diff --git a/yshop-app/src/main/java/co/yixiang/modules/activity/rest/StoreIntegralController.java b/yshop-app/src/main/java/co/yixiang/modules/activity/rest/StoreIntegralController.java index e16ccfe9..85c96077 100644 --- a/yshop-app/src/main/java/co/yixiang/modules/activity/rest/StoreIntegralController.java +++ b/yshop-app/src/main/java/co/yixiang/modules/activity/rest/StoreIntegralController.java @@ -31,7 +31,7 @@ public class StoreIntegralController { /** * 获取积分产品列表 */ - @GetMapping("/products") + @GetMapping("/products/integral") @ApiOperation(value = "获取积分产品列表",notes = "获取积分产品列表") public ApiResult> goodsList(YxStoreProductQueryParam productQueryParam){ return ApiResult.ok(storeProductService.getGoodsList(productQueryParam)); diff --git a/yshop-app/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java b/yshop-app/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java index a245712b..2bef7ac2 100644 --- a/yshop-app/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java +++ b/yshop-app/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java @@ -13,14 +13,11 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import co.yixiang.api.ApiResult; import co.yixiang.api.YshopException; -import co.yixiang.enums.ShipperCodeEnum; -import co.yixiang.enums.ShopCommonEnum; +import co.yixiang.enums.*; import co.yixiang.logging.aop.log.AppLog; import co.yixiang.common.aop.NoRepeatSubmit; import co.yixiang.common.bean.LocalUser; import co.yixiang.common.interceptor.AuthCheck; -import co.yixiang.enums.OrderInfoEnum; -import co.yixiang.enums.OrderLogEnum; import co.yixiang.modules.mp.domain.YxWechatTemplate; import co.yixiang.modules.mp.service.YxWechatTemplateService; import co.yixiang.modules.order.domain.YxStoreOrder; @@ -177,7 +174,7 @@ public class StoreOrderController { //开始处理支付 //处理金额为0的情况 - if(order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0){ + if(order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0&&!param.getPayType().equals(PayTypeEnum.INTEGRAL.getValue())){ storeOrderService.yuePay(orderId,yxUser.getUid()); map.put("payMsg","支付成功"); return ApiResult.ok(map,"支付成功"); @@ -218,7 +215,7 @@ public class StoreOrderController { map.put("result",orderDTO); - if(storeOrder.getPayPrice().compareTo(BigDecimal.ZERO) <= 0){ + if(storeOrder.getPayPrice().compareTo(BigDecimal.ZERO) <= 0&&!param.getPaytype().equals(PayTypeEnum.INTEGRAL.getValue())){ storeOrderService.yuePay(orderId,uid); return ApiResult.ok(map,"支付成功"); } diff --git a/yshop-app/src/main/resources/config/application-prod.yml b/yshop-app/src/main/resources/config/application-prod.yml index 0a17ce1f..0abc1310 100644 --- a/yshop-app/src/main/resources/config/application-prod.yml +++ b/yshop-app/src/main/resources/config/application-prod.yml @@ -5,9 +5,9 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://localhost:3306/yshopb2c?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 - username: root - password: xxcs@!2019 + url: jdbc:mysql://localhost:3366/yshopb2c?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + username: yshopb2c + password: bkfGfAimifjPZtNE # 从库数据源 slave: # 从数据源开关/默认关闭 @@ -47,10 +47,10 @@ spring: config: multi-statement-allow: true redis: - host: 127.0.0.1 # Redis服务器地址 - database: 2 # Redis数据库索引(默认为0) - port: 6379 # Redis服务器连接端口 - password: # Redis服务器连接密码(默认为空) + host: localhost # Redis服务器地址 + database: 5 # Redis数据库索引(默认为0) + port: 6399 # Redis服务器连接端口 + password: 6379@@6379 # Redis服务器连接密码(默认为空) jedis: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) @@ -90,8 +90,8 @@ swagger: # 文件存储路径 file: - path: /home/yshop/file/ - avatar: /home/yshop/avatar/ + path: /www/wwwroot/thapi.xinxintuan.co/upload/file/ + avatar: /www/wwwroot/thapi.xinxintuan.co/upload/avatar/ # 文件大小 /M maxSize: 100 avatarMaxSize: 5 diff --git a/yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java index 7c1950b5..3d60fda0 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java @@ -906,11 +906,11 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl{ + if(cart.getProductInfo().getIsIntegral()==0){ + throw new YshopException("该商品不为积分商品"); + } + }); + YxUser userInfo = userService.getById(uid); if(userInfo.getIntegral().compareTo(orderInfo.getPayIntegral()) < 0){ throw new YshopException("积分不足"); } //扣除积分 - userService.decIntegral(uid,orderInfo.getPayIntegral().doubleValue()); - + //userService.decIntegral(uid,orderInfo.getPayIntegral().doubleValue()); + BigDecimal newIntegral = NumberUtil.sub(userInfo.getIntegral(), orderInfo.getPayIntegral()); + userInfo.setIntegral(newIntegral); + userService.updateById(userInfo); + //增加流水 + billService.expend(userInfo.getUid(), "兑换商品", BillDetailEnum.CATEGORY_2.getValue(), + BillDetailEnum.TYPE_8.getValue(), + orderInfo.getPayIntegral().doubleValue(), + newIntegral.doubleValue(), + "兑换商品扣除" + orderInfo.getPayIntegral().doubleValue() + "积分"); //支付成功后处理 this.paySuccess(orderInfo.getOrderId(),PayTypeEnum.INTEGRAL.getValue()); } @@ -1731,10 +1744,17 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl 0){ @@ -1760,10 +1780,17 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl wrapper= new LambdaQueryWrapper<>(); wrapper.in(YxStoreOrderCartInfo::getCartId, Arrays.asList(order.getCartId().split(","))); @@ -1790,11 +1817,19 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl0){ order.setUseIntegral(order.getPayIntegral()); } @@ -2189,9 +2224,9 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl