监理确认问题调用第三方扣分接口

This commit is contained in:
tangcy 2026-04-11 13:06:04 +08:00
parent 55fca5719d
commit 6c4b31ce20
20 changed files with 505 additions and 212 deletions

View File

@ -28,6 +28,9 @@ public class ConstructionIssueFeedback extends BaseEntity {
@Schema(description = "视频检测记录ID来源为1时关联cons_video_detection.id")
private Long videoDetectionId;
@Schema(description = "检查项ID风险管控卡模板检查项ID")
private Long checkItemId;
@Schema(description = "检测名称")
private String detectionName;

View File

@ -43,6 +43,9 @@ public class VideoStreamDetection {
@Schema(description = "检测类型:-1物体检测 0动火作业 1高空作业 2用电作业 3起重吊装 4有限空间 5补充规则")
private Integer detectType;
@Schema(description = "规则ID")
private String ruleId;
@Schema(description = "报警级别")
private String alarmLevel;

View File

@ -33,4 +33,7 @@ public class VideoDetectionItemDTO {
@Schema(description = "检测类型:-1物体检测 0动火作业 1高空作业 2用电作业 3起重吊装 4有限空间 5补充规则")
private Integer detectType;
@Schema(description = "规则ID")
private String ruleId;
}

View File

@ -14,54 +14,78 @@ import java.util.Date;
import java.util.List;
/**
* 施工问题反馈Service业务层
*
* @author ruoyi
* 施工问题反馈 Service
*/
@Service
public class ConstructionIssueFeedbackServiceImpl implements IConstructionIssueFeedbackService {
public class ConstructionIssueFeedbackServiceImpl implements IConstructionIssueFeedbackService
{
@Autowired
private ConstructionIssueFeedbackMapper constructionIssueFeedbackMapper;
@Autowired
private ConstructionIssueRectificationMapper constructionIssueRectificationMapper;
@Autowired
private ThirdPartyDeductionReportService thirdPartyDeductionReportService;
@Override
public ConstructionIssueFeedback selectConstructionIssueFeedbackById(Long id) {
public ConstructionIssueFeedback selectConstructionIssueFeedbackById(Long id)
{
return constructionIssueFeedbackMapper.selectConstructionIssueFeedbackById(id);
}
@Override
public List<ConstructionIssueFeedback> selectConstructionIssueFeedbackList(ConstructionIssueFeedback query) {
public List<ConstructionIssueFeedback> selectConstructionIssueFeedbackList(ConstructionIssueFeedback query)
{
return constructionIssueFeedbackMapper.selectConstructionIssueFeedbackList(query);
}
@Override
public int manualSubmit(ConstructionIssueFeedback feedback) {
public int manualSubmit(ConstructionIssueFeedback feedback)
{
if (feedback.getProjectId() == null) {
throw new ServiceException("项目ID不能为空");
}
if (StringUtils.isEmpty(feedback.getDetectionName())) {
throw new ServiceException("检测名称不能为空");
}
feedback.setSourceType("2"); // 人工提交
feedback.setStatus("0"); // 待处理
feedback.setSubmitBy(SecurityUtils.getUsername());
feedback.setSubmitTime(new Date());
feedback.setCreateBy(SecurityUtils.getUsername());
return constructionIssueFeedbackMapper.insertConstructionIssueFeedback(feedback);
if (feedback.getCheckItemId() == null) {
throw new ServiceException("检查项ID不能为空");
}
String username = SecurityUtils.getUsername();
Date now = new Date();
feedback.setSourceType("2");
feedback.setStatus("0");
feedback.setSubmitBy(username);
feedback.setSubmitTime(now);
feedback.setCreateBy(username);
int rows = constructionIssueFeedbackMapper.insertConstructionIssueFeedback(feedback);
if (rows > 0) {
thirdPartyDeductionReportService.report(
feedback.getCheckItemId(),
feedback.getProjectId(),
feedback.getDescription(),
feedback.getDescription(),
feedback.getProblemPhotoUrl(),
null,
feedback.getSubmitTime(),
now
);
}
return rows;
}
@Override
public int updateConstructionIssueFeedback(ConstructionIssueFeedback feedback) {
public int updateConstructionIssueFeedback(ConstructionIssueFeedback feedback)
{
feedback.setUpdateBy(SecurityUtils.getUsername());
return constructionIssueFeedbackMapper.updateConstructionIssueFeedback(feedback);
}
@Override
public int countPendingByProjectId(Long projectId) {
public int countPendingByProjectId(Long projectId)
{
return constructionIssueFeedbackMapper.countPendingByProjectId(projectId);
}
}

View File

@ -5,7 +5,6 @@ import com.admin.contractor.domain.ConstructionIssueRectification;
import com.admin.contractor.domain.dto.RectificationReviewDTO;
import com.admin.contractor.domain.dto.RectificationSubmitDTO;
import com.admin.contractor.domain.vo.RectificationDetailVO;
import com.admin.contractor.domain.vo.RectificationPendingVO;
import com.admin.contractor.mapper.ConstructionIssueFeedbackMapper;
import com.admin.contractor.mapper.ConstructionIssueRectificationMapper;
import com.admin.contractor.service.IConstructionIssueRectificationService;
@ -15,26 +14,29 @@ import com.ruoyi.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* 施工问题整改Service业务层
*
* @author ruoyi
* 施工问题整改 Service
*/
@Service
public class ConstructionIssueRectificationServiceImpl implements IConstructionIssueRectificationService {
public class ConstructionIssueRectificationServiceImpl implements IConstructionIssueRectificationService
{
@Autowired
private ConstructionIssueRectificationMapper rectificationMapper;
@Autowired
private ConstructionIssueFeedbackMapper feedbackMapper;
@Autowired
private ThirdPartyDeductionReportService thirdPartyDeductionReportService;
@Override
@Transactional(rollbackFor = Exception.class)
public int submitRectification(RectificationSubmitDTO dto) {
public int submitRectification(RectificationSubmitDTO dto)
{
if (dto.getFeedbackId() == null) {
throw new ServiceException("问题反馈ID不能为空");
}
@ -47,6 +49,7 @@ public class ConstructionIssueRectificationServiceImpl implements IConstructionI
if (dto.getRectificationTime() == null) {
throw new ServiceException("整改完成时间不能为空");
}
ConstructionIssueFeedback feedback = feedbackMapper.selectConstructionIssueFeedbackById(dto.getFeedbackId());
if (feedback == null) {
throw new ServiceException("问题反馈不存在");
@ -54,13 +57,14 @@ public class ConstructionIssueRectificationServiceImpl implements IConstructionI
if (!"0".equals(feedback.getStatus()) && !"3".equals(feedback.getStatus())) {
throw new ServiceException("仅待处理或复核不通过的问题可提交整改");
}
String username = SecurityUtils.getUsername();
ConstructionIssueRectification draft = rectificationMapper.selectDraftByFeedbackId(dto.getFeedbackId());
if (draft != null) {
draft.setRectificationDesc(dto.getRectificationDesc());
draft.setRectificationPhotoUrls(dto.getRectificationPhotoUrls());
draft.setRectificationTime(dto.getRectificationTime());
draft.setStatus("1"); // 已提交
draft.setStatus("1");
draft.setUpdateBy(username);
rectificationMapper.updateConstructionIssueRectification(draft);
} else {
@ -69,43 +73,47 @@ public class ConstructionIssueRectificationServiceImpl implements IConstructionI
record.setRectificationDesc(dto.getRectificationDesc());
record.setRectificationPhotoUrls(dto.getRectificationPhotoUrls());
record.setRectificationTime(dto.getRectificationTime());
record.setStatus("1"); // 已提交
record.setStatus("1");
record.setCreateBy(username);
rectificationMapper.insertConstructionIssueRectification(record);
}
// 问题反馈状态改为待复核
ConstructionIssueFeedback update = new ConstructionIssueFeedback();
update.setId(dto.getFeedbackId());
update.setStatus("1"); // 待复核
update.setStatus("1");
update.setUpdateBy(username);
feedbackMapper.updateConstructionIssueFeedback(update);
return 1;
}
@Override
public List<ConstructionIssueRectification> listByFeedbackId(Long feedbackId) {
public List<ConstructionIssueRectification> listByFeedbackId(Long feedbackId)
{
return rectificationMapper.selectByFeedbackId(feedbackId);
}
@Override
public RectificationDetailVO getDetailByFeedbackId(Long feedbackId) {
public RectificationDetailVO getDetailByFeedbackId(Long feedbackId)
{
return rectificationMapper.selectDetailByFeedbackId(feedbackId);
}
@Override
public List<ConstructionIssueRectification> listByProjectId(Long projectId) {
public List<ConstructionIssueRectification> listByProjectId(Long projectId)
{
return rectificationMapper.selectByProjectId(projectId);
}
@Override
public List<RectificationDetailVO> listDetailByProjectId(Long projectId) {
public List<RectificationDetailVO> listDetailByProjectId(Long projectId)
{
return rectificationMapper.selectDetailByProjectId(projectId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int submitReview(RectificationReviewDTO dto) {
public int submitReview(RectificationReviewDTO dto)
{
if (dto.getRectificationId() == null) {
throw new ServiceException("整改记录ID不能为空");
}
@ -115,6 +123,7 @@ public class ConstructionIssueRectificationServiceImpl implements IConstructionI
if (StringUtils.isEmpty(dto.getReviewComment())) {
throw new ServiceException("复核意见不能为空");
}
ConstructionIssueRectification rect = rectificationMapper.selectConstructionIssueRectificationById(dto.getRectificationId());
if (rect == null) {
throw new ServiceException("整改记录不存在");
@ -122,15 +131,35 @@ public class ConstructionIssueRectificationServiceImpl implements IConstructionI
if (!"0".equals(rect.getReviewResult())) {
throw new ServiceException("该整改已复核");
}
String username = SecurityUtils.getUsername();
rectificationMapper.updateReview(dto.getRectificationId(), dto.getReviewResult(), dto.getReviewComment(),
dto.getReviewPhotoUrls(), username);
// 问题反馈状态1到位2复核通过2未到位3复核不通过需重新整改
ConstructionIssueFeedback feedback = feedbackMapper.selectConstructionIssueFeedbackById(rect.getFeedbackId());
if (feedback == null) {
throw new ServiceException("关联问题反馈不存在");
}
ConstructionIssueFeedback update = new ConstructionIssueFeedback();
update.setId(rect.getFeedbackId());
update.setStatus("1".equals(dto.getReviewResult()) ? "2" : "3"); // 2复核通过 3复核不通过
update.setStatus("1".equals(dto.getReviewResult()) ? "2" : "3");
update.setUpdateBy(username);
feedbackMapper.updateConstructionIssueFeedback(update);
if ("2".equals(dto.getReviewResult())) {
thirdPartyDeductionReportService.report(
feedback.getCheckItemId(),
feedback.getProjectId(),
feedback.getDescription(),
dto.getReviewComment(),
feedback.getProblemPhotoUrl(),
null,
feedback.getSubmitTime(),
new Date()
);
}
return 1;
}
}

View File

@ -0,0 +1,80 @@
package com.admin.contractor.service.impl;
import com.admin.contractor.utils.ThirdPartyHttpClient;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 第三方扣分上报封装
*/
@Service
public class ThirdPartyDeductionReportService
{
private static final Logger log = LoggerFactory.getLogger(ThirdPartyDeductionReportService.class);
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final String TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
private final ThirdPartyHttpClient thirdPartyHttpClient;
public ThirdPartyDeductionReportService(ThirdPartyHttpClient thirdPartyHttpClient)
{
this.thirdPartyHttpClient = thirdPartyHttpClient;
}
public void report(Long backConfigId, Long projectId, String description, String reason,
String pictureUrl, String videoUrl, Date warnTime, Date handTime)
{
if (backConfigId == null || projectId == null) {
throw new ServiceException("第三方扣分上报失败:缺少必要字段 backConfigId 或 projectId");
}
try {
String token = thirdPartyHttpClient.getToken("admin", "admin123456");
if (token == null) {
throw new ServiceException("第三方扣分上报失败获取第三方Token失败");
}
Map<String, Object> payload = new LinkedHashMap<>();
payload.put("backConfigId", backConfigId);
payload.put("description", description);
payload.put("projectId", projectId);
payload.put("reason", reason);
payload.put("status", 0);
payload.put("wainTime", format(warnTime));
payload.put("handTime", format(handTime != null ? handTime : new Date()));
payload.put("pictureUrl", pictureUrl);
payload.put("videoUrl", videoUrl);
String response = thirdPartyHttpClient.submitDeduction(token, OBJECT_MAPPER.writeValueAsString(payload));
if (response == null) {
throw new ServiceException("第三方扣分上报失败:调用第三方接口无响应");
}
JsonNode jsonNode = OBJECT_MAPPER.readTree(response);
if (jsonNode.has("code") && jsonNode.get("code").asInt() != 200) {
String message = jsonNode.has("message") ? jsonNode.get("message").asText() : "业务处理失败";
throw new ServiceException("第三方扣分上报失败:" + message);
}
} catch (Exception e) {
if (e instanceof ServiceException) {
throw (ServiceException) e;
}
log.error("第三方扣分上报异常", e);
throw new ServiceException("第三方扣分上报失败:" + e.getMessage());
}
}
private String format(Date date)
{
if (date == null) {
return null;
}
return new SimpleDateFormat(TIME_PATTERN).format(date);
}
}

View File

@ -9,11 +9,11 @@ import com.admin.contractor.mapper.ConstructionIssueFeedbackMapper;
import com.admin.contractor.mapper.VideoStreamDetectionMapper;
import com.admin.contractor.service.IVideoStreamDetectionService;
import com.admin.property.mapper.PcCameraAllocMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -23,13 +23,11 @@ import java.util.Date;
import java.util.List;
/**
* 视频流检测推送Service第三方推送落库
*
* @author ruoyi
* 视频流检测推送 Service
*/
@Service
public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionService {
public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionService
{
@Autowired
private VideoStreamDetectionMapper videoStreamDetectionMapper;
@ -39,22 +37,27 @@ public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionSer
@Autowired(required = false)
private PcCameraAllocMapper pcCameraAllocMapper;
private static final ObjectMapper objectMapper = new ObjectMapper();
@Autowired
private ThirdPartyDeductionReportService thirdPartyDeductionReportService;
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Override
@Transactional(rollbackFor = Exception.class)
public int push(VideoStreamPushDTO dto) {
public int push(VideoStreamPushDTO dto)
{
if (dto.getDescription() == null || dto.getDescription().isEmpty()) {
return 0;
}
String projectId = null;
if (pcCameraAllocMapper != null && dto.getStreamId() != null) {
// streamId 约定为球机编号 cameraNo
Long projectIdValue = pcCameraAllocMapper.selectProjectIdByCameraNo(dto.getStreamId());
if (projectIdValue != null) {
projectId = String.valueOf(projectIdValue);
}
}
List<VideoStreamDetection> list = new ArrayList<>();
for (VideoDetectionItemDTO item : dto.getDescription()) {
VideoStreamDetection entity = new VideoStreamDetection();
@ -68,11 +71,13 @@ public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionSer
entity.setConfidence(item.getConfidence());
entity.setTag(item.getTag());
entity.setDetectType(item.getDetectType());
entity.setRuleId(item.getRuleId());
entity.setImgUrl(dto.getImgUrl());
entity.setVideoUrl(dto.getVideoUrl());
entity.setIsFirst(Boolean.TRUE.equals(dto.getIsFirst()) ? "1" : "0");
list.add(entity);
}
if (list.isEmpty()) {
return 0;
}
@ -81,28 +86,33 @@ public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionSer
}
@Override
public List<VideoStreamDetection> listPendingReview(VideoStreamDetection query) {
public List<VideoStreamDetection> listPendingReview(VideoStreamDetection query)
{
return videoStreamDetectionMapper.selectPendingReviewList(query);
}
@Override
public List<VideoStreamDetection> listAllPushRecords(VideoStreamDetection query) {
public List<VideoStreamDetection> listAllPushRecords(VideoStreamDetection query)
{
return videoStreamDetectionMapper.selectAllPushRecords(query);
}
@Override
public List<VideoStreamDetection> listReviewedRecords(VideoStreamDetection query) {
public List<VideoStreamDetection> listReviewedRecords(VideoStreamDetection query)
{
return videoStreamDetectionMapper.selectReviewedRecords(query);
}
@Override
public VideoStreamDetection selectVideoStreamDetectionById(Long id) {
public VideoStreamDetection selectVideoStreamDetectionById(Long id)
{
return videoStreamDetectionMapper.selectVideoStreamDetectionById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int submitReview(VideoDetectionReviewItemDTO dto) {
public int submitReview(VideoDetectionReviewItemDTO dto)
{
if (dto == null) {
throw new ServiceException("复核项不能为空");
}
@ -112,26 +122,27 @@ public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionSer
if (StringUtils.isEmpty(dto.getReviewResult())) {
throw new ServiceException("复核结果不能为空");
}
String username = SecurityUtils.getUsername();
Date now = new Date();
// 单条复核根据检测ID定位记录
VideoStreamDetection detection = videoStreamDetectionMapper.selectVideoStreamDetectionById(dto.getVideoDetectionId());
if (detection == null) {
return 0;
}
String result = StringUtils.isNotEmpty(dto.getReviewResult()) ? dto.getReviewResult() : "";
videoStreamDetectionMapper.updateReview(dto.getVideoDetectionId(), result, username);
if ("2".equals(result)) {
// 单条复核不再要求前端传 projectId直接从检测记录回填
String username = SecurityUtils.getUsername();
Date now = new Date();
videoStreamDetectionMapper.updateReview(dto.getVideoDetectionId(), dto.getReviewResult(), username);
if ("2".equals(dto.getReviewResult())) {
Long issueProjectId = parseProjectId(detection.getProjectId());
if (issueProjectId == null) {
throw new ServiceException("存在不合格项时项目ID不能为空");
throw new ServiceException("不合格项缺少项目ID");
}
ConstructionIssueFeedback feedback = new ConstructionIssueFeedback();
feedback.setProjectId(issueProjectId);
feedback.setSourceType("1");
feedback.setVideoDetectionId(detection.getId());
feedback.setCheckItemId(parseCheckItemId(detection.getRuleId()));
feedback.setDetectionName(detection.getName());
feedback.setDescription(detection.getLabel());
feedback.setProblemPhotoUrl(detection.getImgUrl());
@ -141,30 +152,55 @@ public class VideoStreamDetectionServiceImpl implements IVideoStreamDetectionSer
feedback.setSubmitTime(now);
feedback.setCreateBy(username);
constructionIssueFeedbackMapper.insertConstructionIssueFeedback(feedback);
thirdPartyDeductionReportService.report(
feedback.getCheckItemId(),
issueProjectId,
detection.getLabel(),
detection.getTag(),
detection.getImgUrl(),
detection.getVideoUrl(),
detection.getCreateTime(),
now
);
}
return 1;
}
private String toBoxJson(List<Double> box) {
private String toBoxJson(List<Double> box)
{
if (box == null || box.isEmpty()) {
return null;
}
try {
return objectMapper.writeValueAsString(box);
return OBJECT_MAPPER.writeValueAsString(box);
} catch (JsonProcessingException e) {
return null;
}
}
private Long parseProjectId(String projectId) {
private Long parseProjectId(String projectId)
{
if (StringUtils.isEmpty(projectId)) {
return null;
}
try {
return Long.valueOf(projectId);
} catch (NumberFormatException e) {
throw new ServiceException("projectId 格式错误,必须为数字字符串");
throw new ServiceException("projectId 格式错误,必须是数字字符串");
}
}
private Long parseCheckItemId(String ruleId)
{
if (StringUtils.isEmpty(ruleId)) {
return null;
}
try {
return Long.valueOf(ruleId);
} catch (NumberFormatException e) {
return null;
}
}
}

View File

@ -0,0 +1,95 @@
package com.admin.contractor.utils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.PostConstruct;
import java.util.Collections;
@Component
public class ThirdPartyHttpClient
{
private static final Logger log = LoggerFactory.getLogger(ThirdPartyHttpClient.class);
private static final String BASE_URL = "http://1.13.245.108/trainCore";
private static final int CONNECT_TIMEOUT_MS = 1500;
private static final int READ_TIMEOUT_MS = 2500;
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private RestTemplate restTemplate;
@PostConstruct
public void init()
{
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(CONNECT_TIMEOUT_MS);
factory.setReadTimeout(READ_TIMEOUT_MS);
restTemplate = new RestTemplate(factory);
}
public String getToken(String username, String password)
{
try {
String url = BASE_URL + "/login/getToken";
String body = String.format("{\"username\":\"%s\",\"password\":\"%s\"}", username, password);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<>(body, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
if (response.getStatusCode() != HttpStatus.OK) {
return null;
}
return parseToken(response.getBody());
} catch (Exception e) {
log.error("获取第三方 token 异常", e);
return null;
}
}
public String submitDeduction(String token, String requestBody)
{
try {
String url = BASE_URL + "/thirdParty/deduction";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.set("Authorization", token);
HttpEntity<String> entity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
return response.getStatusCode() == HttpStatus.OK ? response.getBody() : null;
} catch (Exception e) {
log.error("第三方扣分上报异常", e);
return null;
}
}
private String parseToken(String responseBody)
{
try {
JsonNode jsonNode = OBJECT_MAPPER.readTree(responseBody);
if (jsonNode.has("data") && !jsonNode.get("data").isNull()) {
JsonNode dataNode = jsonNode.get("data");
if (dataNode.has("token")) {
return dataNode.get("token").asText();
}
if (dataNode.isValueNode()) {
return dataNode.asText();
}
}
return null;
} catch (Exception e) {
return null;
}
}
}

View File

@ -22,21 +22,19 @@ import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 风险管控卡模板Controller
*
* @author ruoyi
* 风险管控卡模板 Controller
*/
@Tag(name = "风险管控卡模板配置")
@RestController
@RequestMapping("/logistics/riskCard/template")
public class RiskControlCardTemplateController extends BaseController {
@Autowired
private IRiskControlCardTemplateService templateService;
@Autowired
private IRiskControlCardItemService itemService;
/**
* 查询风险管控卡模板列表
*/
@ -48,7 +46,7 @@ public class RiskControlCardTemplateController extends BaseController {
List<RiskControlCardTemplate> list = templateService.selectRiskControlCardTemplateList(template);
return getDataTable(list);
}
/**
* 导出风险管控卡模板列表
*/
@ -58,20 +56,20 @@ public class RiskControlCardTemplateController extends BaseController {
@PostMapping("/export")
public void export(HttpServletResponse response, RiskControlCardTemplate template) {
List<RiskControlCardTemplate> list = templateService.selectRiskControlCardTemplateList(template);
ExcelUtil<RiskControlCardTemplate> util = new ExcelUtil<RiskControlCardTemplate>(RiskControlCardTemplate.class);
ExcelUtil<RiskControlCardTemplate> util = new ExcelUtil<>(RiskControlCardTemplate.class);
util.exportExcel(response, list, "风险管控卡模板数据");
}
/**
* 获取风险管控卡模板详细信息
* 获取风险管控卡模板详
*/
@Operation(summary = "获取风险管控卡模板详细信息")
@Operation(summary = "获取风险管控卡模板详")
@PreAuthorize("@ss.hasPermi('logistics:riskCard:query')")
@GetMapping(value = "/{templateId}")
public AjaxResult getInfo(@Parameter(description = "模板ID") @PathVariable("templateId") Long templateId) {
return success(templateService.selectRiskControlCardTemplateById(templateId));
}
/**
* 新增风险管控卡模板
*/
@ -82,7 +80,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult add(@Validated @RequestBody RiskControlCardTemplate template) {
return toAjax(templateService.insertRiskControlCardTemplate(template));
}
/**
* 修改风险管控卡模板
*/
@ -93,7 +91,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult edit(@Validated @RequestBody RiskControlCardTemplate template) {
return toAjax(templateService.updateRiskControlCardTemplate(template));
}
/**
* 删除风险管控卡模板
*/
@ -104,7 +102,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult remove(@Parameter(description = "模板ID数组") @PathVariable Long[] templateIds) {
return toAjax(templateService.deleteRiskControlCardTemplateByIds(templateIds));
}
/**
* 发布模板
*/
@ -115,7 +113,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult publish(@Parameter(description = "模板ID") @PathVariable("templateId") Long templateId) {
return toAjax(templateService.publishTemplate(templateId));
}
/**
* 作废模板
*/
@ -126,7 +124,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult obsolete(@Parameter(description = "模板ID") @PathVariable("templateId") Long templateId) {
return toAjax(templateService.obsoleteTemplate(templateId));
}
/**
* 保存并发布模板
*/
@ -137,9 +135,9 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult saveAndPublish(@Validated @RequestBody RiskControlCardTemplate template) {
return toAjax(templateService.saveAndPublishTemplate(template));
}
/**
* 保存模板未发布状态设置为0
* 保存模板未发布
*/
@Operation(summary = "保存模板未发布")
@PreAuthorize("@ss.hasPermi('logistics:riskCard:edit')")
@ -148,7 +146,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult save(@Validated @RequestBody RiskControlCardTemplate template) {
return toAjax(templateService.saveTemplate(template));
}
/**
* 批量导入检查项
*/
@ -157,10 +155,10 @@ public class RiskControlCardTemplateController extends BaseController {
@Log(title = "风险管控卡检查项", businessType = BusinessType.IMPORT)
@PostMapping("/importItems/{templateId}")
public AjaxResult importItems(@Parameter(description = "模板ID") @PathVariable("templateId") Long templateId,
@Parameter(description = "检查项列表") @RequestBody List<RiskControlCardItem> items) {
@Parameter(description = "检查项列表") @RequestBody List<RiskControlCardItem> items) {
return toAjax(templateService.batchImportItems(templateId, items));
}
/**
* 导出模板包含检查项
*/
@ -170,9 +168,9 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult exportTemplate(@Parameter(description = "模板ID") @PathVariable("templateId") Long templateId) {
return success(templateService.exportTemplate(templateId));
}
/**
* 查询检查项列表
* 查询检查项列表按模板ID
*/
@Operation(summary = "查询检查项列表")
@PreAuthorize("@ss.hasPermi('logistics:riskCard:query')")
@ -181,7 +179,19 @@ public class RiskControlCardTemplateController extends BaseController {
List<RiskControlCardItem> items = itemService.selectItemsByTemplateId(templateId);
return success(items);
}
/**
* 查询检查项列表分页+筛选
*/
@Operation(summary = "查询检查项分页列表")
@PreAuthorize("@ss.hasPermi('logistics:riskCard:query')")
@GetMapping("/item/list")
public TableDataInfo listItems(RiskControlCardItem item) {
startPage();
List<RiskControlCardItem> list = itemService.selectRiskControlCardItemList(item);
return getDataTable(list);
}
/**
* 新增检查项
*/
@ -192,7 +202,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult addItem(@Validated @RequestBody RiskControlCardItem item) {
return toAjax(itemService.insertRiskControlCardItem(item));
}
/**
* 修改检查项
*/
@ -203,7 +213,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult editItem(@Validated @RequestBody RiskControlCardItem item) {
return toAjax(itemService.updateRiskControlCardItem(item));
}
/**
* 删除检查项
*/
@ -214,7 +224,7 @@ public class RiskControlCardTemplateController extends BaseController {
public AjaxResult removeItem(@Parameter(description = "检查项ID") @PathVariable("itemId") Long itemId) {
return toAjax(itemService.deleteRiskControlCardItemById(itemId));
}
/**
* 更新检查项排序
*/

View File

@ -5,37 +5,40 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 风险管控卡检查项
*
* @author ruoyi
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "风险管控卡检查项")
public class RiskControlCardItem extends BaseEntity {
@Schema(description = "检查项ID")
private Long itemId;
@Schema(description = "模板ID")
private Long templateId;
@Schema(description = "检查项描述")
private String itemDescription;
@Schema(description = "检查方式0人工检查1自动检查")
private String checkMethod;
@Schema(description = "是否必选0可选1必选")
private String isRequired;
@Schema(description = "风险等级1高 2中 3低")
private String riskLevel;
@Schema(description = "分值")
private BigDecimal score;
@Schema(description = "排序号")
private Integer sortOrder;
@Schema(description = "删除标志0代表存在 2代表删除")
@Schema(description = "删除标志0存在 2删除")
private String delFlag;
}

View File

@ -20,20 +20,18 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 出入证签发Controller
*
* @author ruoyi
* Access permit issuance controller.
*/
@Tag(name = "出入证签发管理")
@RestController
@RequestMapping("/owner/accessPermitIssuance")
public class AccessPermitIssuanceController extends BaseController {
@Autowired
private IAccessPermitIssuanceService accessPermitIssuanceService;
/**
* 查询待签发出入证列表
* Query access permit issuance list.
*/
@Operation(summary = "查询待签发出入证列表", description = "查询待签发、已签发、已作废等状态的出入证列表")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:list')")
@ -43,29 +41,39 @@ public class AccessPermitIssuanceController extends BaseController {
List<AccessPermit> list = accessPermitIssuanceService.selectAccessPermitIssuanceList(accessPermit);
return getDataTable(list);
}
/**
* 获取出入证签发详细信息
* Get access permit details by permit id.
*/
@Operation(summary = "获取出入证签发详信息")
@Operation(summary = "获取出入证签发详信息")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:query')")
@GetMapping(value = "/{permitId}")
public AjaxResult getInfo(@Parameter(description = "出入证ID") @PathVariable("permitId") Long permitId) {
return success(accessPermitIssuanceService.selectAccessPermitById(permitId));
}
/**
* 根据工作票ID获取签发信息用于预填充表单
* Get access permit details by project id.
*/
@Operation(summary = "根据工作票ID获取签发信息", description = "根据工作票ID获取项目信息、作业地点、负责人等信息用于签发出入证时预填充")
@Operation(summary = "根据项目ID获取出入证详情")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:query')")
@GetMapping("/project/{projectId}")
public AjaxResult getByProjectId(@Parameter(description = "项目ID") @PathVariable("projectId") Long projectId) {
return success(accessPermitIssuanceService.selectAccessPermitByProjectId(projectId));
}
/**
* Get issuance prefill info by ticket id.
*/
@Operation(summary = "根据工作票ID获取签发信息", description = "根据工作票ID获取项目信息、作业地点、负责人等信息用于签发出入证时预填充表单")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:query')")
@GetMapping("/ticket/{ticketId}")
public AjaxResult getInfoByTicketId(@Parameter(description = "工作票ID") @PathVariable("ticketId") Long ticketId) {
return success(accessPermitIssuanceService.getIssuanceInfoByTicketId(ticketId));
}
/**
* 签发出入证
* Issue access permit.
*/
@Operation(summary = "签发出入证", description = "确认签发出入证,更新状态为已签发")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:issue')")
@ -74,9 +82,9 @@ public class AccessPermitIssuanceController extends BaseController {
public AjaxResult issue(@Validated @RequestBody AccessPermit accessPermit) {
return toAjax(accessPermitIssuanceService.issueAccessPermit(accessPermit));
}
/**
* 查看关联票证
* View related work ticket.
*/
@Operation(summary = "查看关联票证", description = "根据出入证ID查看关联的工作票信息")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:query')")
@ -85,9 +93,9 @@ public class AccessPermitIssuanceController extends BaseController {
WorkTicket workTicket = accessPermitIssuanceService.getRelatedWorkTicket(permitId);
return success(workTicket);
}
/**
* 作废出入证
* Cancel access permit.
*/
@Operation(summary = "作废出入证", description = "将出入证状态更新为已作废")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:edit')")
@ -96,9 +104,9 @@ public class AccessPermitIssuanceController extends BaseController {
public AjaxResult cancel(@Parameter(description = "出入证ID") @PathVariable("permitId") Long permitId) {
return toAjax(accessPermitIssuanceService.cancelAccessPermit(permitId));
}
/**
* 查询项目已添加的车辆列表
* Query vehicles added under project.
*/
@Operation(summary = "查询项目已添加的车辆列表", description = "查询某个项目下所有出入证已添加的车辆列表(去重)")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:query')")
@ -107,9 +115,9 @@ public class AccessPermitIssuanceController extends BaseController {
List<VehicleInfo> vehicles = accessPermitIssuanceService.getProjectVehicles(projectId);
return success(vehicles);
}
/**
* 查询出入证已添加的车辆列表
* Query vehicles added in access permit.
*/
@Operation(summary = "查询出入证已添加的车辆列表", description = "查询指定出入证已添加的车辆列表")
@PreAuthorize("@ss.hasPermi('owner:accessPermitIssuance:query')")

View File

@ -28,6 +28,14 @@ public interface IAccessPermitIssuanceService {
* @return 出入证信息
*/
AccessPermit selectAccessPermitById(Long permitId);
/**
* 根据项目ID查询出入证详情
*
* @param projectId 项目ID
* @return 出入证信息
*/
AccessPermit selectAccessPermitByProjectId(Long projectId);
/**
* 根据工作票ID获取签发信息用于预填充表单

View File

@ -95,6 +95,22 @@ public class AccessPermitIssuanceServiceImpl implements IAccessPermitIssuanceSer
}
return permit;
}
/**
* 根据项目ID查询出入证详情
*
* @param projectId 项目ID
* @return 出入证信息
*/
@Override
public AccessPermit selectAccessPermitByProjectId(Long projectId) {
AccessPermit permit = accessPermitMapper.selectAccessPermitByProjectId(projectId);
if (permit != null) {
parseJsonFields(permit);
loadSysUsers(permit);
}
return permit;
}
/**
* 根据工作票ID获取签发信息用于预填充表单

View File

@ -143,6 +143,10 @@ public class OwnerIssuerServiceImpl implements IOwnerIssuerService {
if (issuer == null) {
return false;
}
// 签发人被禁用时视为无权限
if (!"0".equals(issuer.getStatus())) {
return false;
}
if (issuer.getValidUntil() != null && issuer.getValidUntil().before(todayStart())) {
return false;
}

View File

@ -9,6 +9,7 @@
<result property="projectId" column="project_id" />
<result property="sourceType" column="source_type" />
<result property="videoDetectionId" column="video_detection_id"/>
<result property="checkItemId" column="check_item_id" />
<result property="detectionName" column="detection_name" />
<result property="description" column="description" />
<result property="problemPhotoUrl" column="problem_photo_url" />
@ -46,11 +47,11 @@
<insert id="insertConstructionIssueFeedback" parameterType="com.admin.contractor.domain.ConstructionIssueFeedback" useGeneratedKeys="true" keyProperty="id">
insert into cons_issue_fb(
project_id, source_type, video_detection_id, detection_name, description,
project_id, source_type, video_detection_id, check_item_id, detection_name, description,
problem_photo_url, attachment_urls, status, submit_by, submit_time, remark,
del_flag, create_by, create_time
) values (
#{projectId}, #{sourceType}, #{videoDetectionId}, #{detectionName}, #{description},
#{projectId}, #{sourceType}, #{videoDetectionId}, #{checkItemId}, #{detectionName}, #{description},
#{problemPhotoUrl}, #{attachmentUrls}, #{status}, #{submitBy}, #{submitTime}, #{remark},
'0', #{createBy}, now()
)
@ -60,6 +61,7 @@
update cons_issue_fb
<set>
<if test="status != null and status != ''">status = #{status},</if>
<if test="checkItemId != null">check_item_id = #{checkItemId},</if>
<if test="attachmentUrls != null">attachment_urls = #{attachmentUrls},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>

View File

@ -58,6 +58,7 @@
<result property="projectId" column="project_id" />
<result property="sourceType" column="source_type" />
<result property="videoDetectionId" column="video_detection_id" />
<result property="checkItemId" column="check_item_id" />
<result property="detectionName" column="detection_name" />
<result property="description" column="description" />
<result property="problemPhotoUrl" column="problem_photo_url" />
@ -84,7 +85,7 @@
</select>
<select id="selectDetailByFeedbackId" resultMap="RectificationDetailVOResult">
select r.*, f.id as fb_id, f.project_id, f.source_type, f.video_detection_id, f.detection_name,
select r.*, f.id as fb_id, f.project_id, f.source_type, f.video_detection_id, f.check_item_id, f.detection_name,
f.description, f.problem_photo_url, f.attachment_urls, f.status as fb_status,
f.submit_by, f.submit_time, f.del_flag, f.create_by as fb_create_by,
f.create_time as fb_create_time, f.update_by as fb_update_by, f.update_time as fb_update_time
@ -109,7 +110,7 @@
</select>
<select id="selectDetailByProjectId" parameterType="long" resultMap="RectificationDetailVOResult">
select r.*, f.id as fb_id, f.project_id, f.source_type, f.video_detection_id, f.detection_name,
select r.*, f.id as fb_id, f.project_id, f.source_type, f.video_detection_id, f.check_item_id, f.detection_name,
f.description, f.problem_photo_url, f.attachment_urls, f.status as fb_status,
f.submit_by, f.submit_time, f.del_flag, f.create_by as fb_create_by,
f.create_time as fb_create_time, f.update_by as fb_update_by, f.update_time as fb_update_time

View File

@ -46,7 +46,7 @@
<if test="status != null and status != ''">
and status = #{status}
</if>
order by alarm_type_id desc
order by alarm_type_id
</select>
<insert id="insertPcAlarmType" parameterType="com.admin.property.domain.PcAlarmType"

View File

@ -11,6 +11,7 @@
<result property="checkMethod" column="check_method" />
<result property="isRequired" column="is_required" />
<result property="riskLevel" column="risk_level" />
<result property="score" column="score" />
<result property="sortOrder" column="sort_order" />
<result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" />
@ -20,7 +21,7 @@
</resultMap>
<sql id="selectRiskControlCardItemVo">
select item_id, template_id, item_description, check_method, is_required, risk_level, sort_order, del_flag, create_by, create_time, update_by, update_time
select item_id, template_id, item_description, check_method, is_required, risk_level, score, sort_order, del_flag, create_by, create_time, update_by, update_time
from risk_control_card_item_template
</sql>
@ -57,6 +58,7 @@
<if test="checkMethod != null and checkMethod != ''">check_method,</if>
<if test="isRequired != null and isRequired != ''">is_required,</if>
<if test="riskLevel != null and riskLevel != ''">risk_level,</if>
<if test="score != null">score,</if>
<if test="sortOrder != null">sort_order,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
create_time
@ -66,6 +68,7 @@
<if test="checkMethod != null and checkMethod != ''">#{checkMethod},</if>
<if test="isRequired != null and isRequired != ''">#{isRequired},</if>
<if test="riskLevel != null and riskLevel != ''">#{riskLevel},</if>
<if test="score != null">#{score},</if>
<if test="sortOrder != null">#{sortOrder},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
now()
@ -73,10 +76,10 @@
</insert>
<insert id="batchInsertRiskControlCardItem" parameterType="java.util.List">
insert into risk_control_card_item_template(template_id, item_description, check_method, is_required, risk_level, sort_order, create_by, create_time)
insert into risk_control_card_item_template(template_id, item_description, check_method, is_required, risk_level, score, sort_order, create_by, create_time)
values
<foreach collection="items" item="item" separator=",">
(#{item.templateId}, #{item.itemDescription}, #{item.checkMethod}, #{item.isRequired}, #{item.riskLevel}, #{item.sortOrder}, #{item.createBy}, now())
(#{item.templateId}, #{item.itemDescription}, #{item.checkMethod}, #{item.isRequired}, #{item.riskLevel}, #{item.score}, #{item.sortOrder}, #{item.createBy}, now())
</foreach>
</insert>
@ -87,6 +90,7 @@
<if test="checkMethod != null and checkMethod != ''">check_method = #{checkMethod},</if>
<if test="isRequired != null and isRequired != ''">is_required = #{isRequired},</if>
<if test="riskLevel != null and riskLevel != ''">risk_level = #{riskLevel},</if>
<if test="score != null">score = #{score},</if>
<if test="sortOrder != null">sort_order = #{sortOrder},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = now()

View File

@ -16,6 +16,7 @@
<result property="confidence" column="confidence" />
<result property="tag" column="tag" />
<result property="detectType" column="detect_type" />
<result property="ruleId" column="rule_id" />
<result property="alarmLevel" column="alarm_level" />
<result property="imgUrl" column="img_url" />
<result property="videoUrl" column="video_url" />
@ -28,10 +29,10 @@
<insert id="insertBatch">
insert into cons_video_detection(
stream_id, project_id, frame_timestamp, name, label, need_alert, box_json, confidence, tag, detect_type, img_url, video_url, is_first, create_time
stream_id, project_id, frame_timestamp, name, label, need_alert, box_json, confidence, tag, detect_type, rule_id, img_url, video_url, is_first, create_time
) values
<foreach collection="list" item="item" separator=",">
(#{item.streamId}, #{item.projectId}, #{item.frameTimestamp}, #{item.name}, #{item.label}, #{item.needAlert}, #{item.boxJson}, #{item.confidence}, #{item.tag}, #{item.detectType}, #{item.imgUrl}, #{item.videoUrl}, #{item.isFirst}, now())
(#{item.streamId}, #{item.projectId}, #{item.frameTimestamp}, #{item.name}, #{item.label}, #{item.needAlert}, #{item.boxJson}, #{item.confidence}, #{item.tag}, #{item.detectType}, #{item.ruleId}, #{item.imgUrl}, #{item.videoUrl}, #{item.isFirst}, now())
</foreach>
</insert>
@ -54,7 +55,7 @@
<select id="selectAllPushRecords" parameterType="com.admin.contractor.domain.VideoStreamDetection" resultMap="VideoStreamDetectionResult">
select
v.id, v.stream_id, v.project_id, v.frame_timestamp, v.name, v.label, v.need_alert,
v.box_json, v.confidence, v.tag, v.detect_type, v.img_url, v.video_url, v.is_first,
v.box_json, v.confidence, v.tag, v.detect_type, v.rule_id, v.img_url, v.video_url, v.is_first,
v.create_time, t.alarm_level
from cons_video_detection v
left join pc_alarm_type t on v.detect_type = t.alarm_type_id and t.del_flag = '0'
@ -74,7 +75,7 @@
<select id="selectReviewedRecords" parameterType="com.admin.contractor.domain.VideoStreamDetection" resultMap="VideoStreamDetectionResult">
select
v.id, v.stream_id, v.project_id, v.frame_timestamp, v.name, v.label, v.need_alert,
v.box_json, v.confidence, v.tag, v.detect_type, v.img_url, v.video_url, v.is_first,
v.box_json, v.confidence, v.tag, v.detect_type, v.rule_id, v.img_url, v.video_url, v.is_first,
v.review_status, v.review_by, v.review_time, v.create_time
from cons_video_detection v
where 1 = 1

View File

@ -1,112 +1,75 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.system.domain.dto.ThirdPartyDeductionDTO;
import com.ruoyi.system.utils.ThirdPartyHttpClient;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.domain.dto.ThirdPartyDeductionDTO;
import com.ruoyi.system.service.IThirdPartyService;
import lombok.extern.slf4j.Slf4j;
import com.ruoyi.system.utils.ThirdPartyHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 第三方接口Service实现
*
* @author ruoyi
* 第三方接口 Service 实现
*/
@Slf4j
@Service
public class ThirdPartyServiceImpl implements IThirdPartyService {
public class ThirdPartyServiceImpl implements IThirdPartyService
{
private static final Logger log = LoggerFactory.getLogger(ThirdPartyServiceImpl.class);
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Autowired
private ThirdPartyHttpClient thirdPartyHttpClient;
private static final ObjectMapper objectMapper = new ObjectMapper();
/**
* 获取第三方系统Token
*
* @param username 用户名
* @param password 密码
* @return Token
*/
@Override
public String getThirdPartyToken(String username, String password) {
log.info("获取第三方Token: username={}", username);
public String getThirdPartyToken(String username, String password)
{
return thirdPartyHttpClient.getToken(username, password);
}
/**
* 调用第三方扣分上报接口
*
* @param dto 扣分上报数据
* @return 调用结果
*/
@Override
public AjaxResult callThirdPartyDeduction(ThirdPartyDeductionDTO dto) {
public AjaxResult callThirdPartyDeduction(ThirdPartyDeductionDTO dto)
{
try {
log.info("调用第三方扣分上报接口thirdId={}, projectId={}", dto.getThirdId(), dto.getProjectId());
// 获取 Token
String token = getThirdPartyToken("admin", "admin123456");
if (token == null) {
return AjaxResult.error("获取第三方 Token 失败");
}
// 转换 DTO JSON 字符串
String requestBody = objectMapper.writeValueAsString(dto);
// 调用第三方接口
String response = thirdPartyHttpClient.submitDeduction(token, requestBody);
if (response == null) {
return AjaxResult.error("调用第三方扣分上报接口失败");
}
// 检查业务返回码
JsonNode jsonNode = objectMapper.readTree(response);
if (jsonNode.has("code") && jsonNode.get("code").asInt() != 200) {
String message = jsonNode.has("message") ? jsonNode.get("message").asText() : "业务处理失败";
log.warn("第三方扣分上报业务失败:{}", message);
return AjaxResult.error("扣分上报失败:" + message);
}
log.info("第三方扣分上报成功");
return AjaxResult.success("扣分上报成功", response);
} catch (Exception e) {
log.error("调用第三方扣分上报接口异常", e);
return AjaxResult.error("调用第三方扣分上报接口异常:" + e.getMessage());
}
}
/**
* 调用第三方获取企业评分接口
*
* @param companyId 企业ID
* @return 企业评分信息
*/
@Override
public AjaxResult callThirdPartyGetCompanyScore(Long companyId) {
try {
log.info("调用第三方获取企业评分接口: companyId={}", companyId);
// 获取Token
String token = getThirdPartyToken("admin", "admin123456");
if (token == null) {
return AjaxResult.error("获取第三方Token失败");
}
String requestBody = OBJECT_MAPPER.writeValueAsString(dto);
String response = thirdPartyHttpClient.submitDeduction(token, requestBody);
if (response == null) {
return AjaxResult.error("调用第三方扣分上报失败");
}
JsonNode jsonNode = OBJECT_MAPPER.readTree(response);
if (jsonNode.has("code") && jsonNode.get("code").asInt() != 200) {
String message = jsonNode.has("message") ? jsonNode.get("message").asText() : "业务处理失败";
return AjaxResult.error("扣分上报失败:" + message);
}
return AjaxResult.success("扣分上报成功", response);
} catch (Exception e) {
log.error("调用第三方扣分上报异常", e);
return AjaxResult.error("调用第三方扣分上报异常:" + e.getMessage());
}
}
// 调用第三方接口
@Override
public AjaxResult callThirdPartyGetCompanyScore(Long companyId)
{
try {
String token = getThirdPartyToken("admin", "admin123456");
if (token == null) {
return AjaxResult.error("获取第三方Token失败");
}
String response = thirdPartyHttpClient.getCompanyScore(token, companyId);
if (response == null) {
return AjaxResult.error("调用第三方获取企业评分接口失败");
return AjaxResult.error("调用第三方获取企业评分失败");
}
log.info("获取企业评分成功: {}", response);
return AjaxResult.success("获取企业评分成功", response);
} catch (Exception e) {
log.error("调用第三方获取企业评分接口异常", e);
return AjaxResult.error("调用第三方获取企业评分接口异常: " + e.getMessage());
log.error("调用第三方获取企业评分异常", e);
return AjaxResult.error("调用第三方获取企业评分异常:" + e.getMessage());
}
}
}