2026-04-29 16500befda17ad48812e7a14a972c08321ff6475
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
146
147
148
149
150
151
152
package com.ruoyi.sales.service.impl;
 
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.common.enums.FileNameType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.sales.mapper.AreaMapper;
import com.ruoyi.sales.mapper.BidWinningLedgerMapper;
import com.ruoyi.sales.mapper.BidWinningLedgerRecordMapper;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.pojo.Area;
import com.ruoyi.sales.pojo.BidWinningLedger;
import com.ruoyi.sales.pojo.BidWinningLedgerRecord;
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.service.BidWinningLedgerService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.io.IOException;
import java.util.Date;
import java.util.List;
 
@Service
@RequiredArgsConstructor
public class BidWinningLedgerServiceImpl extends ServiceImpl<BidWinningLedgerMapper, BidWinningLedger> implements BidWinningLedgerService {
 
    private final BidWinningLedgerMapper bidWinningLedgerMapper;
    private final BidWinningLedgerRecordMapper bidWinningLedgerRecordMapper;
    private final CommonFileMapper commonFileMapper;
    private final AreaMapper areaMapper;
    private final CommonFileServiceImpl commonFileService;
 
    @Override
    public IPage<BidWinningLedger> listPage(Page page, BidWinningLedger bidWinningLedger) {
        LambdaQueryWrapper<BidWinningLedger> queryWrapper = new LambdaQueryWrapper<>();
        if (bidWinningLedger != null) {
            if (StringUtils.isNotEmpty(bidWinningLedger.getCustomerName())) {
                queryWrapper.like(BidWinningLedger::getCustomerName, bidWinningLedger.getCustomerName());
            }
            if (StringUtils.isNotEmpty(bidWinningLedger.getProvince())) {
                queryWrapper.eq(BidWinningLedger::getProvince, bidWinningLedger.getProvince());
            }
            if (StringUtils.isNotEmpty(bidWinningLedger.getCity())) {
                queryWrapper.eq(BidWinningLedger::getCity, bidWinningLedger.getCity());
            }
            if (StringUtils.isNotEmpty(bidWinningLedger.getEntryPerson())) {
                queryWrapper.like(BidWinningLedger::getEntryPerson, bidWinningLedger.getEntryPerson());
            }
            if (StringUtils.isNotEmpty(bidWinningLedger.getStatus())) {
                queryWrapper.eq(BidWinningLedger::getStatus, bidWinningLedger.getStatus());
            }
            if (StringUtils.isNotEmpty(bidWinningLedger.getEntryDateStart()) && StringUtils.isNotEmpty(bidWinningLedger.getEntryDateEnd())) {
                queryWrapper.ge(BidWinningLedger::getEntryDate, bidWinningLedger.getEntryDateStart())
                        .le(BidWinningLedger::getEntryDate, bidWinningLedger.getEntryDateEnd());
            }
        }
        queryWrapper.orderByDesc(BidWinningLedger::getUpdateTime)
                .orderByDesc(BidWinningLedger::getEntryDate);
        return bidWinningLedgerMapper.selectPage(page, queryWrapper);
    }
 
    @Override
    public BidWinningLedger getDetail(Long id) {
        BidWinningLedger bidWinningLedger = bidWinningLedgerMapper.selectById(id);
        if (bidWinningLedger == null) {
            return null;
        }
        bidWinningLedger.setCommonFiles(commonFileService.getFileList(id, FileNameType.BID_WINNING_LEDGER.getValue()));
        bidWinningLedger.setRecordList(bidWinningLedgerRecordMapper.selectList(new LambdaQueryWrapper<BidWinningLedgerRecord>()
                .eq(BidWinningLedgerRecord::getBidWinningLedgerId, id)
                .orderByDesc(BidWinningLedgerRecord::getCreateTime)));
        return bidWinningLedger;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addLedger(BidWinningLedger bidWinningLedger) throws IOException {
        fillDefaultFields(bidWinningLedger);
        boolean saved = save(bidWinningLedger);
        if (saved) {
            commonFileService.migrateTempFilesToFormal(bidWinningLedger.getId(), bidWinningLedger.getTempFileIds());
        }
        return saved;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateLedger(BidWinningLedger bidWinningLedger) throws IOException {
        fillDefaultFields(bidWinningLedger);
        boolean updated = updateById(bidWinningLedger);
        if (updated) {
            commonFileService.migrateTempFilesToFormal(bidWinningLedger.getId(), bidWinningLedger.getTempFileIds());
        }
        return updated;
    }
 
    @Override
    public boolean addRecord(BidWinningLedgerRecord bidWinningLedgerRecord) {
        if (StringUtils.isEmpty(bidWinningLedgerRecord.getEntryPerson())) {
            bidWinningLedgerRecord.setEntryPerson(SecurityUtils.getLoginUser().getUser().getNickName());
        }
        if (bidWinningLedgerRecord.getEntryDate() == null) {
            bidWinningLedgerRecord.setEntryDate(new Date());
        }
        int inserted = bidWinningLedgerRecordMapper.insert(bidWinningLedgerRecord);
        if (inserted > 0 && bidWinningLedgerRecord.getBidWinningLedgerId() != null) {
            BidWinningLedger updateEntity = new BidWinningLedger();
            updateEntity.setId(bidWinningLedgerRecord.getBidWinningLedgerId());
            updateEntity.setStatus(bidWinningLedgerRecord.getStatus());
            bidWinningLedgerMapper.updateById(updateEntity);
            return true;
        }
        return inserted > 0;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeLedgerBatchByIds(List<Long> ids) {
        if (ids == null || ids.isEmpty()) {
            return false;
        }
        bidWinningLedgerRecordMapper.delete(new LambdaQueryWrapper<BidWinningLedgerRecord>()
                .in(BidWinningLedgerRecord::getBidWinningLedgerId, ids));
        commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>()
                .in(CommonFile::getCommonId, ids)
                .eq(CommonFile::getType, FileNameType.BID_WINNING_LEDGER.getValue()));
        return removeByIds(ids);
    }
 
    @Override
    public List<Area> getProvinceList() {
        return areaMapper.selectList(new LambdaQueryWrapper<Area>().eq(Area::getLevel, 1).eq(Area::getParentId, 0));
    }
 
    @Override
    public List<Area> getCityList(Integer provinceId) {
        return areaMapper.selectList(new LambdaQueryWrapper<Area>().eq(Area::getLevel, 2).eq(Area::getParentId, provinceId));
    }
 
    private void fillDefaultFields(BidWinningLedger bidWinningLedger) {
        if (StringUtils.isEmpty(bidWinningLedger.getEntryPerson())) {
            bidWinningLedger.setEntryPerson(SecurityUtils.getLoginUser().getUser().getNickName());
        }
        if (bidWinningLedger.getEntryDate() == null) {
            bidWinningLedger.setEntryDate(new Date());
        }
    }
}