Commit ba8ba692 authored by suhuiguang's avatar suhuiguang

1、巡检提交优化第一版500并发9秒

parent 125ff0a6
......@@ -10,6 +10,7 @@ import com.yeejoin.amos.boot.biz.common.interceptors.PermissionInterceptorContex
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
......@@ -30,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.typroject.tyboot.core.auth.exception.AuthException;
......@@ -39,7 +41,7 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
......@@ -112,6 +114,9 @@ public class ControllerAop {
urls.add("/tcm/base-individuality/person/register");
urls.add("/tcm/userInfo/arrangement-statistic");
urls.add("/tcm/userInfo/getPersonType");
// urls.add("/patrol/api/check/checkCalendarForWx");
urls.add("/patrol/api/check/saveRecordAll");
urls.add("/patrol/api/planTask/queryPlanTaskNew");
// 获取请求路径
for (String uri : urls) {
Pattern p = Pattern.compile(uri);
......@@ -140,16 +145,23 @@ public class ControllerAop {
// 验证token有效性,防止token失效
AgencyUserModel userModel;
try {
// StopWatch stopWatch = new StopWatch();
// stopWatch.start("1");
String authToken = RedisKey.buildReginKey(RequestContext.getExeUserId(), token);
if (redisUtils.hasKey(authToken)) {
logger.info("登录命中缓存 ,直接返回!!===========>");
return;
}
FeignClientResult<AgencyUserModel> agencyUserModel = Privilege.agencyUserClient.getme();
userModel = agencyUserModel.getResult();
if (userModel == null) {
throw new Exception("无法获取用户信息");
}
RequestContext.setExeUserId(userModel.getUserId());
// stopWatch.stop();
// logger.info("get auth token count time===========> {}", stopWatch.getTotalTimeSeconds());
// stopWatch.start("2");
// FeignClientResult<AgencyUserModel> agencyUserModel = Privilege.agencyUserClient.getme();
// userModel = agencyUserModel.getResult();
// if (userModel == null) {
// throw new Exception("无法获取用户信息");
// }
// RequestContext.setExeUserId(userModel.getUserId());
// logger.info("get me count time===========> {}", stopWatch.getTotalTimeSeconds());
} catch (Exception e) {
// 删除失效token缓存
logger.info("catch pattern before==========>" + pattern);
......@@ -157,7 +169,8 @@ public class ControllerAop {
logger.info("catch pattern after==========>" + pattern);
throw new RuntimeException(e.getMessage());
}
saveUserRedis(userModel, token);
// saveUserRedis(userModel, token);
saveUserRedis();
} else {
throw new AuthException("请求未包含认证信息.");
}
......@@ -172,9 +185,10 @@ public class ControllerAop {
DepartmentBo department = new DepartmentBo();
RoleBo role = new RoleBo();
// 平台更新 人员部门可能为NULL 导致redis缓存不到人员信息
Map<Long, List<DepartmentModel>> mapDepartments = new HashMap<>();
Map<Long, List<DepartmentModel>> mapDepartments;
DepartmentModel departmentM = new DepartmentModel();
CompanyModel companyM = user.getCompanys() != null ? user.getCompanys().get(0) : null;
Bean.copyExistPropertis(companyM, company);
if (!ValidationUtil.isEmpty(user.getCompanyDepartments())) {
mapDepartments = user.getCompanyDepartments();
......@@ -208,6 +222,83 @@ public class ControllerAop {
redisUtils.set(authToken, JSONObject.toJSONString(reginParams), redisRegionTimeSecond);
}
private void saveUserRedis() {
String authToken = RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken());
if (redisUtils.hasKey(authToken)) {
return;
}
CompanyBo company = new CompanyBo();
DepartmentBo department = new DepartmentBo();
RoleBo role = new RoleBo();
StopWatch stopWatch0 = new StopWatch();
stopWatch0.start();
StopWatch stopWatch1 = new StopWatch();
stopWatch1.start("用户企业部门人员信息查询任务====>");
// 查询当前人所在第一个公司信息
List<CompanyModel> companyModels = FeignUtil.remoteCall(() -> Privilege.companyClient.queryListByChild(RequestContext.getExeUserId()));
stopWatch1.stop();
// logger.info("用户企业部门人员信息查询任务====>{}s", stopWatch1.getTotalTimeSeconds());
if (!ValidationUtil.isEmpty(companyModels)) {
CompanyModel companyM = companyModels.get(0);
Bean.copyExistPropertis(companyM, company);
if (companyM != null) {
// StopWatch stopWatch2 = new StopWatch();
// stopWatch2.start("获取所在公司区域信息====>");
// FeignClientResult<RegionModel> result = Systemctl.regionClient
// .getRegion(Long.valueOf(companyM.getRegionSeq()));
// stopWatch2.stop();
// logger.info("获取所在公司区域信息====>{}s", stopWatch2.getTotalTimeSeconds());
// company.setRegionCode(String.valueOf(result.getResult().getRegionCode()));
// DepartmentModel departmentM;
// // 查询当前人第一个公司下部门信息
// StopWatch stopWatch3 = new StopWatch();
// stopWatch3.start("获取所在部门信息====>");
// Collection<DepartmentModel> departmentList =
// FeignUtil.remoteCall(() -> Privilege.departmentClient.deptTreeWithoutAuth(companyM.getSequenceNbr()));
// stopWatch3.stop();
// logger.info("获取所在部门信息====>{}s", stopWatch3.getTotalTimeSeconds());
// if (!ValidationUtil.isEmpty(departmentList)) {
// departmentM = departmentList.stream().findFirst().get();
// Bean.copyExistPropertis(departmentM, department);
// }
//
// StopWatch stopWatch4 = new StopWatch();
// stopWatch4.start("获取用户角色信息====>");
// Map<String, Object> userOrgRoleMap = FeignUtil.remoteCall(() -> Privilege.userOrgRoleClient.getme());
// List<String> userOrgRoleList = (List<String>) userOrgRoleMap.get("roleId");
// RoleModel roleM =
// FeignUtil.remoteCall(() -> Privilege.roleClient.seleteOne(Long.valueOf((userOrgRoleList.get(0)))));
// stopWatch4.stop();
// logger.info("获取用户角色信息====>{}s", stopWatch4.getTotalTimeSeconds());
// Bean.copyExistPropertis(roleM, role);
StopWatch stopWatch5 = new StopWatch();
stopWatch5.start("获取用户信息====>");
List<AgencyUserModel> userList =
FeignUtil.remoteCall(() -> Privilege.agencyUserClient.queryByIds(RequestContext.getExeUserId(), false));
stopWatch5.stop();
logger.info("获取用户信息====>{}s", stopWatch5.getTotalTimeSeconds());
ReginParams regionParams = new ReginParams();
regionParams.setCompany(company);
regionParams.setRole(role);
regionParams.setDepartment(department);
regionParams.setUserModel(userList.get(0));
ReginParams.PersonIdentity personIdentity = new ReginParams.PersonIdentity();
personIdentity.setBizOrgCode(companyM.getOrgCode());
regionParams.setPersonIdentity(personIdentity);
redisUtils.set(authToken, JSONObject.toJSONString(regionParams), redisRegionTimeSecond);
stopWatch0.stop();
logger.info("用户企业部门人员信息查询任务完成=======>{}", stopWatch0.getTotalTimeSeconds());
}
}
}
@AfterReturning(returning = "ret", pointcut = "userCache()")
public void doAfterReturning(Object ret) throws Throwable {
// 统一redis管理
......
......@@ -50,6 +50,11 @@
<artifactId>transmittable-thread-local</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.16</version>
</dependency>
</dependencies>
</project>
package com.yeejoin.amos.patrol.business.cache;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.patrol.business.dao.repository.IInputItemDao;
import com.yeejoin.amos.patrol.dao.entity.InputItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
@Component
public class CacheHelper {
@Autowired
IInputItemDao iInputItemDao;
@Autowired
RedisUtils redisUtils;
private static final String P_INPUT_ITEM_REDIS_KEY_PREFIX = "P_INPUT_ITEM_CACHE_KEY:";
@PostConstruct
public void init() {
List<InputItem> inputItems = iInputItemDao.findAll();
inputItems.forEach(inputItem -> redisUtils.hset(P_INPUT_ITEM_REDIS_KEY_PREFIX, String.valueOf(inputItem.getId()), inputItem));
}
public InputItem getInputItemCacheData(String inputItemId) {
return (InputItem) redisUtils.hget(P_INPUT_ITEM_REDIS_KEY_PREFIX, inputItemId);
}
}
......@@ -121,10 +121,10 @@ public class PlanTaskController extends AbstractBaseController {
@ApiParam(value = "查询条件") @RequestBody(required = false) List<CommonRequest> queryRequests,
@ApiParam(value = "分页参数", defaultValue = "current=0&pageSize=10或pageNumber0&pageSize=10") CommonPageable pageable) {
HashMap<String, Object> params = new HashMap<String, Object>();
ReginParams reginParams = getSelectedOrgInfo();
// ReginParams reginParams = getSelectedOrgInfo();
String userId = RequestContext.getExeUserId();
PlanTaskPageParamUtil.fillPlanTask(queryRequests, params);
params.put("orgCode", reginParams.getPersonIdentity().getBizOrgCode());
// params.put("orgCode", reginParams.getPersonIdentity().getBizOrgCode());
params.put("userId", userId);
params.put("size", pageable.getPageSize());
params.put("number", pageable.getPageNumber());
......
......@@ -18,4 +18,6 @@ public interface CheckInputMapper extends BaseMapper {
List<CheckInputSyncBo> getCheckInputSyncBoList(Map<String, Object> map);
List<CheckInput> findByIdIn(Map<String, Object> map);
void insertBatch(@Param("list") List<CheckInput> checkInputs);
}
......@@ -7,6 +7,7 @@ import com.yeejoin.amos.patrol.business.vo.CheckAnalysisVo;
import com.yeejoin.amos.patrol.business.vo.CheckInfoVo;
import com.yeejoin.amos.patrol.core.common.response.PointCheckInfoBusinessRespone;
import com.yeejoin.amos.patrol.core.common.response.PointCheckInfoRespone;
import com.yeejoin.amos.patrol.dao.entity.Check;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
......@@ -288,4 +289,6 @@ public interface CheckMapper extends BaseMapper {
long getPeoplePageCount(CheckInfoPageParam param);
List<CheckInfoVo> getPeopleCheckPage(CheckInfoPageParam param);
void insertBatch(@Param("list") List<Check> checks);
}
......@@ -330,4 +330,5 @@ public interface PlanTaskMapper extends BaseMapper {
List<Map<String, String>> selectExcludeItemsByRoutId(long routeId);
void updateStaticTableBatch(@Param("list") List<StaticTableUpdateDto> staticTableUpdateDtos);
}
......@@ -3,8 +3,13 @@ package com.yeejoin.amos.patrol.business.data;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.patrol.business.constants.XJConstant;
import com.yeejoin.amos.patrol.business.dao.mapper.CheckInputMapper;
import com.yeejoin.amos.patrol.business.dao.mapper.CheckMapper;
import com.yeejoin.amos.patrol.business.dao.mapper.PlanTaskDetailMapper;
import com.yeejoin.amos.patrol.business.dao.mapper.PlanTaskMapper;
import com.yeejoin.amos.patrol.business.dao.repository.*;
......@@ -15,7 +20,10 @@ import com.yeejoin.amos.patrol.common.enums.PlanTaskDetailStatusEnum;
import com.yeejoin.amos.patrol.dao.entity.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.context.RequestContextModel;
import java.util.*;
import java.util.concurrent.BlockingQueue;
......@@ -42,9 +50,15 @@ public class CheckRecordDataConsumer implements Runnable {
private IInputItemDao inputItemDao;
private PlanTaskDetailMapper planTaskDetailMapper;
private AmosRequestContext requestContext;
private Sequence sequence;
private PlanTaskDetailMapper planTaskDetailMapper;
private CheckMapper checkMapper;
private CheckInputMapper checkInputMapper;
public CheckRecordDataConsumer(BlockingQueue<CheckRecordDataDto> blockingQueue, ApplicationContext applicationContext) {
......@@ -56,32 +70,51 @@ public class CheckRecordDataConsumer implements Runnable {
iPlanTaskDao = applicationContext.getBean(IPlanTaskDao.class);
iPlanTaskDetailDao = applicationContext.getBean(IPlanTaskDetailDao.class);
inputItemDao = applicationContext.getBean(IInputItemDao.class);
sequence = applicationContext.getBean(Sequence.class);
planTaskDetailMapper = applicationContext.getBean(PlanTaskDetailMapper.class);
requestContext = applicationContext.getBean(AmosRequestContext.class);
sequence = applicationContext.getBean(Sequence.class);
checkMapper = applicationContext.getBean(CheckMapper.class);
checkInputMapper = applicationContext.getBean(CheckInputMapper.class);
}
@Override
public void run() {
while (true) {
try {
this.setRequestContext();
CheckRecordDataDto checkRecordDataDto = blockingQueue.take();
iPlanTaskDao.saveAll(checkRecordDataDto.getPlanTasks());
iPlanTaskDetailDao.saveAll(checkRecordDataDto.getPlanTaskDetails());
createCheckRecord(checkRecordDataDto.getPlanTasks(), checkRecordDataDto.getAgencyUserModel());
this.updateTaskDetail(checkRecordDataDto.getPlanTaskDetails(), checkRecordDataDto.getAgencyUserModel());
this.save2Db(checkRecordDataDto);
} catch (Exception e) {
log.error("入库失败", e);
} finally {
RequestContext.clean();
}
}
}
// 生成巡检记录
@Transactional(rollbackFor = Exception.class)
public void save2Db(CheckRecordDataDto checkRecordDataDto){
iPlanTaskDao.saveAll(checkRecordDataDto.getPlanTasks());
iPlanTaskDetailDao.saveAll(checkRecordDataDto.getPlanTaskDetails());
AgencyUserModel agencyUserModel = this.getAgencyUserModel(checkRecordDataDto.getRequestContextModel());
createCheckRecord(checkRecordDataDto.getPlanTasks(), agencyUserModel);
this.updateTaskDetail(checkRecordDataDto.getPlanTaskDetails(), checkRecordDataDto.getRequestContextModel().getExcutedUserId());
}
private AgencyUserModel getAgencyUserModel(RequestContextModel requestContextModel) {
List<AgencyUserModel> agencyUserModels = FeignUtil.remoteCall(()->Privilege.agencyUserClient.queryByIds(requestContextModel.getExcutedUserId(),false));
return agencyUserModels.get(0);
}
private void setRequestContext(){
RequestContext.setAppKey(requestContext.getAppKey());
RequestContext.setProduct(requestContext.getProduct());
RequestContext.setToken(requestContext.getToken());
}
private void updateTaskDetail(List<PlanTaskDetail> planTaskDetails, AgencyUserModel agencyUserModel) {
public void updateTaskDetail(List<PlanTaskDetail> planTaskDetails, String userId) {
planTaskDetails.forEach(planTaskDetail -> {
planTaskDetailMapper.finishTaskDetail(planTaskDetail.getId(), planTaskDetail.getPointId(), planTaskDetail.getTaskNo(), agencyUserModel.getUserId());
planTaskDetailMapper.finishTaskDetail(planTaskDetail.getId(), planTaskDetail.getPointId(), planTaskDetail.getTaskNo(), userId);
});
}
......@@ -151,10 +184,9 @@ public class CheckRecordDataConsumer implements Runnable {
check.setRouteId(arg.getRouteId());
check.setCheckTime(arg.getEndTime());
check.setIsOk(CheckStatusEnum.QUALIFIED.getCode());
// long checkId = sequence.nextId();
// check.setId(checkId);
// checks.add(check);
iCheckDao.saveAndFlush(check);
long checkId = sequence.nextId();
check.setId(checkId);
checks.add(check);
checkMap.put(arg.getPointId(), check);
} else {
check = checkMap.get(arg.getPointId());
......@@ -171,7 +203,6 @@ public class CheckRecordDataConsumer implements Runnable {
} else if (XJConstant.INPUT_ITEM_TEXT.equals(inputItem.getItemType())) {
checkInput.setInputValue(inputItem.getDefaultValue());
}
checkInput.setCheckId(check.getId());
checkInput.setInputId(arg.getInputItemId());
checkInput.setIsOk(CheckStatusEnum.QUALIFIED.getCode());
......@@ -181,14 +212,14 @@ public class CheckRecordDataConsumer implements Runnable {
checkInput.setInputName(arg.getInputName());
checkInput.setPointClassifyId(arg.getClassifyId());
checkInput.setPointClassifyName(arg.getClassifyName());
iCheckInputDao.saveAndFlush(checkInput);
// checkInputs.add(checkInput);
checkInput.setId(sequence.nextId());
checkInputs.add(checkInput);
}
}
});
// iCheckDao.saveAll(checks);
// iCheckInputDao.saveAll(checkInputs);
checkMapper.insertBatch(checks);
checkInputMapper.insertBatch(checkInputs);
}
private CheckInput paraseSelect(CheckInput checkInput, String json, String isScore) {
......
......@@ -4,6 +4,7 @@ import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.patrol.dao.entity.PlanTask;
import com.yeejoin.amos.patrol.dao.entity.PlanTaskDetail;
import lombok.Data;
import org.typroject.tyboot.core.foundation.context.RequestContextModel;
import java.util.List;
......@@ -14,5 +15,5 @@ import java.util.List;
public class CheckRecordDataDto {
List<PlanTask> planTasks;
List<PlanTaskDetail> planTaskDetails;
AgencyUserModel agencyUserModel;
RequestContextModel requestContextModel;
}
package com.yeejoin.amos.patrol.business.entity.mybatis;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
public class PointCheckDetailBo {
@Data
public class PointCheckDetailBo implements Serializable {
private Long id;
private long pointId;
private Long pointId;
private long inputItemId;
private Long inputItemId;
private String pointName;
......@@ -21,43 +25,11 @@ public class PointCheckDetailBo {
private String defaultValue;
public long getId() {
return id;
}
public long getInputItemId() {
return inputItemId;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
private int shortMinNumber;
private int shortMaxNumber;
public int getShortMinNumber() {
return shortMinNumber;
}
public void setShortMinNumber(int shortMinNumber) {
this.shortMinNumber = shortMinNumber;
}
public int getShortMaxNumber() {
return shortMaxNumber;
}
public void setShortMaxNumber(int shortMaxNumber) {
this.shortMaxNumber = shortMaxNumber;
}
private long routeId;
private Long routeId;
private String departmentName;
......@@ -69,23 +41,9 @@ public class PointCheckDetailBo {
private String endTime;
public String getBeginTime() {
return beginTime;
}
private String isScore;
public void setBeginTime(String beginTime) {
this.beginTime = beginTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
private long checkId;
private Long checkId;
private String checkRemark;
......@@ -107,253 +65,19 @@ public class PointCheckDetailBo {
private String orderNo;
private long checkInputId;
private Long checkInputId;
private String remark;
private String classifyName;
private long classifyId;
private Long classifyId;
private String riskDesc;
private String userId;
private String checkDepartmentId;
private String planTaskId;
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public String getPlanTaskId() {
return planTaskId;
}
public void setPlanTaskId(String planTaskId) {
this.planTaskId = planTaskId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getCheckDepartmentId() {
return checkDepartmentId;
}
public void setCheckDepartmentId(String checkDepartmentId) {
this.checkDepartmentId = checkDepartmentId;
}
public long getPointId() {
return pointId;
}
public void setPointId(long pointId) {
this.pointId = pointId;
}
public String getCheckRemark() {
return checkRemark;
}
public void setCheckRemark(String checkRemark) {
this.checkRemark = checkRemark;
}
public String getPointName() {
return pointName;
}
public void setPointName(String pointName) {
this.pointName = pointName;
}
public String getPointNo() {
return pointNo;
}
public void setPointNo(String pointNo) {
this.pointNo = pointNo;
}
public String getPointStatus() {
return pointStatus;
}
public void setPointStatus(String pointStatus) {
this.pointStatus = pointStatus;
}
public String getPlanName() {
return planName;
}
public void setPlanName(String planName) {
this.planName = planName;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getCheckTime() {
return checkTime;
}
public void setCheckTime(Date checkTime) {
this.checkTime = checkTime;
}
public long getCheckId() {
return checkId;
}
public void setCheckId(long checkId) {
this.checkId = checkId;
}
public String getInputName() {
return inputName;
}
public void setInputName(String inputName) {
this.inputName = inputName;
}
public String getInputValue() {
return inputValue;
}
public void setInputValue(String inputValue) {
this.inputValue = inputValue;
}
public String getInputStatus() {
return inputStatus;
}
public void setInputStatus(String inputStatus) {
this.inputStatus = inputStatus;
}
public long getCheckInputId() {
return checkInputId;
}
public void setCheckInputId(long checkInputId) {
this.checkInputId = checkInputId;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public long getRouteId() {
return routeId;
}
public void setRouteId(long routeId) {
this.routeId = routeId;
}
public String getItemType() {
return itemType;
}
public void setItemType(String itemType) {
this.itemType = itemType;
}
public String getDataJson() {
return dataJson;
}
public void setDataJson(String dataJson) {
this.dataJson = dataJson;
}
public String getIsMust() {
return isMust;
}
public void setIsMust(String isMust) {
this.isMust = isMust;
}
public String getPictureJson() {
return pictureJson;
}
public void setPictureJson(String pictureJson) {
this.pictureJson = pictureJson;
}
public String getIsMultiline() {
return isMultiline;
}
public void setIsMultiline(String isMultiline) {
this.isMultiline = isMultiline;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getClassifyName() {
return classifyName;
}
public void setClassifyName(String classifyName) {
this.classifyName = classifyName;
}
public long getClassifyId() {
return classifyId;
}
public void setClassifyId(long classifyId) {
this.classifyId = classifyId;
}
public String getRiskDesc() {
return riskDesc;
}
public void setRiskDesc(String riskDesc) {
this.riskDesc = riskDesc;
}
}
package com.yeejoin.amos.patrol.business.event;
import com.yeejoin.amos.patrol.business.dto.CheckRecordDataDto;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
@Getter
public class CheckRecordInsertEvent extends ApplicationEvent {
private CheckRecordDataDto message;
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public CheckRecordInsertEvent(Object source,CheckRecordDataDto message) {
super(source);
this.message = message;
}
}
package com.yeejoin.amos.patrol.business.listener;
import com.yeejoin.amos.patrol.business.data.CheckRecordDataConsumer;
import com.yeejoin.amos.patrol.business.dto.CheckRecordDataDto;
import com.yeejoin.amos.patrol.business.event.CheckRecordInsertEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
/**
* @author Administrator
*/
@Component
@Slf4j
public class CheckRecordInsertListener implements ApplicationContextAware, ApplicationListener<CheckRecordInsertEvent> {
private final BlockingQueue<CheckRecordDataDto> blockingQueue = new LinkedBlockingDeque<>();
private ApplicationContext applicationContext;
@Autowired
Executor asyncServiceExecutor;
@Override
public void onApplicationEvent(CheckRecordInsertEvent event) {
blockingQueue.add(event.getMessage());
}
@PostConstruct
public void init() {
CheckRecordDataConsumer consumer = new CheckRecordDataConsumer(blockingQueue, applicationContext);
for (int i = 0; i < 10; i++) {
asyncServiceExecutor.execute(consumer);
}
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
package com.yeejoin.amos.patrol.business.publisher;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
@Component
@EnableAsync
public class EventPublisher {
private ApplicationEventPublisher publisher;
public EventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
@Async
public void publish(ApplicationEvent event) {
publisher.publishEvent(event);
}
}
\ No newline at end of file
package com.yeejoin.amos.patrol.config;
import com.alibaba.ttl.threadpool.TtlExecutors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
......@@ -61,6 +60,6 @@ public class ExecutorConfig {
//等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return TtlExecutors.getTtlExecutor(executor);
return executor;
}
}
package com.yeejoin.amos.patrol.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.patrol.business.feign.JcsFeignClient;
import com.yeejoin.amos.patrol.exception.PermissionException;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.ResponseBody;
import org.typroject.tyboot.core.foundation.context.RequestContext;
/**
* @author DELL
*/
@Aspect
@Component
@ResponseBody
@Order(value = 1)
public class PersonIdentifyTzsAspect {
@Autowired
RedisUtils redisUtils;
@Autowired
private JcsFeignClient jcsFeignClient;
@Value("${logic}")
Boolean logic;
@Pointcut("execution(public * com.yeejoin.amos.*.business.controller..*(..))")
public void userDate() {
}
@Before("userDate()")
public void personIdentity(JoinPoint joinPoint) throws PermissionException {
//定时任务没有token
if(RequestContext.getExeUserId()==null|| RequestContext.getToken()==null){
}else {
ReginParams reginParam = JSON.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
if (reginParam != null ) {
if (reginParam.getPersonIdentity() == null || StringUtils.isEmpty(reginParam.getPersonIdentity().getBizOrgCode()) ) {
String userId = reginParam.getUserModel().getUserId();
if (userId != null) {
// FeignClientResult responseModel = jcsFeignClient.selectById(userId);
//
//
// if (ObjectUtils.isEmpty(responseModel.getResult()) || responseModel.getStatus() != HttpStatus.OK.value()) {
// throw new RuntimeException(responseModel.getDevMessage());
//package com.yeejoin.amos.patrol.config;
//
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
//import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
//import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
//import com.yeejoin.amos.component.feign.model.FeignClientResult;
//import com.yeejoin.amos.patrol.business.feign.JcsFeignClient;
//import com.yeejoin.amos.patrol.exception.PermissionException;
//import org.apache.commons.lang3.StringUtils;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.core.annotation.Order;
//import org.springframework.http.HttpStatus;
//import org.springframework.stereotype.Component;
//import org.springframework.util.ObjectUtils;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.typroject.tyboot.core.foundation.context.RequestContext;
//
///**
// * @author DELL
// */
//@Aspect
//@Component
//@ResponseBody
//@Order(value = 1)
//public class PersonIdentifyTzsAspect {
//
// @Autowired
// RedisUtils redisUtils;
// @Autowired
// private JcsFeignClient jcsFeignClient;
//
// @Value("${logic}")
// Boolean logic;
//
// @Pointcut("execution(public * com.yeejoin.amos.*.business.controller..*(..))")
// public void userDate() {
//
// }
// String s = JSONObject.toJSONString(responseModel.getResult());
// ReginParams.PersonIdentity personIdentity = JSONObject.parseObject(s, ReginParams.PersonIdentity.class);
ReginParams.PersonIdentity personIdentity = new ReginParams.PersonIdentity();
// ReginParams.PersonIdentity personIdentity = (ReginParams.PersonIdentity) Bean.mapToBean((Map<String, Object>) responseModel.getResult(), ReginParams.PersonIdentity.class);
//电力默认走公司权限
if (!logic) {
personIdentity.setBizOrgCode(StringUtils.isEmpty(reginParam.getCompany().getOrgCode()) ? "-1" : reginParam.getCompany().getOrgCode());
}
reginParam.setPersonIdentity(personIdentity);
redisUtils.set(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken()), JSONObject.toJSONString(reginParam));
}
}
}
}
}
}
//
//
// @Before("userDate()")
// public void personIdentity(JoinPoint joinPoint) throws PermissionException {
//
//
// //定时任务没有token
// if(RequestContext.getExeUserId()==null|| RequestContext.getToken()==null){
//
// }else {
// ReginParams reginParam = JSON.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
// if (reginParam != null ) {
// if (reginParam.getPersonIdentity() == null || StringUtils.isEmpty(reginParam.getPersonIdentity().getBizOrgCode()) ) {
// String userId = reginParam.getUserModel().getUserId();
//
// if (userId != null) {
//// FeignClientResult responseModel = jcsFeignClient.selectById(userId);
////
////
//// if (ObjectUtils.isEmpty(responseModel.getResult()) || responseModel.getStatus() != HttpStatus.OK.value()) {
//// throw new RuntimeException(responseModel.getDevMessage());
//// }
//// String s = JSONObject.toJSONString(responseModel.getResult());
//// ReginParams.PersonIdentity personIdentity = JSONObject.parseObject(s, ReginParams.PersonIdentity.class);
// ReginParams.PersonIdentity personIdentity = new ReginParams.PersonIdentity();
// // ReginParams.PersonIdentity personIdentity = (ReginParams.PersonIdentity) Bean.mapToBean((Map<String, Object>) responseModel.getResult(), ReginParams.PersonIdentity.class);
// //电力默认走公司权限
// if (!logic) {
// personIdentity.setBizOrgCode(StringUtils.isEmpty(reginParam.getCompany().getOrgCode()) ? "-1" : reginParam.getCompany().getOrgCode());
// }
//
// reginParam.setPersonIdentity(personIdentity);
// redisUtils.set(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken()), JSONObject.toJSONString(reginParam));
//
// }
// }
// }
// }
// }
//
//}
//
......@@ -62,7 +62,7 @@ import java.util.concurrent.LinkedBlockingDeque;
*
*/
@Component
public class AsyncTask implements ApplicationContextAware {
public class AsyncTask {
private final Logger log = LoggerFactory.getLogger(AsyncTask.class);
@Autowired
......@@ -90,7 +90,6 @@ public class AsyncTask implements ApplicationContextAware {
@Autowired
Executor asyncServiceExecutor;
ApplicationContext applicationContext;
private static final String TOKE = "TOKE";
......@@ -99,7 +98,6 @@ public class AsyncTask implements ApplicationContextAware {
@Autowired
IInputItemDao inputItemDao;
private final BlockingQueue<CheckRecordDataDto> blockingQueue = new LinkedBlockingDeque<>();
/**
......@@ -327,37 +325,4 @@ public class AsyncTask implements ApplicationContextAware {
return afterFilterUserIds;
}
private void setRequestContextByLocal(RequestContextModel user) {
RequestContext.setToken(user.getToken());
RequestContext.setProduct(user.getProduct());
RequestContext.setAppKey(user.getAppKey());
UserTransmittableUtils.clear();
}
@Async("asyncServiceExecutor")
public void saveCheckRecordAsync(List<PlanTask> planTasks, List<PlanTaskDetail> planTaskDetails, String userId) {
this.setRequestContextByLocal(UserTransmittableUtils.getUser());
FeignClientResult<AgencyUserModel> agencyUserModel = Privilege.agencyUserClient.queryByUserId(userId);
CheckRecordDataDto dataDto = new CheckRecordDataDto();
dataDto.setPlanTasks(planTasks);
dataDto.setPlanTaskDetails(planTaskDetails);
dataDto.setAgencyUserModel(agencyUserModel.getResult());
blockingQueue.add(dataDto);
UserTransmittableUtils.clear();
}
@PostConstruct
public void init(){
CheckRecordDataConsumer consumer = new CheckRecordDataConsumer(blockingQueue,applicationContext);
for(int i = 0; i < 10; i++){
asyncServiceExecutor.execute(consumer);
}
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
......@@ -70,6 +70,4 @@ public interface IJobService {
public JSONObject getCheckInput(Long routeId, Long pointId, String type, CheckRecordParam requestParam);
JSONObject getCheckInput(List<PointCheckDetailBo> pointInputs, String type, CheckRecordParam requestParam);
}
......@@ -23,9 +23,11 @@ spring.reactor.debug-agent.enabled=true
spring.datasource.url=jdbc:vastbase://172.16.10.243:5432/tzs_amos_tzs_biz_init?currentSchema=amos_tzs_biz&allowMultiQueries=true
spring.datasource.username=admin
spring.datasource.password=Yeejoin@2023
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name = cn.com.vastbase.Driver
spring.datasource.hikari.maxLifetime = 1765000
spring.datasource.hikari.maximum-pool-size = 10
spring.datasource.hikari.maximum-pool-size = 100
spring.datasource.hikari.minimum-idle=15
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
......@@ -191,3 +193,10 @@ spring.jpa.properties.hibernate.order_updates =true
#spring.shardingsphere.props.max-connections-size-per-query=5
shardingsphere.create.tables.num=10
logging.level.com.zaxxer.hikari=DEBUG
amos.system.user.user-name=admin_tzs
amos.system.user.password=a1234560
amos.system.user.app-key=AMOS_STUDIO
amos.system.user.product=AMOS_STUDIO_WEB
\ No newline at end of file
......@@ -159,4 +159,40 @@
</if>
</where>
</select>
<insert id="insertBatch" parameterType="com.yeejoin.amos.patrol.dao.entity.CheckInput">
insert into p_check_input (
id,
org_code,
check_id,
input_id,
order_no,
input_value,
is_ok,
score,
route_point_item_id,
remark,
create_date,
point_classify_id,
point_classify_name,
input_name
) VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id},
#{item.orgCode},
#{item.checkId},
#{item.inputId},
#{item.orderNo},
#{item.inputValue},
#{item.isOk},
#{item.score},
#{item.routePointItemId},
#{item.remark},
CURRENT_TIMESTAMP,
#{item.pointClassifyId},
#{item.pointClassifyName},
#{item.inputName}
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -2313,4 +2313,70 @@
<if test="orgCode!=null">AND tb.org_code = #{orgCode} </if>
</where>
</select>
<insert id="insertBatch" parameterType="com.yeejoin.amos.patrol.dao.entity.Check">
insert into p_check
(
id,
org_code,
user_id,
point_id,
point_name,
check_time,
upload_time,
error,
device_id,
longitude,
latitude,
address,
shot_number,
remark,
plan_task_id,
route_id,
route_name,
is_ok,
score,
plan_id,
plan_name,
check_mode,
create_date,
plan_task_detail_id,
error_classify,
user_name,
dep_id,
dep_name
)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id},
#{item.orgCode},
#{item.userId},
#{item.pointId},
#{item.pointName},
#{item.checkTime},
#{item.uploadTime},
#{item.error},
#{item.deviceId},
#{item.longitude},
#{item.latitude},
#{item.address},
#{item.shotNumber},
#{item.remark},
#{item.planTaskId},
#{item.routeId},
#{item.routeName},
#{item.isOk},
#{item.score},
#{item.planId},
#{item.planName},
#{item.checkMode},
CURRENT_TIMESTAMP,
#{item.planTaskDetailId},
#{item.errorClassify},
#{item.userName},
#{item.depId},
#{item.depName}
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -741,6 +741,7 @@
pii.picture_json pictureJson,
pii.is_multiline isMultiline,
pii.order_no orderNo,
pii.is_score,
prp.point_id,
prp.route_id
FROM
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment