hsy
2026-08-28 a8e4132c3e2e9c3b3fcb0360901b35571b6464ea
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package com.ruoyi.sales.service.impl;
 
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.enums.ApplicationTypeEnum;
import com.ruoyi.basic.enums.RecordTypeEnum;
import com.ruoyi.basic.dto.StorageBlobDTO;
import com.ruoyi.basic.dto.StorageBlobVO;
import com.ruoyi.basic.utils.FileUtil;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.sales.dto.SalesLawsuitDTO;
import com.ruoyi.sales.mapper.SalesLawsuitMapper;
import com.ruoyi.sales.pojo.SalesLawsuit;
import com.ruoyi.sales.service.ISalesLawsuitService;
import com.ruoyi.sales.vo.SalesLawsuitVO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
 
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 诉讼管理 Service 实现
 */
@Slf4j
@Service
public class SalesLawsuitServiceImpl extends ServiceImpl<SalesLawsuitMapper, SalesLawsuit> implements ISalesLawsuitService {
 
    @Resource
    private FileUtil fileUtil;
 
    @Override
    public IPage<SalesLawsuitVO> listPage(Page<SalesLawsuit> page, SalesLawsuitDTO dto) {
        LambdaQueryWrapper<SalesLawsuit> queryWrapper = buildQueryWrapper(dto);
        IPage<SalesLawsuit> iPage = this.page(page, queryWrapper);
 
        IPage<SalesLawsuitVO> voPage = iPage.convert(item -> {
            SalesLawsuitVO vo = BeanUtil.copyProperties(item, SalesLawsuitVO.class);
            return vo;
        });
 
        return voPage;
    }
 
    @Override
    public AjaxResult getDetail(Long id) {
        SalesLawsuit lawsuit = this.getById(id);
        if (lawsuit == null) {
            return AjaxResult.error("数据不存在");
        }
        SalesLawsuitVO vo = BeanUtil.copyProperties(lawsuit, SalesLawsuitVO.class);
 
        // 组装附件
        List<StorageBlobVO> storageBlobVOs = fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(
                ApplicationTypeEnum.FILE,
                RecordTypeEnum.SALES_LAWSUIT,
                id
        );
        vo.setStorageBlobVOs(storageBlobVOs != null ? storageBlobVOs : new ArrayList<>());
 
        return AjaxResult.success(vo);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult addOrUpdate(SalesLawsuitDTO dto) {
        SalesLawsuit lawsuit = BeanUtil.copyProperties(dto, SalesLawsuit.class);
        boolean isUpdate = lawsuit.getId() != null;
 
        if (isUpdate) {
            this.updateById(lawsuit);
            log.info("TODO: 同步更新项目时间轴中对应的诉讼事件节点 (projectId: {}, lawsuitId: {})", lawsuit.getProjectId(), lawsuit.getId());
        } else {
            this.save(lawsuit);
            log.info("TODO: 在项目时间轴中追加一条诉讼节点 (projectId: {}, lawsuitId: {})", lawsuit.getProjectId(), lawsuit.getId());
        }
 
        // 处理附件
        List<StorageBlobDTO> storageBlobDTOs = dto.getStorageBlobDTOs();
        if (storageBlobDTOs == null) {
            storageBlobDTOs = new ArrayList<>();
        }
        fileUtil.saveStorageAttachment(
                ApplicationTypeEnum.FILE,
                RecordTypeEnum.SALES_LAWSUIT,
                lawsuit.getId(),
                storageBlobDTOs
        );
 
        return AjaxResult.success();
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult del(List<Long> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return AjaxResult.error("参数不能为空");
        }
        List<SalesLawsuit> lawsuits = this.listByIds(ids);
 
        this.removeByIds(ids);
 
        for (SalesLawsuit lawsuit : lawsuits) {
            log.info("TODO: 同步移除项目时间轴中对应的诉讼事件节点 (projectId: {}, lawsuitId: {})", lawsuit.getProjectId(), lawsuit.getId());
        }
 
        return AjaxResult.success();
    }
 
    @Override
    public List<SalesLawsuit> selectList(SalesLawsuitDTO dto) {
        return this.list(buildQueryWrapper(dto));
    }
 
    /**
     * 构建查询条件
     */
    private LambdaQueryWrapper<SalesLawsuit> buildQueryWrapper(SalesLawsuitDTO dto) {
        LambdaQueryWrapper<SalesLawsuit> queryWrapper = new LambdaQueryWrapper<>();
        if (dto == null) {
            return queryWrapper;
        }
        queryWrapper.like(StringUtils.isNotBlank(dto.getCaseNo()), SalesLawsuit::getCaseNo, dto.getCaseNo());
        queryWrapper.eq(dto.getProjectId() != null, SalesLawsuit::getProjectId, dto.getProjectId());
        queryWrapper.like(StringUtils.isNotBlank(dto.getProjectName()), SalesLawsuit::getProjectName, dto.getProjectName());
        queryWrapper.eq(dto.getContractId() != null, SalesLawsuit::getContractId, dto.getContractId());
        queryWrapper.like(StringUtils.isNotBlank(dto.getContractNo()), SalesLawsuit::getContractNo, dto.getContractNo());
        queryWrapper.eq(StringUtils.isNotBlank(dto.getLawsuitStatus()), SalesLawsuit::getLawsuitStatus, dto.getLawsuitStatus());
        queryWrapper.like(StringUtils.isNotBlank(dto.getLawyer()), SalesLawsuit::getLawyer, dto.getLawyer());
        queryWrapper.ge(dto.getFilingDateStart() != null, SalesLawsuit::getFilingDate, dto.getFilingDateStart());
        queryWrapper.le(dto.getFilingDateEnd() != null, SalesLawsuit::getFilingDate, dto.getFilingDateEnd());
 
        queryWrapper.orderByDesc(SalesLawsuit::getCreateTime);
        return queryWrapper;
    }
}