From 21718e351cab09c8f18af5d7aca8a04d149c5a8b Mon Sep 17 00:00:00 2001 From: xmzhao71 Date: Mon, 9 Oct 2023 15:13:00 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E4=BC=9A=E5=91=98=EF=BC=8C=E7=BB=9F=E8=AE=A1=E8=A7=A6?= =?UTF-8?q?=E8=BE=BE=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/config/SwaggerConfiguration.java | 47 +++++++++++++- .../iformall/config/SwaggerProperties.java | 42 ++++++++++++ .../src/main/resources/application-dev.yml | 2 +- .../domain/vo/cockpit/MonthDataMapping.java | 14 ++++ .../mapper/WxCUserBasicInfoMapper.java | 10 +++ .../iformall/mapper/WxUserVisitMapper.java | 10 +++ .../service/CockpitScreenService.java | 26 ++++++++ .../impl/CockpitScreenServiceImpl.java | 64 +++++++++++++------ .../java/com/iformall/utils/DateUtils.java | 2 +- .../mapper/WxCUserBasicInfoMapper.xml | 15 +++++ .../resources/mapper/WxUserVisitMapper.xml | 15 +++++ 11 files changed, 222 insertions(+), 25 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/domain/vo/cockpit/MonthDataMapping.java diff --git a/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java b/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java index eb422aaaa..2507480d1 100644 --- a/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java +++ b/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java @@ -18,9 +18,9 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Contact; +import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.paths.RelativePathProvider; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @@ -28,6 +28,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.servlet.ServletContext; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; @Configuration @@ -92,7 +93,9 @@ public class SwaggerConfiguration { Predicates.or(basePath) ) ) - .build(); + .build() + .securitySchemes(Collections.singletonList(securitySchema())) + .securityContexts(Collections.singletonList(securityContext())); // .groupName("a") // .pathMapping("/B"); } @@ -109,6 +112,44 @@ public class SwaggerConfiguration { .build(); } + /** + * 配置默认的全局鉴权策略的开关,通过正则表达式进行匹配;默认匹配所有URL + * + * @return + */ + private SecurityContext securityContext() { + return SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.regex(swaggerProperties.getAuthorization().getAuthRegex())) + .build(); + } + + /** + * 默认的全局鉴权策略 + * + * @return + */ + private List defaultAuth() { + ArrayList authorizationScopeList = new ArrayList<>(); + swaggerProperties.getAuthorization().getAuthorizationScopeList().forEach(authorizationScope -> + authorizationScopeList.add(new AuthorizationScope(authorizationScope.getScope(), authorizationScope.getDescription())) + ); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[authorizationScopeList.size()]; + return Collections.singletonList(SecurityReference.builder() + .reference(swaggerProperties.getAuthorization().getName()) + .scopes(authorizationScopeList.toArray(authorizationScopes)) + .build()); + } + + + private OAuth securitySchema() { + ArrayList authorizationScopeList = new ArrayList<>(); + swaggerProperties.getAuthorization().getAuthorizationScopeList().forEach(authorizationScope -> authorizationScopeList.add(new AuthorizationScope(authorizationScope.getScope(), authorizationScope.getDescription()))); + ArrayList grantTypes = new ArrayList<>(); + swaggerProperties.getAuthorization().getTokenUrlList().forEach(tokenUrl -> grantTypes.add(new ResourceOwnerPasswordCredentialsGrant(tokenUrl))); + return new OAuth(swaggerProperties.getAuthorization().getName(), authorizationScopeList, grantTypes); + } + // @Override // public void addViewControllers(ViewControllerRegistry registry) { // String prePath = swaggerProperties.getPrePath(); diff --git a/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java b/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java index b82b03a67..b43bae880 100644 --- a/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java +++ b/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java @@ -1,6 +1,7 @@ package com.iformall.config; import lombok.Data; +import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.ArrayList; @@ -61,6 +62,10 @@ public class SwaggerProperties { * 联系人信息 */ private Contact contact = new Contact(); + /** + * 全局统一鉴权配置 + **/ + private Authorization authorization = new Authorization(); @Data public static class Contact { @@ -76,6 +81,43 @@ public class SwaggerProperties { * 联系人email **/ private String email = ""; + } + + @Data + @NoArgsConstructor + public static class Authorization { + + /** + * 鉴权策略ID,需要和SecurityReferences ID保持一致 + */ + private String name = ""; + + /** + * 需要开启鉴权URL的正则 + */ + private String authRegex = "^.*$"; + + /** + * 鉴权作用域列表 + */ + private List authorizationScopeList = new ArrayList<>(); + + private List tokenUrlList = new ArrayList<>(); + } + + @Data + @NoArgsConstructor + public static class AuthorizationScope { + + /** + * 作用域名称 + */ + private String scope = ""; + + /** + * 作用域描述 + */ + private String description = ""; } } diff --git a/mallinkAdmin/src/main/resources/application-dev.yml b/mallinkAdmin/src/main/resources/application-dev.yml index c91d8f9d2..68229da56 100644 --- a/mallinkAdmin/src/main/resources/application-dev.yml +++ b/mallinkAdmin/src/main/resources/application-dev.yml @@ -216,7 +216,7 @@ swagger: license: Apache license-url: https://admintest.malls.iformall.com terms-of-service-url: https://admintest.malls.iformall.com - host: https://admintest.malls.iformall.com + host: localhost:9000 contact: name: 张三 url: https://admintest.malls.iformall.com diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/cockpit/MonthDataMapping.java b/mallinkService/src/main/java/com/iformall/domain/vo/cockpit/MonthDataMapping.java new file mode 100644 index 000000000..072723ac2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/cockpit/MonthDataMapping.java @@ -0,0 +1,14 @@ +package com.iformall.domain.vo.cockpit; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel(value = "每月统计数量") +@Data +public class MonthDataMapping { + @ApiModelProperty(value = "某年某月") + private String name; + @ApiModelProperty(value = "数量") + private Integer count; +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java index 0d1b7f1ed..1fcc1665f 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java @@ -8,6 +8,7 @@ import com.iformall.domain.vo.CUserBaseVo; import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.WxCUserBasicInfoVo; import com.iformall.domain.vo.cockpit.CountUserGenderVO; +import com.iformall.domain.vo.cockpit.MonthDataMapping; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -83,5 +84,14 @@ public interface WxCUserBasicInfoMapper extends CommonMapper + */ + List groupByDate(@Param("finalTenantId") String finalTenantId, @Param("years") List years); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxUserVisitMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxUserVisitMapper.java index c5e605eed..60a9084f1 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxUserVisitMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxUserVisitMapper.java @@ -4,6 +4,8 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.dto.MarkingCouponDataReportDto; import com.iformall.domain.po.WxUserVisit; import com.iformall.domain.vo.TouchUsersReportVo; +import com.iformall.domain.vo.cockpit.MonthDataMapping; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -17,4 +19,12 @@ public interface WxUserVisitMapper extends CommonMapper { List touchUsersReportData(WxUserVisit record); Long queryVisitUv(WxUserVisit record); + + /** + * 统计某年某月的uv数量 + * @param finalTenantId + * @param years + * @return {@link List}<{@link MonthDataMapping}> + */ + List groupByDate(@Param("finalTenantId") String finalTenantId, @Param("years") List years); } diff --git a/mallinkService/src/main/java/com/iformall/service/CockpitScreenService.java b/mallinkService/src/main/java/com/iformall/service/CockpitScreenService.java index be7193ce8..6d5fcf588 100644 --- a/mallinkService/src/main/java/com/iformall/service/CockpitScreenService.java +++ b/mallinkService/src/main/java/com/iformall/service/CockpitScreenService.java @@ -14,11 +14,37 @@ import java.util.List; * @date 2023-09-20 */ public interface CockpitScreenService { + /** + * 统计会员性别信息 + * + * @param tenantInfo + * @return {@link CountUserGenderVO} + */ CountUserGenderVO countUserGender(TenantEntity tenantInfo); + /** + * 统计商铺租赁信息 + * + * @param tenantInfo + * @return {@link CountShopVO} + */ CountShopVO countShop(TenantEntity tenantInfo); + /** + * 统计会员数量信息 + * + * @param tenantInfo + * @param years + * @return {@link List}<{@link CountMonthVO}> + */ List countUser(TenantEntity tenantInfo, List years); + /** + * 统计触达用户信息(uv) + * + * @param tenantInfo + * @param years + * @return {@link List}<{@link CountMonthVO}> + */ List countReachUser(TenantEntity tenantInfo, List years); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/CockpitScreenServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/CockpitScreenServiceImpl.java index 1eb5b600a..1dfeeb372 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/CockpitScreenServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/CockpitScreenServiceImpl.java @@ -4,14 +4,12 @@ import com.iformall.common.CommonConstant; import com.iformall.domain.dto.cockpit.CountShopByStatusDTO; import com.iformall.domain.dto.cockpit.CountUserByGenderDTO; import com.iformall.domain.po.base.TenantEntity; -import com.iformall.domain.vo.cockpit.CountMonthVO; -import com.iformall.domain.vo.cockpit.CountShopVO; -import com.iformall.domain.vo.cockpit.CountUserGenderVO; -import com.iformall.domain.vo.cockpit.MonthDataVO; +import com.iformall.domain.vo.cockpit.*; import com.iformall.enums.EnumShopStatus; import com.iformall.enums.EnumUserGender; import com.iformall.mapper.WxCUserBasicInfoMapper; import com.iformall.mapper.WxShopMapper; +import com.iformall.mapper.WxUserVisitMapper; import com.iformall.service.CockpitScreenService; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxMallService; @@ -34,14 +32,14 @@ import java.util.stream.Collectors; @Service public class CockpitScreenServiceImpl implements CockpitScreenService { - @Autowired - private WxCUserBasicInfoService cUserBasicInfoService; @Autowired private WxCUserBasicInfoMapper cUserBasicInfoMapper; @Autowired private WxMallService wxMallService; @Autowired private WxShopMapper wxShopMapper; + @Autowired + private WxUserVisitMapper wxUserVisitMapper; @Override public CountUserGenderVO countUserGender(TenantEntity tenantEntity) { @@ -106,20 +104,25 @@ public class CockpitScreenServiceImpl implements CockpitScreenService { } List result = new ArrayList<>(); - years.forEach(year -> { - CountMonthVO countMonthVO = new CountMonthVO(); - List vos = new ArrayList<>(); - for (int i = 0; i < 12; i++) { - MonthDataVO vo = new MonthDataVO(); - vo.setMonth(i + 1); - Integer count = cUserBasicInfoMapper.countUserByMonth(tenantInfo.getFinalTenantId(), year, i + 1); - vo.setCount(count); - vos.add(vo); + List mappings = cUserBasicInfoMapper.groupByDate(tenantInfo.getFinalTenantId(), years); + Map mappingMap = mappings.stream().collect(Collectors.toMap(MonthDataMapping::getName, MonthDataMapping::getCount)); + for (int i = 0; i < years.size(); i++) { + CountMonthVO vo = new CountMonthVO(); + List months = new ArrayList<>(); + + for (int j = 0; j < 12; j++) { + MonthDataVO month = new MonthDataVO(); + month.setMonth(j + 1); + Integer count = mappingMap.get(years.get(i) + "-" + DateUtils.getMonthStr(j + 1)); + count = count != null ? count : 0; + month.setCount(count); + months.add(month); } - countMonthVO.setYear(year); - countMonthVO.setMonths(vos); - result.add(countMonthVO); - }); + vo.setYear(years.get(i)); + vo.setMonths(months); + result.add(vo); + } + return result; } @@ -128,6 +131,27 @@ public class CockpitScreenServiceImpl implements CockpitScreenService { if (CollectionUtils.isEmpty(years)) { years.add(DateUtils.getYear(new Date())); } - return null; + + List result = new ArrayList<>(); + List mappings = wxUserVisitMapper.groupByDate(tenantInfo.getFinalTenantId(), years); + Map mappingMap = mappings.stream().collect(Collectors.toMap(MonthDataMapping::getName, MonthDataMapping::getCount)); + for (int i = 0; i < years.size(); i++) { + CountMonthVO vo = new CountMonthVO(); + List months = new ArrayList<>(); + + for (int j = 0; j < 12; j++) { + MonthDataVO month = new MonthDataVO(); + month.setMonth(j + 1); + Integer count = mappingMap.get(years.get(i) + "-" + DateUtils.getMonthStr(j + 1)); + count = count != null ? count : 0; + month.setCount(count); + months.add(month); + } + vo.setYear(years.get(i)); + vo.setMonths(months); + result.add(vo); + } + + return result; } } diff --git a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java index 85ace34ad..0a0c91b60 100755 --- a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java @@ -993,7 +993,7 @@ public class DateUtils { public static String getMonthStr(int month) { if (month < 10) { - return "0" + String.valueOf(month); + return "0" + month; } else { return String.valueOf(month); } diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 45535c377..2739f85f3 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -581,6 +581,21 @@ FROM wx_c_user_basic_info WHERE final_tenant_id = #{finalTenantId} AND DATE_FORMAT(create_date, '%Y') = #{year} AND DATE_FORMAT(create_date, '%m') = #{month} + diff --git a/mallinkService/src/main/resources/mapper/WxUserVisitMapper.xml b/mallinkService/src/main/resources/mapper/WxUserVisitMapper.xml index 79aa71ac5..5cab535cf 100644 --- a/mallinkService/src/main/resources/mapper/WxUserVisitMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxUserVisitMapper.xml @@ -164,5 +164,20 @@ and day_date <= #{endTime} +