1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.trafficaudit.llmintegration.service;
 
import com.trafficaudit.dataimport.entity.H2032EnterpriseMonthly;
import com.trafficaudit.dataimport.mapper.H2032EnterpriseMonthlyMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
 
@Slf4j
@Service
public class AuditExplanationService {
 
    @Resource
    private LLMService llmService;
    @Resource
    private DesensitizeService desensitizeService;
    @Resource
    private H2032EnterpriseMonthlyMapper reportMapper;
 
    public String analyze(String explanation, String ruleDesc, Long reportId) {
        H2032EnterpriseMonthly report = reportMapper.selectById(reportId);
        if (report == null) {
            return "无法获取关联数据";
        }
 
        String maskedName = desensitizeService.maskEnterprise(report.getEnterpriseName());
 
        String prompt = String.format(
            "你是交通统计数据审核助手。请根据以下信息判断上报人的解释是否合理,并给出处置建议。\n\n" +
            "审核规则: %s\n" +
            "企业: %s\n" +
            "车辆总数: %s, 吨位总数: %s\n" +
            "货运量: %s, 周转量: %s\n" +
            "上报人解释: %s\n\n" +
            "请按以下格式回复:\n" +
            "合理性判断: [合理/存疑/不合理]\n" +
            "理由: [简要说明]\n" +
            "处置建议: [具体建议]",
            ruleDesc, maskedName,
            report.getVehicleTotal(), report.getTonsTotal(),
            report.getFreightTotal(), report.getTurnoverTotal(),
            explanation);
 
        String result = llmService.chat(prompt);
 
        String unmasked = desensitizeService.unmaskEnterprise(maskedName);
        if (result != null) {
            result = result.replace(maskedName, unmasked);
        }
 
        return result != null ? result : "LLM分析失败,请人工判断";
    }
}