陈昶聿
2 天以前 3d047130b059efd46f56be37465a751ab16ee8cb
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.smartor.service.impl;
 
import com.smartor.domain.PatSpecificArchiveGenerateLog;
import com.smartor.mapper.PatSpecificArchiveGenerateLogMapper;
import com.smartor.service.IPatSpecificArchiveGenerateLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
 
import java.util.Date;
 
/**
 * 专科档案生成日志Service业务层处理。
 *
 * @author ruoyi
 * @date 2026-11-11
 */
@Service
public class PatSpecificArchiveGenerateLogServiceImpl implements IPatSpecificArchiveGenerateLogService {
 
    @Autowired
    private PatSpecificArchiveGenerateLogMapper logMapper;
 
    @Override
    public PatSpecificArchiveGenerateLog selectBySourceSubAndConfig(String sourceType, Long sourceSubId, Integer configId) {
        return logMapper.selectBySourceSubAndConfig(sourceType, sourceSubId,
                configId == null ? 0 : configId);
    }
 
    @Override
    public boolean existsProcessedBySourceSub(String sourceType, Long sourceSubId) {
        return logMapper.countProcessedBySourceSub(sourceType, sourceSubId) > 0;
    }
 
    @Override
    public int saveOrUpdate(PatSpecificArchiveGenerateLog log) {
        if (log == null) {
            return 0;
        }
        if (log.getSourceType() == null) {
            log.setSourceType("2");
        }
        if (log.getConfigId() == null) {
            log.setConfigId(0);
        }
        if (log.getRetryCount() == null) {
            log.setRetryCount(0);
        }
        Date now = new Date();
        log.setUpdateTime(now);
        PatSpecificArchiveGenerateLog old = logMapper.selectBySourceSubAndConfig(
                log.getSourceType(), log.getSourceSubId(), log.getConfigId());
        if (old == null) {
            log.setCreateTime(now);
            try {
                return logMapper.insertPatSpecificArchiveGenerateLog(log);
            } catch (DuplicateKeyException e) {
                // 并发下另一个线程已写入,转为更新,保证幂等
                old = logMapper.selectBySourceSubAndConfig(
                        log.getSourceType(), log.getSourceSubId(), log.getConfigId());
                if (old == null) {
                    throw e;
                }
                log.setId(old.getId());
                return logMapper.updatePatSpecificArchiveGenerateLog(log);
            }
        }
        log.setId(old.getId());
        if (log.getCreateTime() == null) {
            log.setCreateTime(old.getCreateTime());
        }
        return logMapper.updatePatSpecificArchiveGenerateLog(log);
    }
}