diff --git a/admin/src/main/java/cn/lili/admin/AdminApplication.java b/admin/src/main/java/cn/lili/admin/AdminApplication.java index d88d42e3..68c232ba 100644 --- a/admin/src/main/java/cn/lili/admin/AdminApplication.java +++ b/admin/src/main/java/cn/lili/admin/AdminApplication.java @@ -37,11 +37,11 @@ public class AdminApplication { successHandler.setDefaultTargetUrl(this.adminServer.path("/")); http.authorizeRequests().antMatchers("/instances**").permitAll(); http.authorizeRequests( - (authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() // 授予公众对所有静态资产和登录页面的访问权限。 + (authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() //授予公众对所有静态资产和登录页面的访问权限。 .antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated() //其他所有请求都必须经过验证。 ).formLogin( - (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() // 配置登录和注销。 - ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) // 启用HTTP基本支持。这是Spring Boot Admin Client注册所必需的。 + (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() //配置登录和注销。 + ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) //启用HTTP基本支持。这是Spring Boot Admin Client注册所必需的。 .csrf().disable() .rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600)); } diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java index 0460250c..1dae47d7 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java @@ -4,9 +4,9 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.message.entity.enums.MessageStatusEnum; -import cn.lili.modules.member.entity.dos.MemberMessage; -import cn.lili.modules.member.entity.vo.MemberMessageQueryVO; -import cn.lili.modules.member.service.MemberMessageService; +import cn.lili.modules.message.entity.dos.MemberMessage; +import cn.lili.modules.message.entity.vos.MemberMessageQueryVO; +import cn.lili.modules.message.service.MemberMessageService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java index b5ffaeea..8150f750 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java +++ b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java @@ -51,11 +51,11 @@ public class CartController { @NotNull(message = "购买数量不能为空") @Min(value = 1, message = "加入购物车数量必须大于0") Integer num, String cartType) { try { - // 读取选中的列表 + //读取选中的列表 cartService.add(skuId, num, cartType); return ResultUtil.success(); } catch (ServiceException se) { - log.error(se.getMsg(), se); + log.info(se.getMsg(), se); return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); @@ -157,7 +157,7 @@ public class CartController { @GetMapping("/checked") public ResultMessage cartChecked(@NotNull(message = "读取选中列表") String way) { try { - // 读取选中的列表 + //读取选中的列表 return ResultUtil.data(this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way))); } catch (ServiceException se) { log.error(se.getMsg(), se); @@ -239,7 +239,7 @@ public class CartController { @PostMapping(value = "/create/trade", consumes = "application/json", produces = "application/json") public ResultMessage crateTrade(@RequestBody TradeParams tradeParams) { try { - // 读取选中的列表 + //读取选中的列表 return ResultUtil.data(this.cartService.createTrade(tradeParams)); } catch (ServiceException se) { log.error(se.getMsg(), se); diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java index 71fddde1..2b7134af 100755 --- a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java @@ -67,7 +67,7 @@ public class BuyerAuthenticationFilter extends BasicAuthenticationFilter { //从header中获取jwt String jwt = request.getHeader(SecurityEnum.HEADER_TOKEN.getValue()); try { - // 如果没有token 则return + //如果没有token 则return if (StrUtil.isBlank(jwt)) { chain.doFilter(request, response); return; @@ -99,7 +99,7 @@ public class BuyerAuthenticationFilter extends BasicAuthenticationFilter { String json = claims.get(SecurityEnum.USER_CONTEXT.getValue()).toString(); AuthUser authUser = new Gson().fromJson(json, AuthUser.class); - // 校验redis中是否有权限 + //校验redis中是否有权限 if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER) + jwt)) { //构造返回信息 List auths = new ArrayList<>(); diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java b/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java index 81815fe9..779e0d78 100644 --- a/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java @@ -48,35 +48,35 @@ public class BuyerSecurityConfig extends WebSecurityConfigurerAdapter { ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry = http .authorizeRequests(); - // 配置的url 不需要授权 + //配置的url 不需要授权 for (String url : ignoredUrlsProperties.getUrls()) { registry.antMatchers(url).permitAll(); } registry .and() - // 禁止网页iframe + //禁止网页iframe .headers().frameOptions().disable() .and() .logout() .permitAll() .and() .authorizeRequests() - // 任何请求 + //任何请求 .anyRequest() - // 需要身份认证 + //需要身份认证 .authenticated() .and() - // 允许跨域 + //允许跨域 .cors().configurationSource((CorsConfigurationSource) SpringContextUtil.getBean("corsConfigurationSource")).and() - // 关闭跨站请求防护 + //关闭跨站请求防护 .csrf().disable() - // 前后端分离采用JWT 不需要session + //前后端分离采用JWT 不需要session .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() - // 自定义权限拒绝处理类 + //自定义权限拒绝处理类 .exceptionHandling().accessDeniedHandler(accessDeniedHandler) .and() - // 添加JWT认证过滤器 + //添加JWT认证过滤器 .addFilter(new BuyerAuthenticationFilter(authenticationManager(), cache)); } diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java index 1cc333be..59f9a435 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java @@ -50,9 +50,9 @@ class CartTest { @Test void createTrade() { -// TradeDTO allTradeDTO = cartService.getAllTradeDTO(); -// Assert.assertNotNull(allTradeDTO); -// System.out.println(JsonUtil.objectToJson(allTradeDTO)); +// TradeDTO allTradeDTO = cartService.getAllTradeDTO(); +// Assert.assertNotNull(allTradeDTO); +// System.out.println(JsonUtil.objectToJson(allTradeDTO)); cartService.createTrade(new TradeParams()); } diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java index 8076a648..4003ad5a 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java @@ -42,7 +42,7 @@ class FileTest { } URL url = new URL(brand.getLogo()); InputStream inputStream = url.openStream(); - // 上传至第三方云服务或服务器 + //上传至第三方云服务或服务器 brand.setLogo(fileManagerPlugin.inputStreamUpload(inputStream, brand.getId() + ".png")); } catch (IOException e) { log.error("上传你文件出错",e); diff --git a/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java b/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java index cae8d3ef..ff8dbef5 100644 --- a/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java +++ b/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java @@ -1,6 +1,7 @@ package cn.lili.controller.common; import cn.lili.common.aop.limiter.annotation.LimitPoint; +import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.enums.ResultUtil; import cn.lili.common.verification.enums.VerificationEnums; @@ -37,8 +38,8 @@ public class SliderImageController { } catch (ServiceException e) { throw e; } catch (Exception e) { - log.error("获取校验接口错误",e); - return null; + log.error("获取校验接口错误", e); + throw new ServiceException(ResultCode.VERIFICATION_EXIST); } } diff --git a/common-api/src/main/java/cn/lili/controller/common/UploadController.java b/common-api/src/main/java/cn/lili/controller/common/UploadController.java index 7f6d05cd..d2e84495 100644 --- a/common-api/src/main/java/cn/lili/controller/common/UploadController.java +++ b/common-api/src/main/java/cn/lili/controller/common/UploadController.java @@ -73,7 +73,7 @@ public class UploadController { } if (StringUtils.isNotBlank(base64)) { - // base64上传 + //base64上传 file = Base64DecodeMultipartFile.base64Convert(base64); } String result = ""; @@ -81,9 +81,9 @@ public class UploadController { File newFile = new File(); try { InputStream inputStream = file.getInputStream(); - // 上传至第三方云服务或服务器 + //上传至第三方云服务或服务器 result = fileManagerPlugin.inputStreamUpload(inputStream, fileKey); - // 保存数据信息至数据库 + //保存数据信息至数据库 newFile.setName(file.getOriginalFilename()); newFile.setFileSize(file.getSize()); newFile.setFileType(file.getContentType()); diff --git a/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java b/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java index 15ba8a7c..a3cd9e4c 100644 --- a/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java +++ b/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java @@ -48,18 +48,18 @@ public class CommonSecurityConfig extends WebSecurityConfigurerAdapter { .authorizeRequests(); registry .and() - // 禁止网页iframe + //禁止网页iframe .headers().frameOptions().disable() .and() .authorizeRequests() - // 任何请求 + //任何请求 .anyRequest() - // 需要身份认证 + //需要身份认证 .permitAll() .and() - // 允许跨域 + //允许跨域 .cors().configurationSource(corsConfigurationSource).and() - // 关闭跨站请求防护 + //关闭跨站请求防护 .csrf().disable(); } diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index c8449df3..7c54b374 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -161,7 +161,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { //促销库存key 集合 List promotionKey = new ArrayList<>(); - // 循环订单 + //循环订单 for (OrderItem orderItem : order.getOrderItems()) { skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId())); GoodsSku goodsSku = new GoodsSku(); @@ -221,7 +221,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { List goodsSkus = new ArrayList<>(); //sku库存key 集合 List skuKeys = new ArrayList<>(); - // 循环订单 + //循环订单 for (OrderItem orderItem : order.getOrderItems()) { skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId())); GoodsSku goodsSku = new GoodsSku(); diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index f02719b8..fa4132d0 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -112,7 +112,7 @@ public class GoodsMessageListener implements RocketMQListener { for (GoodsCompleteMessage goodsCompleteMessage : goodsCompleteMessageList) { Goods goods = goodsService.getById(goodsCompleteMessage.getGoodsId()); if (goods != null) { - // 更新商品购买数量 + //更新商品购买数量 if (goods.getBuyCount() == null) { goods.setBuyCount(0); } @@ -126,7 +126,7 @@ public class GoodsMessageListener implements RocketMQListener { } GoodsSku goodsSku = goodsSkuService.getById(goodsCompleteMessage.getSkuId()); if (goodsSku != null) { - // 更新商品购买数量 + //更新商品购买数量 if (goodsSku.getBuyCount() == null) { goodsSku.setBuyCount(0); } diff --git a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java index f30d41e7..01433f64 100644 --- a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java @@ -1,18 +1,27 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.SwitchEnum; import cn.lili.common.rocketmq.tags.OtherTagsEnum; import cn.lili.common.sms.SmsUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.entity.vo.MemberSearchVO; import cn.lili.modules.member.mapper.MemberMapper; +import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.message.entity.dos.MemberMessage; import cn.lili.modules.message.entity.dos.Message; import cn.lili.modules.message.entity.dos.StoreMessage; import cn.lili.modules.message.entity.dto.SmsReachDTO; +import cn.lili.modules.message.entity.enums.MessageSendClient; import cn.lili.modules.message.entity.enums.MessageStatusEnum; import cn.lili.modules.message.entity.enums.RangeEnum; +import cn.lili.modules.message.service.MemberMessageService; import cn.lili.modules.message.service.StoreMessageService; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.service.StoreService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; @@ -41,9 +50,15 @@ public class NoticeSendMessageListener implements RocketMQListener { //店铺消息 @Autowired private StoreMessageService storeMessageService; + //会员消息 + @Autowired + private MemberMessageService memberMessageService; //店铺 @Autowired private StoreService storeService; + //会员 + @Autowired + private MemberService memberService; @Override public void onMessage(MessageExt messageExt) { @@ -51,7 +66,6 @@ public class NoticeSendMessageListener implements RocketMQListener { case SMS: String smsJsonStr = new String(messageExt.getBody()); SmsReachDTO smsReachDTO = JSONUtil.toBean(smsJsonStr, SmsReachDTO.class); - //发送全部会员 if (smsReachDTO.getSmsRange().equals(RangeEnum.ALL.name())) { //获取所有会员的手机号 @@ -65,38 +79,118 @@ public class NoticeSendMessageListener implements RocketMQListener { //管理员发送站内信 case MESSAGE: Message message = JSONUtil.toBean(new String(messageExt.getBody()), Message.class); - List list = new ArrayList<>(); - //保存商家记录 - if (message.getMessageRange().equals("ALL")) { - List storeList = storeService.list(new QueryWrapper().eq("store_disable", "OPEN")); - storeList.forEach(item -> { - StoreMessage storeMessage = new StoreMessage(); - storeMessage.setMessageId(message.getId()); - storeMessage.setStoreName(item.getStoreName()); - storeMessage.setStoreId(item.getId()); - storeMessage.setStatus(MessageStatusEnum.UN_READY.name()); - storeMessage.setTitle(message.getTitle()); - storeMessage.setContent(message.getContent()); - list.add(storeMessage); - }); + // 管理端发送给商家的站内信 + if (message.getMessageClient().equals(MessageSendClient.STORE.name().toLowerCase())) { + saveStoreMessage(message); } else { - int i = 0; - for (String str : message.getUserIds()) { - StoreMessage storeMessage = new StoreMessage(); - storeMessage.setMessageId(message.getId()); - storeMessage.setStoreId(str); - storeMessage.setStoreName(message.getUserNames()[i]); - storeMessage.setStatus(MessageStatusEnum.UN_READY.name()); - storeMessage.setTitle(message.getTitle()); - storeMessage.setContent(message.getContent()); - list.add(storeMessage); - i++; - } + //管理员发送给会员的站内信 + saveMemberMessage(message); } - storeMessageService.save(list); break; default: break; } } + + /** + * 保存店铺消息 + * + * @param message 消息 + */ + private void saveStoreMessage(Message message) { + List list = new ArrayList<>(); + //发送全部商家情况 + if (message.getMessageRange().equals("ALL")) { + List storeList = storeService.list(new QueryWrapper().eq("store_disable", "OPEN")); + storeList.forEach(item -> { + StoreMessage storeMessage = new StoreMessage(); + storeMessage.setMessageId(message.getId()); + storeMessage.setStoreName(item.getStoreName()); + storeMessage.setStoreId(item.getId()); + storeMessage.setStatus(MessageStatusEnum.UN_READY.name()); + storeMessage.setTitle(message.getTitle()); + storeMessage.setContent(message.getContent()); + list.add(storeMessage); + }); + } else { + //发送给指定商家情况 + int i = 0; + for (String str : message.getUserIds()) { + StoreMessage storeMessage = new StoreMessage(); + storeMessage.setMessageId(message.getId()); + storeMessage.setStoreId(str); + storeMessage.setStoreName(message.getUserNames()[i]); + storeMessage.setStatus(MessageStatusEnum.UN_READY.name()); + storeMessage.setTitle(message.getTitle()); + storeMessage.setContent(message.getContent()); + list.add(storeMessage); + i++; + } + } + if (list.size() > 0) { + //执行保存 + storeMessageService.save(list); + } + } + + /** + * 保存会员消息 + * + * @param message 消息 + */ + private void saveMemberMessage(Message message) { + List list = new ArrayList<>(); + //如果是给所有会员发送消息 + if (message.getMessageRange().equals("ALL")) { + //查询所有会员总数,因为会员总数比较大 如果一次性查出来会占用数据库资源,所以要分页查询 + MemberSearchVO memberSearchVO = new MemberSearchVO(); + memberSearchVO.setDisabled(SwitchEnum.OPEN.name()); + Integer memberNum = memberService.getMemberNum(memberSearchVO); + //构建分页查询参数 + //100条查一次 + Integer pageSize = 200; + Integer pageCount = 0; + pageCount = memberNum / pageSize; + pageCount = memberNum % pageSize > 0 ? pageCount + 1 : pageCount; + for (int i = 1; i <= pageCount; i++) { + PageVO pageVO = new PageVO(); + pageVO.setPageSize(pageSize); + pageVO.setPageNumber(i); + IPage page = memberService.getMemberPage(memberSearchVO, pageVO); + //循环要保存的信息 + page.getRecords().forEach(item -> { + MemberMessage memberMessage = new MemberMessage(); + memberMessage.setContent(message.getContent()); + memberMessage.setTitle(message.getTitle()); + memberMessage.setMessageId(message.getId()); + memberMessage.setMemberId(item.getId()); + memberMessage.setMemberName(item.getUsername()); + memberMessage.setStatus(MessageStatusEnum.UN_READY.name()); + list.add(memberMessage); + }); + } + + } else { + //如果是给指定会员发送消息 + int i = 0; + for (String str : message.getUserIds()) { + MemberMessage memberMessage = new MemberMessage(); + memberMessage.setMessageId(message.getId()); + memberMessage.setMemberId(str); + memberMessage.setMemberName(message.getUserNames()[i]); + memberMessage.setStatus(MessageStatusEnum.UN_READY.name()); + memberMessage.setTitle(message.getTitle()); + memberMessage.setContent(message.getContent()); + list.add(memberMessage); + i++; + } + } + if (list.size() > 0) { + //执行保存 + memberMessageService.save(list); + } + + } + + } diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index dfbb0c2f..892139e5 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -56,9 +56,9 @@ public class OrderMessageListener implements RocketMQListener { result = false; } } - // 如所有步骤顺利完成 + //如所有步骤顺利完成 if (Boolean.TRUE.equals(result)) { - // 清除记录信息的trade cache key + //清除记录信息的trade cache key cache.remove(key); } break; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java index 82e5262a..1202c425 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java @@ -43,11 +43,11 @@ public class CancelOrderTaskExecute implements EveryMinuteExecute { Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name()); OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class); if (orderSetting != null && orderSetting.getAutoCancel() != null) { - // 订单自动取消时间 = 当前时间 - 自动取消时间分钟数 + //订单自动取消时间 = 当前时间 - 自动取消时间分钟数 DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.UNPAID.name()); - // 订单创建时间 <= 订单自动取消时间 + //订单创建时间 <= 订单自动取消时间 queryWrapper.le(Order::getCreateTime, cancelTime); List list = orderService.list(queryWrapper); List cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index 784dee61..223489e3 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -73,11 +73,11 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void completedOrder(OrderSetting orderSetting) { - // 订单自动收货时间 = 当前时间 - 自动收货时间天数 + //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.DELIVERED.name()); - // 订单发货时间 >= 订单自动收货时间 + //订单发货时间 >= 订单自动收货时间 queryWrapper.ge(Order::getLogisticsTime, receiveTime); List list = orderService.list(queryWrapper); List receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); @@ -98,9 +98,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void memberEvaluation(OrderSetting orderSetting) { - // 订单自动收货时间 = 当前时间 - 自动收货时间天数 + //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); - // 订单完成时间 <= 订单自动好评时间 + //订单完成时间 <= 订单自动好评时间 List orderItems = orderItemService.waitEvaluate(receiveTime); for (OrderItem orderItem : orderItems) { diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index b8f6686c..eb43758d 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -61,7 +61,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { @Autowired private PromotionGoodsService promotionGoodsService; - // 系统设置 + //系统设置 @Autowired private SettingService settingService; @@ -108,7 +108,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { List couponVOS = mongoTemplate.find(query, CouponVO.class); if (!couponVOS.isEmpty()) { List ids = new ArrayList<>(); - // // 关闭的优惠券活动 + // //关闭的优惠券活动 for (CouponVO vo : couponVOS) { vo.setPromotionStatus(PromotionStatusEnum.END.name()); if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { diff --git a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java index 6c539183..d76fcdaa 100644 --- a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java +++ b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java @@ -31,23 +31,23 @@ public abstract class AbstractDelayQueueListen { private void startDelayQueueMachine() { log.info("延时队列机器{}开始运作", setDelayQueueName()); - // 监听redis队列 + //监听redis队列 while (true) { try { - // 获取当前时间的时间戳 + //获取当前时间的时间戳 long now = System.currentTimeMillis() / 1000; - // 获取当前时间前需要执行的任务列表 + //获取当前时间前需要执行的任务列表 Set tuples = cache.zRangeByScore(setDelayQueueName(), 0, now); - // 如果任务不为空 + //如果任务不为空 if (!CollectionUtils.isEmpty(tuples)) { log.info("执行任务:{}", JSONUtil.toJsonStr(tuples)); for (DefaultTypedTuple tuple : tuples) { String jobId = (String) tuple.getValue(); - // 移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务 + //移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务 Long num = cache.zRemove(setDelayQueueName(), jobId); - // 如果移除成功, 则执行 + //如果移除成功, 则执行 if (num > 0) { ThreadPoolUtil.execute(() -> invoke(jobId)); } @@ -57,7 +57,7 @@ public abstract class AbstractDelayQueueListen { } catch (Exception e) { log.error("处理延时任务发生异常,异常原因为{}", e.getMessage(), e); } finally { - // 间隔一秒钟搞一次 + //间隔一秒钟搞一次 try { TimeUnit.SECONDS.sleep(5L); } catch (InterruptedException e) { diff --git a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java index ab42b58b..d6088916 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java @@ -29,7 +29,7 @@ public class BroadcastTimeTriggerExecutor implements TimeTriggerExecutor { BroadcastMessage broadcastMessage = JSONUtil.toBean(JSONUtil.parseObj(object), BroadcastMessage.class); if (broadcastMessage != null && broadcastMessage.getStudioId() != null) { log.info("直播间消费:{}", broadcastMessage); - // 修改直播间状态 + //修改直播间状态 studioService.updateStudioStatus(broadcastMessage); } } diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index 211c9bde..5abd9433 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -42,19 +42,19 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { @Override public void execute(Object object) { PromotionMessage promotionMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PromotionMessage.class); - // 促销延时信息 + //促销延时信息 if (promotionMessage != null && promotionMessage.getPromotionId() != null) { log.info("促销活动信息消费:{}", promotionMessage); - // 如果为促销活动开始,则需要发布促销活动结束的定时任务 + //如果为促销活动开始,则需要发布促销活动结束的定时任务 if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { if (!promotionService.updatePromotionStatus(promotionMessage)) { log.error("开始促销活动失败: {}", promotionMessage); return; } - // 促销活动开始后,设置促销活动结束的定时任务 + //促销活动开始后,设置促销活动结束的定时任务 promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); - // 结束时间(延时一分钟) + //结束时间(延时一分钟) long closeTime = promotionMessage.getEndTime().getTime() + 60000; TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); //添加延时任务 @@ -69,7 +69,7 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { PintuanOrderMessage pintuanOrderMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PintuanOrderMessage.class); if (pintuanOrderMessage != null && pintuanOrderMessage.getPintuanId() != null) { log.info("拼团订单信息消费:{}", pintuanOrderMessage); - // 拼团订单自动处理 + //拼团订单自动处理 orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn()); } } diff --git a/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java b/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java index 1e077800..7407971c 100644 --- a/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java +++ b/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java @@ -20,12 +20,12 @@ public class MybatisPlusConfig { return new PaginationInterceptor(); //阻断解析器,测试环境使用 -// PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); +// PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // -// List sqlParserList = new ArrayList<>(); -// // 攻击 SQL 阻断解析器、加入解析链 -// sqlParserList.add(new BlockAttackSqlParser()); -// paginationInterceptor.setSqlParserList(sqlParserList); -// return paginationInterceptor; +// List sqlParserList = new ArrayList<>(); +// //攻击 SQL 阻断解析器、加入解析链 +// sqlParserList.add(new BlockAttackSqlParser()); +// paginationInterceptor.setSqlParserList(sqlParserList); +// return paginationInterceptor; } } diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 4a0cf9c6..ff0b5210 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -5,10 +5,8 @@ import cn.lili.common.exception.ServiceException; import com.google.common.collect.ImmutableList; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; +import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; @@ -18,7 +16,6 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; -import java.lang.reflect.Method; /** * 流量拦截 @@ -43,40 +40,34 @@ public class LimitInterceptor { this.limitScript = limitScript; } - @Around("execution(public * *(..)) && @annotation(cn.lili.common.aop.limiter.annotation.LimitPoint)") - public Object interceptor(ProceedingJoinPoint pjp) throws Throwable { - MethodSignature signature = (MethodSignature) pjp.getSignature(); - Method method = signature.getMethod(); - LimitPoint limitPointAnnotation = method.getAnnotation(LimitPoint.class); + @Before("@annotation(limitPointAnnotation)") + public void interceptor(LimitPoint limitPointAnnotation) { LimitType limitType = limitPointAnnotation.limitType(); String name = limitPointAnnotation.name(); String key; int limitPeriod = limitPointAnnotation.period(); int limitCount = limitPointAnnotation.limit(); switch (limitType) { - case IP: - key = limitPointAnnotation.key() + getIpAddress(); - break; case CUSTOMER: key = limitPointAnnotation.key(); break; default: - key = StringUtils.upperCase(method.getName()); + key = limitPointAnnotation.key() + getIpAddress(); } ImmutableList keys = ImmutableList.of(StringUtils.join(limitPointAnnotation.prefix(), key)); try { Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod); - log.info("Access try count is {} for name={} and key = {}", count, name, key); - // 如果缓存里没有值,或者他的值小于限制频率 - if (count.intValue() <= limitCount) { - return pjp.proceed(); - } else { + log.info("限制请求{}, 当前请求{},缓存key{}", limitCount, count.intValue(), key); + //如果缓存里没有值,或者他的值小于限制频率 + if (count.intValue() >= limitCount) { throw new ServiceException("访问过于频繁,请稍后再试"); } } //如果从redis中执行都值判定为空,则这里跳过 catch (NullPointerException e) { - return pjp.proceed(); + return; + } catch (ServiceException e) { + throw e; } catch (Exception e) { throw new RuntimeException("服务器异常,请稍后再试"); } diff --git a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java index 1009fa09..ea814963 100644 --- a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java +++ b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java @@ -102,7 +102,7 @@ public class SystemLogAspect { //请求参数 systemLogVO.setMapToParams(logParams); //响应参数 此处数据太大了,所以先注释掉 -// systemLogVO.setResponseBody(JSONUtil.toJsonStr(rvt)); +// systemLogVO.setResponseBody(JSONUtil.toJsonStr(rvt)); //请求IP systemLogVO.setIp(IpUtils.getIpAddress(request)); //IP地址 diff --git a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java index cc21e89b..85ca4838 100644 --- a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java +++ b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java @@ -170,7 +170,7 @@ public class RedisCache implements Cache { @Override public Long cumulative(Object key, Object value) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // add 方法对应 PFADD 命令 + //add 方法对应 PFADD 命令 return operations.add(key, value); } @@ -179,7 +179,7 @@ public class RedisCache implements Cache { public Long counter(Object key) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // add 方法对应 PFADD 命令 + //add 方法对应 PFADD 命令 return operations.size(key); } @@ -198,7 +198,7 @@ public class RedisCache implements Cache { @Override public Long mergeCounter(Object... key) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // 计数器合并累加 + //计数器合并累加 return operations.union(key[0], key); } @@ -223,7 +223,7 @@ public class RedisCache implements Cache { */ @Override public void incrementScore(String sortedSetName, String keyword) { - // x 的含义请见本方法的注释 + //x 的含义请见本方法的注释 double x = 1.0; this.redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, x); } diff --git a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java index a257a2ba..b5cbfe4e 100644 --- a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java +++ b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java @@ -44,7 +44,7 @@ public abstract class BaseElasticsearchService { static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); - // 默认缓冲限制为100MB,此处修改为30MB。 + //默认缓冲限制为100MB,此处修改为30MB。 builder.setHttpAsyncResponseConsumerFactory(new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } @@ -88,7 +88,7 @@ public abstract class BaseElasticsearchService { protected void createIndexRequest(String index) { try { CreateIndexRequest request = new CreateIndexRequest(index); - // Settings for this index + //Settings for this index request.settings(Settings.builder().put("index.number_of_shards", elasticsearchProperties.getIndex().getNumberOfShards()).put("index.number_of_replicas", elasticsearchProperties.getIndex().getNumberOfReplicas())); //创建索引 @@ -308,13 +308,13 @@ public abstract class BaseElasticsearchService { PutMappingRequest request = new PutMappingRequest(index) .source(source, XContentType.JSON); -// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, -// RequestOptions.DEFAULT); +// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, +// RequestOptions.DEFAULT); // -// boolean acknowledged = putMappingResponse.isAcknowledged(); -// if (acknowledged) { -// log.error("Succeed to put mapping"); -// } +// boolean acknowledged = putMappingResponse.isAcknowledged(); +// if (acknowledged) { +// log.error("Succeed to put mapping"); +// } CountDownLatch latch = new CountDownLatch(1); AtomicReference response = new AtomicReference(); client.indices().putMappingAsync( diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 5d28b696..eee5a04c 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -34,6 +34,7 @@ public enum ResultCode { */ WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"), + VERIFICATION_EXIST(1002, "验证码服务异常"), /** * 分类 */ @@ -57,77 +58,119 @@ public enum ResultCode { GOODS_UPPER_ERROR(11004, "商品上架失败"), GOODS_AUTH_ERROR(11005, "商品审核失败"), POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"), + GOODS_SKU_SN_ERROR(11007, "商品SKU编号不能为空"), + GOODS_SKU_PRICE_ERROR(11008, "商品SKU价格不能小于等于0"), + GOODS_SKU_COST_ERROR(11009, "商品SKU成本价不能小于等于0"), + GOODS_SKU_WEIGHT_ERROR(11010, "商品重量不能为负数"), + GOODS_SKU_QUANTITY_ERROR(11011, "商品库存数量不能为负数"), /** * 参数 */ PARAMETER_SAVE_ERROR(12001, "参数添加失败"), + PARAMETER_UPDATE_ERROR(12002, "参数编辑失败"), /** * 规格 */ SPEC_SAVE_ERROR(13001, "规格修改失败"), + SPEC_UPDATE_ERROR(13002, "规格修改失败"), + SPEC_DELETE_ERROR(13003, "此规格已绑定分类不允许删除"), /** * 品牌 */ BRAND_SAVE_ERROR(14001, "品牌添加失败"), + BRAND_UPDATE_ERROR(14002, "品牌修改失败"), + BRAND_DISABLE_ERROR(14003, "品牌禁用失败"), + BRAND_DELETE_ERROR(14004, "品牌删除失败"), /** * 用户 */ USER_EDIT_SUCCESS(20001, "用户修改成功"), + USER_NOT_EXIST(20002, "用户不存在"), + USER_NOT_LOGIN(20003, "用户未登录"), + USER_AUTH_EXPIRED(20004, "用户已退出,请重新登录"), + USER_AUTHORITY_ERROR(20005, "权限不足"), + USER_CONNECT_LOGIN_ERROR(20006, "未找到登录信息"), + USER_NAME_EXIST(20007, "该用户名已被注册"), + USER_PHONE_EXIST(20008, "该手机号已被注册"), + USER_PHONE_NOT_EXIST(20009, "手机号不存在"), + USER_PASSWORD_ERROR(20010, "密码不正确"), + USER_NOT_PHONE(20011, "非当前用户的手机号"), + USER_CONNECT_ERROR(20012, "联合第三方登录,授权信息错误"), + USER_RECEIPT_REPEAT_ERROR(20013, "会员发票信息重复"), + USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"), + USER_EDIT_ERROR(20015, "用户修改失败"), + USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"), + USER_COLLECTION_EXIST(20017, "无法重复收藏"), + USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"), + DELETE_EXIST(2001, "无法重复收藏"), /** * 权限 */ PERMISSION_DEPARTMENT_ROLE_ERROR(21001, "角色已绑定部门,请逐个删除"), + PERMISSION_USER_ROLE_ERROR(21002, "角色已绑定管理员,请逐个删除"), + PERMISSION_MENU_ROLE_ERROR(21003, "菜单已绑定角色,请先删除或编辑角色"), + PERMISSION_DEPARTMENT_DELETE_ERROR(21004, "部门已经绑定管理员,请先删除或编辑管理员"), + PERMISSION_BEYOND_TEN(21005, "最多可以设置10个角色"), /** * 分销 */ DISTRIBUTION_CLOSE(22000, "分销功能关闭"), + DISTRIBUTION_NOT_EXIST(22001, "分销员不存在"), + DISTRIBUTION_IS_APPLY(22002, "分销员已申请,无需重复提交"), + DISTRIBUTION_AUDIT_ERROR(22003, "审核分销员失败"), + DISTRIBUTION_RETREAT_ERROR(22004, "分销员清退失败"), + DISTRIBUTION_CASH_NOT_EXIST(22005, "分销员提现记录不存在"), + DISTRIBUTION_GOODS_DOUBLE(22006, "不能重复添加分销商品"), /** * 购物车 */ CART_ERROR(30001, "读取结算页的购物车异常"), + CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动不存在错误"), + CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"), + SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"), /** diff --git a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java index abac16d0..09f4838f 100644 --- a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java +++ b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java @@ -67,24 +67,24 @@ public class GlobalControllerExceptionHandler { return ResultUtil.error(ResultCode.ERROR); } -// /** -// * 通用的接口映射异常处理方 -// */ -// @Override -// protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { -// if (ex instanceof MethodArgumentNotValidException) { -// MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex; -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg(exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status); -// } -// if (ex instanceof MethodArgumentTypeMismatchException) { -// MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex; -// logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName() -// + ",信息:" + exception.getLocalizedMessage()); -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("参数转换失败"), status); -// } -// ex.printStackTrace(); -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("未知异常,请联系管理员"), status); -// } +// /** +// * 通用的接口映射异常处理方 +// */ +// @Override +// protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { +// if (ex instanceof MethodArgumentNotValidException) { +// MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex; +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg(exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status); +// } +// if (ex instanceof MethodArgumentTypeMismatchException) { +// MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex; +// logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName() +// + ",信息:" + exception.getLocalizedMessage()); +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("参数转换失败"), status); +// } +// ex.printStackTrace(); +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("未知异常,请联系管理员"), status); +// } /** * bean校验未通过异常 diff --git a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java index 990bd0a6..cdc533e4 100644 --- a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java +++ b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java @@ -80,7 +80,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { * @return */ private String cleanXSS2(String value) { - // 移除特殊标签 + //移除特殊标签 value = value.replaceAll("<", "<").replaceAll(">", ">"); value = value.replaceAll("\\(", "(").replaceAll("\\)", ")"); value = value.replaceAll("'", "'"); @@ -93,40 +93,40 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { private String cleanXSS(String value) { if (value != null) { //推荐使用ESAPI库来避免脚本攻击,value = ESAPI.encoder().canonicalize(value); -// // 避免空字符串 -// value = value.replaceAll(" ", ""); - // 避免script 标签 +// //避免空字符串 +// value = value.replaceAll(" ", ""); + //避免script 标签 Pattern scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); - // 避免src形式的表达式 + //避免src形式的表达式 scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); - // 删除单个的 标签 + //删除单个的 标签 scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); - // 删除单个的