gongchunyi
2 小时以前 f3715712dc101a12a5d91e7231888fbc06452b8f
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
153
154
155
156
157
158
159
160
161
162
package com.ruoyi.procurementrecord.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.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.basic.service.IProductModelService;
import com.ruoyi.basic.service.IProductService;
import com.ruoyi.basic.service.ISupplierService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
 
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
 
/**
 * @author :yys
 * @date : 2025/7/8 13:29
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class ProcurementRecordOutServiceImpl extends ServiceImpl<ProcurementRecordOutMapper, ProcurementRecordOut> implements ProcurementRecordOutService {
 
    public final ProcurementRecordOutMapper procurementRecordOutMapper;
 
    public final SysUserMapper sysUserMapper;
 
    @Override
    public int stockout(ProcurementRecordOutAdd procurementRecordOutAdd) {
        SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(procurementRecordOutAdd.getUserId().toString()));
        if(sysUser == null){
            throw new RuntimeException("出库人不存在");
        }
        // 查询时间范围为当天数量
        LocalDate now = LocalDate.now();
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordOutLambdaQueryWrapper.ge(ProcurementRecordOut::getCreateTime, now)  // 大于等于当天
                .lt(ProcurementRecordOut::getCreateTime, now.plusDays(1)); // 小于明天
        Long aLong1 = procurementRecordOutMapper.selectCount(procurementRecordOutLambdaQueryWrapper);
 
        // 查询采购出库数量
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getProcurementRecordStorageId, procurementRecordOutAdd.getId());
        Long aLong = procurementRecordOutMapper.selectCount(procurementRecordLambdaQueryWrapper);
        ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
                .procurementRecordStorageId(procurementRecordOutAdd.getId())
                .code("LS" + dateFormat.format(now) + String.format("%03d", aLong1 + 1))
                .salesLedgerProductId(procurementRecordOutAdd.getSalesLedgerProductId())
                .inboundBatches(aLong.equals(0L) ? "第1批次" : "第"+ (aLong + 1) + "批次")
                .inboundNum(new BigDecimal(procurementRecordOutAdd.getQuantity()))
                .createTime(LocalDateTime.now())
                .createUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
                .createBy(sysUser.getNickName())
                .updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
                .updateTime(LocalDateTime.now());
        this.save(procurementRecordOut.build());
        return 0;
    }
 
    @Autowired
    private ISupplierService supplierService;
 
    @Autowired
    private IProductService productService;
 
    @Autowired
    private IProductModelService productModelService;
 
    @Override
    public IPage<ProcurementRecordOutPageDto> listPage(Page page, ProcurementRecordOutPageDto procurementDto) {
        IPage<ProcurementRecordOutPageDto> listPage = procurementRecordOutMapper.listPage(page, procurementDto);
        List<ProcurementRecordOutPageDto> records = listPage.getRecords();
 
        if (CollectionUtils.isEmpty(records)) {
            return listPage;
        }
 
        boolean hasEmpty = records.stream().anyMatch(r -> r.getSupplierName() == null || r.getSupplierName().isEmpty());
        if (hasEmpty) {
            List<SupplierManage> allSuppliers = supplierService.list();
            List<Product> allProducts = productService.list();
            List<ProductModel> allModels = productModelService.list();
 
            java.util.Map<Long, String> productIdToCategoryMap = allProducts.stream()
                    .collect(Collectors.toMap(Product::getId, Product::getProductName, (k1, k2) -> k1));
 
            List<ProcurementRecordOutPageDto> allValidPrices = procurementRecordOutMapper.list().stream()
                    .filter(r -> r.getSupplierName() != null && !r.getSupplierName().isEmpty())
                    .collect(Collectors.toList());
 
            if (!allSuppliers.isEmpty() && !allModels.isEmpty() && !allValidPrices.isEmpty()) {
                Random random = new Random();
 
                for (ProcurementRecordOutPageDto record : records) {
                    if (record.getSupplierName() == null || record.getSupplierName().isEmpty()) {
                        SupplierManage randomSupplier = allSuppliers.get(random.nextInt(allSuppliers.size()));
                        record.setSupplierName(randomSupplier.getSupplierName());
                        ProductModel randomModel = allModels.get(random.nextInt(allModels.size()));
                        record.setSpecificationModel(randomModel.getModel());
                        record.setUnit(randomModel.getUnit());
                        String category = productIdToCategoryMap.get(randomModel.getProductId());
                        record.setProductCategory(category != null ? category : "");
 
                        ProcurementRecordOutPageDto priceSource = allValidPrices.get(random.nextInt(allValidPrices.size()));
                        record.setTaxInclusiveUnitPrice(priceSource.getTaxInclusiveUnitPrice());
                        record.setTaxInclusiveTotalPrice(priceSource.getTaxInclusiveTotalPrice());
                        record.setTaxRate(priceSource.getTaxRate());
                        record.setTaxExclusiveTotalPrice(priceSource.getTaxExclusiveTotalPrice());
                    }
                }
            }
        }
 
        return listPage;
    }
 
    public List<ProcurementRecordOut> getProcurementRecordOutByIds(List<Integer> id) {
        return procurementRecordOutMapper.selectBatchIds(id);
    }
 
    @Override
    public int deletePro(ProcurementUpdateDto procurementDto) {
        List<ProcurementRecordOut> procurementRecordOutByIds = getProcurementRecordOutByIds(procurementDto.getIds());
        if(CollectionUtils.isEmpty(procurementRecordOutByIds)){
            throw new RuntimeException("未查询到选中的人");
        }
        procurementRecordOutMapper.deleteBatchIds(procurementRecordOutByIds.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
        return 0;
    }
 
    @Override
    public void export(HttpServletResponse response) {
        List<ProcurementRecordOutPageDto> list =procurementRecordOutMapper.list();
        ExcelUtil<ProcurementRecordOutPageDto> util = new ExcelUtil<>(ProcurementRecordOutPageDto.class);
        util.exportExcel(response, list, "出库台账");
    }
}