当前位置: 首页 > news >正文

在线制作图片加文字免费软件seo基础入门视频教程

在线制作图片加文字免费软件,seo基础入门视频教程,自己做网站需要啥,wordpress不刷新需求: 有时候我们在查询mapper层时,有时候可能由于入参数据过大或者查询的范围较大,导致查询性能较慢,此时 我们需要将原本的查询按照一定规则将查询范围进行切面,然后分片查询,最后将查询结果进行组装合并…

需求:

        有时候我们在查询mapper层时,有时候可能由于入参数据过大或者查询的范围较大,导致查询性能较慢,此时 我们需要将原本的查询按照一定规则将查询范围进行切面,然后分片查询,最后将查询结果进行组装合并

1,自定义注解


import com.taia.yms.aop.reponse.inter.MapperRequestSlicesInterface;
import java.lang.annotation.*;/*** 主要针对 查询 mapper 时,使用一定规则进行切片后,按照指定并发个数进行mapper查询,然后再汇总结果*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MapperRequestSlices {/*** 指定执行规则的方法,默认方法为:asyncExecute* @return*/String method() default "asyncRequestExecute";Class<? extends MapperRequestSlicesInterface> operation();
}

2,定义切片规则接口


/*** 主要针对mapper层查询,需要按照自定义规则 进行分片并发查询,提升效率* @param <T>*/
public interface MapperRequestSlicesInterface<R,T> {R asyncRequestExecute(Object request);}

3,编写核心切面处理类


import com.taia.yms.aop.reponse.inter.MapperRequestSlicesInterface;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;@Component
@Aspect
@Slf4j
public class MapperRequestSlicesAspect {@Pointcut("execution(* com.taia.yms.mapper.*.*(..)) && @annotation(com.taia.yms.aop.reponse.MapperRequestSlices)")private void pointCut() {//方法为空,仅做签名}//对切点方法进行前置增强,就是在调用切点方法前进行做一些必要的操作,这就成为增强@Around("pointCut()")public Object getRes(ProceedingJoinPoint joinPoint) throws Throwable {// 获取被拦截的方法签名MethodSignature signature = (MethodSignature) joinPoint.getSignature();// 获取被拦截的方法Method method = signature.getMethod();Object[] objects = joinPoint.getArgs();Object target = joinPoint.getTarget();Class<?> returnType = method.getReturnType();//针对 返回值是集合的场景,便于后期切片后汇总if(!returnType.getTypeName().equalsIgnoreCase(List.class.getTypeName())){return joinPoint.proceed();}MapperRequestSlices annotation = method.getAnnotation(MapperRequestSlices.class);// 查找并获取注解try{// 读取注解的属性Class<? extends MapperRequestSlicesInterface> operation = annotation.operation();MapperRequestSlicesInterface operationInstance = operation.getDeclaredConstructor().newInstance();String methoded = annotation.method();Method operationMethod = operation.getDeclaredMethod(methoded, Object.class);Object obj = operationMethod.invoke(operationInstance, objects);//如果切分的结果只有一个,那么还是按照原有的查询来if(!(obj instanceof List && obj != null)){return joinPoint.proceed();}List<Object> result =((List<?>) obj).stream().flatMap(v -> {try {return ((List<Object>)(method.invoke(target, v))).stream();} catch (Exception e) {log.error("类[{}]的方法[{}]执行失败,报错:{}",target.getClass().getName(),method.getName(),e.getMessage());throw new RuntimeException(e);}}).collect(Collectors.toList());return result;}catch (Throwable e){log.error("类[{}]的方法[{}]执行失败,报错:{}",annotation.operation().getName(),annotation.method(),e.getMessage());return joinPoint.proceed();}}}

4,编写切片规则实现类


import com.taia.yms.aop.reponse.inter.MapperRequestSlicesInterface;
import com.taia.yms.entity.po.QualityViewPo;
import com.taia.yms.entity.requestbody.SummarySearchRequestBody;
import com.taia.yms.entity.vo.DataTypeSlice;
import com.taia.yms.entity.vo.DataTypeVo;
import com.taia.yms.enums.RangeTypeEnum;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;public class DataByTime2ReqSlice implements MapperRequestSlicesInterface<List<SummarySearchRequestBody>,List<QualityViewPo>> {@Overridepublic List<SummarySearchRequestBody> asyncRequestExecute(Object request) {if(request == null){return null;}SummarySearchRequestBody requestBody = (SummarySearchRequestBody) request;//按 天统计不考虑if(RangeTypeEnum.DAY.getType().equalsIgnoreCase(requestBody.getRangeType())){return null;}DataTypeVo dataTypeVo = requestBody.getDataTypeVo();if(dataTypeVo == null || CollectionUtils.isEmpty(dataTypeVo.getDataTypeSliceList())){return null;}List<DataTypeSlice> dataTypeSliceList = dataTypeVo.getDataTypeSliceList();dataTypeSliceList.stream().sorted();List<SummarySearchRequestBody> bodyList = dataTypeSliceList.stream().map(v -> {SummarySearchRequestBody summarySearchRequestBody = new SummarySearchRequestBody();BeanUtils.copyProperties(requestBody, summarySearchRequestBody);summarySearchRequestBody.setStartDate(v.getStartTime());summarySearchRequestBody.setEndDate(v.getEndTime());return summarySearchRequestBody;}).collect(Collectors.toList());return bodyList;}}

5,编写相关对象类


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;/*** @ClassName QualityViewPo* Date 2023/4/25 11:47* Version 1.0**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class QualityViewPo {private Integer countNum;private String dateTime;private Integer successFilesNum;private Integer failFilesNum;private Integer loadingFilesNum;private Integer qualityScore;private String fabProductVersion;private String station;
}

import com.taia.yms.entity.ExportPageReqBody;
import com.taia.yms.entity.vo.DataTypeVo;
import com.taia.yms.validgroups.summarysearch.DataProgressSummaryGroup;
import com.taia.yms.validgroups.summarysearch.TodayBoardGroup;
import com.taia.yms.validgroups.summarysearch.TrendsBoardGroup;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.sql.Timestamp;
import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class SummarySearchRequestBody extends ExportPageReqBody {/**时间区间 day/week/month*/@Valid@NotEmpty(message = "时间范围为空", groups = {DataProgressSummaryGroup.class, TrendsBoardGroup.class})@Pattern(regexp = "day|week|month|custom|year|all",message = "时间范围不符合正则", groups = {DataProgressSummaryGroup.class, TrendsBoardGroup.class})private String rangeType;/**开始时间*/@NotNull(message = "开始时间为空", groups = {DataProgressSummaryGroup.class, TrendsBoardGroup.class})private Timestamp startDate;/**结束时间*/@NotNull(message = "结束时间为空", groups = {DataProgressSummaryGroup.class, TrendsBoardGroup.class})private Timestamp endDate;/**数据类型 WAT/INLINE/CP-BIN/DEFECT*/@Valid@NotNull(message = "数据类型为空", groups = {DataProgressSummaryGroup.class, TodayBoardGroup.class, TrendsBoardGroup.class})private List<@NotEmpty(message = "数据类型为空", groups = {DataProgressSummaryGroup.class, TodayBoardGroup.class, TrendsBoardGroup.class}) String> stations;/**产品数据 *///@NotNull(message = "产品数据为空", groups = {DataProgressSummaryGroup.class, TodayBoardGroup.class, TrendsBoardGroup.class})private List<String> fabProductVersions;private DataTypeVo dataTypeVo;
}

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;/*** @ClassName ExportPageReqBody* 导出 和 分页数据**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class ExportPageReqBody {/**页码*/@ApiModelProperty(example = "1")private Integer pageNum = 1;/**页面大小*/@ApiModelProperty(example = "10")private Integer pageSize = 10;/**1-导出excel, 0-导出CSV*/private String isExcel;/**1-只导出表头,0或空-导出表头和数据*/private String isEmpty;/**1-配置数据, 0或空-待添加配置数据*/private String isConfig;/**选择导出,有值时只导出选中的id*/private List<Long> selectedIds;/**当前登录用户的userId*/private String userNo;
}

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DataTypeVo {private List<String> timeTable;private List<DataTypeSlice> dataTypeSliceList;}

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.sql.Timestamp;@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class DataTypeSlice {private Timestamp startTime;private Timestamp endTime;
}

http://www.yayakq.cn/news/407702/

相关文章:

  • 北京定制网站价格wordpress 浮动播放器
  • php网站说明安徽建设人才网官网
  • 免费服务器的网站有哪些大气精美网站设计工作室织梦模板(附赠精美织梦后台模板)
  • 做网站的会什么工商注册公司查名
  • 电子商务网站建设结构分析可以查企业备案的网站
  • 广告型网站怎么做wordpress大前端2.0
  • 做企业网站模板可以seo高新网站开发建设多少钱
  • 网站模板分类新闻页面设计
  • 湖南省交通建设质安监督局网站广告设计公司有哪些渠道通路
  • 有域名如何搭建网站网站底部的备案信息修改
  • 建设人才库网站宁波网站优化软件
  • 下载asp网站杭州做网站找力果
  • 建设银行网站联系电话concrete wordpress
  • 网站数据分析建设wordpress分类添加轮播图
  • 有哪个网站可以学做吃的ps设计网页
  • 咸阳做网站xymokj沈阳军成网站建设
  • 简述电子商务网站建设方案自媒体平台排行榜前十名
  • 网站目录提交济南网站建设公司选济南网络
  • 网站推广属于哪些wordpress导入火车头
  • 上海网站建设公公司域名跟空间都有了怎么做网站
  • 九江做网站哪家好校园二手网站建设目的意义
  • 广州市网站优化公司电影新网站如何做seo优化
  • 宁波行业网站建设便宜的游戏服务器租用
  • asp音乐网站开发教程阜新做网站
  • 网站建设价类型中国公司名录大全
  • 建设银行绑定手机号码网站拖拽式在线网页制作工具
  • asp.net 大型网站开发如何在各种网站投放广告
  • 网站排名站长之家wordpress 链接 中文
  • 有了域名 做网站为什么wordpress菜单编辑不
  • 紫云网站建设成为网站有哪些网址?