Merge remote-tracking branch 'origin/test-training2' into test-training2
This commit is contained in:
commit
b4a7bef3f6
Binary file not shown.
7
pom.xml
7
pom.xml
@ -146,13 +146,6 @@
|
||||
<artifactId>protobuf-java</artifactId>
|
||||
<version>3.19.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>club.joylink</groupId>
|
||||
<artifactId>iscs-message</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/libs/iscs-message-0.0.1-SNAPSHOT.jar</systemPath>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -105,35 +105,46 @@ public class PaperUserController {
|
||||
/**
|
||||
* 分页查询某个试卷蓝图的所有用户试卷基本信息
|
||||
*/
|
||||
@PostMapping("/user/page/composition")
|
||||
/* @PostMapping("/user/page/composition")
|
||||
public PageVO<PaperUserInfoVo> findPaperUserByPage(@RequestBody FindPaperUserForCompositionReqVo req, @RequestAttribute AccountVO user) {
|
||||
return this.paperUserFindPageService.findPaperUserByPage(req);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 查看某个班级的某个试卷蓝图的所有学生试卷
|
||||
*/
|
||||
@PostMapping("/user/page/class")
|
||||
public PageVO<PaperUserInfoVo> findPaperUserByPageForClass(@RequestBody FindPaperUserForClassReqVo req, @RequestAttribute AccountVO user) {
|
||||
@GetMapping("/user/page")
|
||||
public PageVO<PageUserDetailVO> findPaperUserByPageForClass(@ModelAttribute PageUserDetailQuery req) {
|
||||
return this.paperUserFindPageService.findPaperUserByPageForClass(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看某个班级的某个试卷蓝图的所有学生试卷 (柱状图)
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/user/curve")
|
||||
public CurveForClassVO curveForClass(@ModelAttribute PageUserDetailQuery req) {
|
||||
return this.paperUserFindPageService.curveForClass(req);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查看某个账户的某个试卷蓝图的用户试卷
|
||||
*/
|
||||
@PostMapping("/user/list/account")
|
||||
/* @PostMapping("/user/list/account")
|
||||
public List<PaperUserInfoVo> findPaperUserForAccount(@RequestBody FindPaperUserForAccountReqVo req, @RequestAttribute AccountVO user) {
|
||||
return this.paperUserFindPageService.findPaperUserForAccount(req);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 查看组织的某个账户的某个试卷蓝图的用户试卷
|
||||
*/
|
||||
@PostMapping("/{orgId}/user/list/account")
|
||||
/* @PostMapping("/{orgId}/user/list/account")
|
||||
public List<PaperUserInfoVo> findOrgPaperUserForAccount(@PathVariable("orgId") Long orgId, @RequestBody FindPaperUserForAccountReqVo req, @RequestAttribute AccountVO user) {
|
||||
req.setOrgId(orgId);
|
||||
return this.paperUserFindPageService.findPaperUserForAccount(req);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 查看组织下某个类型题的数量
|
||||
|
@ -3,13 +3,30 @@ package club.joylink.rtss.dao.paper;
|
||||
import club.joylink.rtss.entity.paper.PaperUser;
|
||||
import club.joylink.rtss.entity.paper.PaperUserExample;
|
||||
import java.util.List;
|
||||
|
||||
import club.joylink.rtss.vo.paper.CurveForClassVO;
|
||||
import club.joylink.rtss.vo.paper.PageUserDetailQuery;
|
||||
import club.joylink.rtss.vo.paper.PageUserDetailVO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Mapper
|
||||
@Repository
|
||||
public interface PaperUserDAO {
|
||||
|
||||
|
||||
@Select("<script>select " +
|
||||
" C.nickname,C.id as user_id,C.account,B.score,B.start_time,B.end_time" +
|
||||
" from (" +
|
||||
"select * from org_user where 1 = 1 and org_id = #{query.orgId} and role = #{query.orgRole} ) A " +
|
||||
" left join ( select B.user_id ,B.score,B.start_time,B.end_time from " +
|
||||
" (select max(id) as id from rts_paper_user where pc_id = #{query.pcId} GROUP BY user_id ) A" +
|
||||
" INNER JOIN rts_paper_user B on A.id = B.id ) B on A.user_id = B.user_id " +
|
||||
" left join sys_account C on A.user_id = C.id </script>")
|
||||
List<PageUserDetailVO> selectDetail(@Param("query") PageUserDetailQuery query);
|
||||
|
||||
long countByExample(PaperUserExample example);
|
||||
|
||||
int deleteByExample(PaperUserExample example);
|
||||
|
@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository;
|
||||
@Mapper
|
||||
@Repository
|
||||
public interface AcPermissionDAO {
|
||||
@Insert("<script> insert into rts_permission (id,project_code, map_id, permission_type, \n" +
|
||||
@Insert("<script> insert into rts_permission (id,project_code, map_id, permission_type, " +
|
||||
" `name`, des, creator_id, create_time, update_time,is_sync)" +
|
||||
" values (#{record.id,jdbcType=BIGINT},#{record.projectCode,jdbcType=VARCHAR}, #{record.mapId,jdbcType=BIGINT}" +
|
||||
", #{record.permissionType,jdbcType=INTEGER}," +
|
||||
|
@ -21,6 +21,11 @@ public class PaperUser implements Serializable {
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 组织id
|
||||
*/
|
||||
private Long orgId;
|
||||
|
||||
/**
|
||||
* 生成用户试卷的paper_compostion的id
|
||||
*/
|
||||
|
@ -245,6 +245,66 @@ public class PaperUserExample {
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdIsNull() {
|
||||
addCriterion("org_id is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdIsNotNull() {
|
||||
addCriterion("org_id is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdEqualTo(Long value) {
|
||||
addCriterion("org_id =", value, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdNotEqualTo(Long value) {
|
||||
addCriterion("org_id <>", value, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdGreaterThan(Long value) {
|
||||
addCriterion("org_id >", value, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdGreaterThanOrEqualTo(Long value) {
|
||||
addCriterion("org_id >=", value, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdLessThan(Long value) {
|
||||
addCriterion("org_id <", value, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdLessThanOrEqualTo(Long value) {
|
||||
addCriterion("org_id <=", value, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdIn(List<Long> values) {
|
||||
addCriterion("org_id in", values, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdNotIn(List<Long> values) {
|
||||
addCriterion("org_id not in", values, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdBetween(Long value1, Long value2) {
|
||||
addCriterion("org_id between", value1, value2, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andOrgIdNotBetween(Long value1, Long value2) {
|
||||
addCriterion("org_id not between", value1, value2, "orgId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andPcIdIsNull() {
|
||||
addCriterion("pc_id is null");
|
||||
return (Criteria) this;
|
||||
|
@ -1,9 +1,10 @@
|
||||
package club.joylink.rtss.iscs.controller;
|
||||
|
||||
import club.joylink.iscs.model.data.PageDataModelProto;
|
||||
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.iscs.convert.PageDataModelConvertor;
|
||||
import club.joylink.rtss.iscs.entity.IscsModelData;
|
||||
import club.joylink.rtss.iscs.proto.model.data.PageDataModelProto;
|
||||
import club.joylink.rtss.iscs.services.IscsModelDataService;
|
||||
import club.joylink.rtss.iscs.vo.FindIscsModelDataBasicInfoByPageReqVo;
|
||||
import club.joylink.rtss.iscs.vo.IscsModelDataBasicInfo;
|
||||
|
@ -1,10 +1,11 @@
|
||||
package club.joylink.rtss.iscs.convert;
|
||||
|
||||
import club.joylink.iscs.model.data.DataModelMapProto;
|
||||
import club.joylink.iscs.model.data.PageDataModelProto;
|
||||
|
||||
import club.joylink.rtss.iscs.entity.IscsModelData;
|
||||
import club.joylink.rtss.iscs.memory.model.ModelMemory;
|
||||
import club.joylink.rtss.iscs.memory.model.ModelMemoryId;
|
||||
import club.joylink.rtss.iscs.proto.model.data.DataModelMapProto;
|
||||
import club.joylink.rtss.iscs.proto.model.data.PageDataModelProto;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
public class PageDataModelConvertor {
|
||||
|
@ -0,0 +1,34 @@
|
||||
package club.joylink.rtss.iscs.convert;
|
||||
|
||||
import com.google.protobuf.Timestamp;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* java 时间与 proto时间间的相互转换
|
||||
*/
|
||||
@Component
|
||||
public class TimeProtoConvertor {
|
||||
private static TimeZone timeZone;
|
||||
|
||||
//如"GMT+8"
|
||||
@Value("${spring.jackson.time-zone}")
|
||||
public void setZoneId(String zoneId) {
|
||||
TimeProtoConvertor.timeZone = TimeZone.getTimeZone(ZoneId.of(zoneId));
|
||||
}
|
||||
|
||||
public static Timestamp.Builder convertFrom(LocalDateTime from) {
|
||||
final Instant instant = from.toInstant(ZoneOffset.ofTotalSeconds(timeZone.getRawOffset() / 1000));
|
||||
return Timestamp.newBuilder().setSeconds(instant.getEpochSecond()).setNanos(instant.getNano());
|
||||
}
|
||||
|
||||
public static LocalDateTime convertFrom(Timestamp from) {
|
||||
return LocalDateTime.ofInstant(Instant.ofEpochSecond(from.getSeconds(), from.getNanos()), timeZone.toZoneId());
|
||||
}
|
||||
}
|
@ -1,52 +1,142 @@
|
||||
package club.joylink.rtss.iscs.memory;
|
||||
|
||||
import club.joylink.iscs.model.data.PageDataModelProto.PageDataModel;
|
||||
import club.joylink.iscs.model.status.soe.SoeProto;
|
||||
|
||||
import club.joylink.rtss.iscs.convert.PageDataModelConvertor;
|
||||
import club.joylink.rtss.iscs.convert.TimeProtoConvertor;
|
||||
import club.joylink.rtss.iscs.entity.IscsModelData;
|
||||
import club.joylink.rtss.iscs.memory.model.ModelMemory;
|
||||
import club.joylink.rtss.iscs.memory.model.ModelMemoryId;
|
||||
import club.joylink.rtss.iscs.proto.model.data.DataModelProto;
|
||||
import club.joylink.rtss.iscs.proto.model.data.PageDataModelProto;
|
||||
import club.joylink.rtss.iscs.proto.model.status.soe.SoeProto;
|
||||
import com.google.protobuf.Timestamp;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
/**
|
||||
* ISCS运行时存储管理
|
||||
*/
|
||||
public class MemoryManager {
|
||||
private final AtomicLong actionEvtId = new AtomicLong(1);
|
||||
private final AtomicLong alarmEvtId = new AtomicLong(1);
|
||||
/**
|
||||
* ISCS的页面对应的模型数据
|
||||
*/
|
||||
private Map<ModelMemoryId, ModelMemory> modelMemories = new HashMap<>();
|
||||
private final Map<ModelMemoryId, ModelMemory> modelMemories = new HashMap<>();
|
||||
/**
|
||||
* ISCS的设备产生的动作事件
|
||||
*/
|
||||
private LinkedList<SoeProto.ActionEvent.Builder> actionEvents = new LinkedList<>();
|
||||
private final LinkedList<SoeProto.ActionEvent.Builder> actionEvents = new LinkedList<>();
|
||||
/**
|
||||
* ISCS的设备报警事件
|
||||
* ISCS的设备报警事件(注意重复报警处理)
|
||||
*/
|
||||
private LinkedList<SoeProto.AlarmEvent.Builder> alarmEvents = new LinkedList<>();
|
||||
private final LinkedList<SoeProto.AlarmEvent.Builder> alarmEvents = new LinkedList<>();
|
||||
//////////////////////////////////////////////报警事件//////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////动作事件//////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* 添加产生的动作事件
|
||||
*/
|
||||
public void addActionEvent(DataModelProto.SystemType system, String place, String deviceName, String signalPointName, String soeAction) {
|
||||
synchronized (actionEvents) {
|
||||
final SoeProto.ActionEvent.Builder actEvt = SoeProto.ActionEvent.newBuilder();
|
||||
actEvt.setEvtId(actionEvtId.getAndIncrement());
|
||||
actEvt.setCreateTime(TimeProtoConvertor.convertFrom(LocalDateTime.now()));
|
||||
actEvt.setSystem(system);
|
||||
actEvt.setPlace(place);
|
||||
actEvt.setDeviceName(deviceName);
|
||||
actEvt.setSignalPointName(signalPointName);
|
||||
actEvt.setSoeAction(soeAction);
|
||||
this.actionEvents.add(actEvt);//这样actionEvents内元素是按时间先后添加的
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据条件过滤获取设备产生的动作事件
|
||||
* <p>
|
||||
* 查询条件:时间、场所、设备名称;
|
||||
* 注意当设备名称为null时表示所有设备
|
||||
*/
|
||||
public SoeProto.ActionSoe.Builder getActionSoe(LocalDateTime startTime, LocalDateTime endTime, String place, String deviceName) {
|
||||
synchronized (actionEvents) {
|
||||
final SoeProto.ActionSoe.Builder actSoe = SoeProto.ActionSoe.newBuilder();
|
||||
//
|
||||
long start = TimeProtoConvertor.convertFrom(startTime).build().getSeconds();
|
||||
long end = TimeProtoConvertor.convertFrom(endTime).build().getSeconds();
|
||||
if (start > end) {
|
||||
long temp = start;
|
||||
start = end;
|
||||
end = temp;
|
||||
}
|
||||
//
|
||||
SoeProto.ActionEvent.Builder actEvt = null;
|
||||
Iterator<SoeProto.ActionEvent.Builder> it = actionEvents.descendingIterator();
|
||||
boolean findByTime = false;
|
||||
while (it.hasNext()) {
|
||||
actEvt = it.next();
|
||||
final long actTime = actEvt.getCreateTime().getSeconds();
|
||||
final boolean isTime = start == end ? actTime == start : actTime >= start && actTime <= end;
|
||||
if (isTime) {
|
||||
findByTime = true;
|
||||
if (null == deviceName || deviceName.equals(actEvt.getDeviceName())) {
|
||||
if (place.equals(actEvt.getPlace())) {
|
||||
actSoe.addActions(actEvt);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (findByTime) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//
|
||||
return actSoe;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理过期的动作事件(默认只保留7天的)
|
||||
*/
|
||||
public void clearActionEvents() {
|
||||
synchronized (actionEvents) {
|
||||
final Timestamp deadTime = TimeProtoConvertor.convertFrom(LocalDateTime.now().minusDays(7)).build();
|
||||
SoeProto.ActionEvent.Builder actEvt = null;
|
||||
while (null != (actEvt = actionEvents.peekFirst())) {//时间由先到后顺序
|
||||
if (actEvt.getCreateTime().getSeconds() <= deadTime.getSeconds()) {//只精确到秒
|
||||
actionEvents.removeFirst();
|
||||
} else {//由于是按自然时间顺序的
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
///////////////////////////////////////////////页面模型数据//////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* 添加从数据库加载的页面模型数据
|
||||
*/
|
||||
public void addModelData(IscsModelData md) {
|
||||
synchronized (modelMemories) {
|
||||
final ModelMemory mm = ModelMemory.create(md);
|
||||
modelMemories.put(mm.mmId(), mm);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据页面坐标获取页面模型数据
|
||||
*/
|
||||
public PageDataModel.Builder getModelData(String system, String view, String place) {
|
||||
public PageDataModelProto.PageDataModel.Builder getModelData(String system, String view, String place) {
|
||||
synchronized (modelMemories) {
|
||||
final ModelMemory modelMemory = modelMemories.get(new ModelMemoryId(system, view, place));
|
||||
if (null != modelMemory) {
|
||||
return PageDataModelConvertor.convertFrom(modelMemory);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
package club.joylink.rtss.iscs.memory.model;
|
||||
|
||||
import club.joylink.iscs.model.data.DataModelMapProto;
|
||||
import club.joylink.iscs.model.data.DataModelProto;
|
||||
|
||||
import club.joylink.rtss.iscs.entity.IscsModelData;
|
||||
import club.joylink.rtss.iscs.proto.model.data.DataModelMapProto;
|
||||
import club.joylink.rtss.iscs.proto.model.data.DataModelProto;
|
||||
import com.google.protobuf.GeneratedMessageV3;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
package club.joylink.rtss.iscs.memory.model;
|
||||
|
||||
import club.joylink.iscs.model.data.DataModelMapProto;
|
||||
import club.joylink.iscs.model.data.DataModelProto;
|
||||
|
||||
import club.joylink.rtss.iscs.proto.model.data.DataModelMapProto;
|
||||
import club.joylink.rtss.iscs.proto.model.data.DataModelProto;
|
||||
import com.google.protobuf.GeneratedMessageV3;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user