liding
2 天以前 733b9e6837365d2817d7e8a0005b2c167c18f77e
1.生产加工  2.煤种id优化
已修改9个文件
147 ■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/controller/CoalInfoController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/CoalInfoService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalInfoServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/dto/PurchaseRegistrationDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/entity/Production.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/entity/ProductionMaster.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/CoalInfoController.java
@@ -9,6 +9,8 @@
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * <p>
 * 煤种信息表 前端控制器
@@ -26,14 +28,22 @@
    private CoalInfoService coalInfoService;
    /**
     * 查询
     * 煤种查询
     */
    @GetMapping("/list")
    public R<IPage<CoalInfo>> list(Page page, CoalInfoDto coalInfoDto) {
        IPage<CoalInfo> list = coalInfoService.selectCoalInfoList(page,coalInfoDto);
        IPage<CoalInfo> list = coalInfoService.selectCoalInfoList(page, coalInfoDto);
        return R.ok(list);
    }
    /**
     * 煤种信息 list
     */
    @GetMapping("/coalInfoList")
    public R<List<CoalInfo>> coalInfoList() {
        return R.ok(coalInfoService.coalInfoList());
    }
    /**
     * 新增修改
basic-server/src/main/java/com/ruoyi/basic/service/CoalInfoService.java
@@ -6,6 +6,8 @@
import com.ruoyi.basic.dto.CoalInfoDto;
import com.ruoyi.basic.entity.CoalInfo;
import java.util.List;
/**
 * <p>
 * 煤种信息表 服务类
@@ -21,4 +23,6 @@
    int addOrEditCoalInfo(CoalInfoDto coalInfoDto);
    int delCoalInfoByIds(Long[] ids);
    List<CoalInfo> coalInfoList();
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalInfoServiceImpl.java
@@ -16,6 +16,7 @@
import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
/**
@@ -36,7 +37,7 @@
    public IPage<CoalInfo> selectCoalInfoList(Page page, CoalInfoDto coalInfoDto) {
        LambdaQueryWrapper<CoalInfo> queryWrapper = new LambdaQueryWrapper<>();
        if (StringUtils.hasText(coalInfoDto.getSearchAll())) {
            queryWrapper.like(CoalInfo::getCoal,coalInfoDto.getSearchAll());
            queryWrapper.like(CoalInfo::getCoal, coalInfoDto.getSearchAll());
        }
        queryWrapper.orderByDesc(CoalInfo::getCreateTime);
        return coalInfoMapper.selectPage(page, queryWrapper);
@@ -70,4 +71,9 @@
        // 执行批量逻辑删除
        return coalInfoMapper.update(null, updateWrapper);
    }
    @Override
    public List<CoalInfo> coalInfoList() {
        return coalInfoMapper.selectList(null);
    }
}
main-business/src/main/java/com/ruoyi/business/dto/PurchaseRegistrationDto.java
@@ -5,4 +5,6 @@
@Data
public class PurchaseRegistrationDto extends PurchaseRegistration {
    private String searchAll;
}
main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java
@@ -33,6 +33,11 @@
    /**
     * 煤种
     */
    @TableField(value = "coal_id")
    private Long coalId;
    /**
     * 煤种
     */
    @TableField(value = "coal")
    private String coal;
    /**
main-business/src/main/java/com/ruoyi/business/entity/Production.java
@@ -38,15 +38,10 @@
    @TableField(value = "coal_id")
    private Long coalId;
    /**
     * 煤种
     */
    @TableField(value = "coal")
    private String coal;
    /**
     * 生产数量
     */
    @TableField(value = "production_quantity")
    private Integer productionQuantity;
    private BigDecimal productionQuantity;
    /**
     * 人工成本
     */
main-business/src/main/java/com/ruoyi/business/entity/ProductionMaster.java
@@ -33,10 +33,15 @@
    @TableField(value = "coal")
    private String coal;
    /**
     * 煤种id
     */
    @TableField(value = "coal_id")
    private String coalId;
    /**
     * 生产数量
     */
    @TableField(value = "production_quantity")
    private Integer productionQuantity;
    private BigDecimal productionQuantity;
    /**
     * 人工成本
     */
main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
@@ -5,26 +5,21 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.entity.CoalInfo;
import com.ruoyi.basic.mapper.CoalInfoMapper;
import com.ruoyi.business.dto.ProductionMasterDto;
import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.entity.Production;
import com.ruoyi.business.entity.ProductionInventory;
import com.ruoyi.business.entity.ProductionMaster;
import com.ruoyi.business.mapper.OfficialInventoryMapper;
import com.ruoyi.business.mapper.ProductionInventoryMapper;
import com.ruoyi.business.mapper.ProductionMapper;
import com.ruoyi.business.mapper.ProductionMasterMapper;
import com.ruoyi.business.entity.*;
import com.ruoyi.business.mapper.*;
import com.ruoyi.business.service.ProductionMasterService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -47,7 +42,9 @@
    private final OfficialInventoryMapper officialInventoryMapper;
    private final SysUserMapper sysUserMapper;
    private final CoalInfoMapper coalInfoMapper;
    private final PendingInventoryMapper pendingInventoryMapper;
    @Override
    public IPage<ProductionMasterDto> selectPMList(Page page, ProductionMasterDto productionMasterDto) {
@@ -126,8 +123,7 @@
        BigDecimal totalEnergyConsumptionCost = BigDecimal.ZERO;
        BigDecimal totalTotalCost = BigDecimal.ZERO;
        BigDecimal totalEquipmentDepreciation = BigDecimal.ZERO;
        int totalProductionQuantity = 0;
        StringBuilder coalBuilder = new StringBuilder();
        BigDecimal totalProductionQuantity = BigDecimal.ZERO;
        for (Production production : productionMasterDto.getProductionList()) {
            totalPurchasePrice = totalPurchasePrice.add(production.getPurchasePrice());
@@ -135,13 +131,14 @@
            totalEnergyConsumptionCost = totalEnergyConsumptionCost.add(production.getEnergyConsumptionCost());
            totalTotalCost = totalTotalCost.add(production.getTotalCost());
            totalEquipmentDepreciation = totalEquipmentDepreciation.add(production.getEquipmentDepreciation());
            totalProductionQuantity += production.getProductionQuantity();
            if (coalBuilder.length() > 0) {
                coalBuilder.append(","); // 在元素之间添加逗号
            }
            coalBuilder.append(production.getCoal());
            totalProductionQuantity = production.getProductionQuantity().add(totalProductionQuantity);
        }
        String coalStr = coalBuilder.toString(); // 直接获取拼接结果
        //煤种字段
        List<Long> coalIds = productionMasterDto.getProductionList().stream()
                .map(Production::getCoalId)
                .collect(Collectors.toList());
        List<CoalInfo> coalInfos = coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds));
        // 2. 创建主表对象
        ProductionMaster productionMaster = new ProductionMaster();
@@ -150,18 +147,13 @@
        productionMaster.setEquipmentDepreciation(totalEquipmentDepreciation);
        productionMaster.setEnergyConsumptionCost(totalEnergyConsumptionCost);
        productionMaster.setLaborCost(totalLaborCost);
        productionMaster.setCoal(coalStr);
        productionMaster.setCoal(coalInfos.stream().map(CoalInfo::getCoal).collect(Collectors.joining(",")));
        productionMaster.setCoalId(coalIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
        Long masterId = productionMasterDto.getId();
        productionMaster.setId(masterId);
        // 3. 统一子表处理逻辑
        Long producerId = productionMasterDto.getProducerId();
        if (producerId == null) {
            throw new BaseException("请选择生产者");
        }
        SysUser sysUser = sysUserMapper.selectUserById(producerId);
        productionMaster.setProducer(sysUser.getUserName());
        if (masterId == null) {
            productionMasterMapper.insert(productionMaster);
            masterId = productionMaster.getId(); // 获取新生成的ID
@@ -190,22 +182,54 @@
        batchInsertProductions(masterId, productionMasterDto.getProductionList());
        batchInsertInventories(masterId, productionMasterDto.getProductionInventoryList());
        //5. 插入到待入库
        for (Production production : productionMasterDto.getProductionList()) {
            PendingInventory pendingInventory = new PendingInventory();
            pendingInventory.setCoalId(production.getCoalId());
            pendingInventory.setInventoryQuantity(production.getProductionQuantity());
            pendingInventory.setSupplierName("生产加工入库");
            pendingInventory.setTotalPriceIncludingTax(production.getTotalCost());
            pendingInventory.setPriceIncludingTax(production.getPurchasePrice());
        }
        return 1;
    }
    // 批量插入生产数据
    private void batchInsertProductions(Long masterId, List<Production> productions) {
        List<Production> insertList = productions.stream()
                .peek(p -> {
                    p.setId(null);
                    p.setProductionMasterId(masterId);
                })
        if (productions.isEmpty()) {
            return;
        }
        // 1. 收集所有需要查询的coalId
        List<Long> coalIds = productions.stream()
                .map(Production::getCoalId)
                .filter(Objects::nonNull)
                .distinct()
                .collect(Collectors.toList());
        if (!insertList.isEmpty()) {
            for (Production production : productions) {
        // 2. 批量查询coalInfo数据
        Map<Long, CoalInfo> coalInfoMap = coalIds.isEmpty() ?
                Collections.emptyMap() :
                coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds))
                        .stream()
                        .collect(Collectors.toMap(CoalInfo::getId, Function.identity()));
        if (coalInfoMap.isEmpty()){
            throw new BaseException("煤种信息不存在");
        }
        // 3. 准备批量插入数据
        List<Production> batchInsertList = productions.stream()
                .map(production -> {
                    Production p = new Production(); // 创建新对象避免副作用
                    BeanUtils.copyProperties(production, p);
                    // 复制必要字段
                    p.setProductionMasterId(masterId);
                    p.setCoalId(production.getCoalId());
                    return p;
                })
                .collect(Collectors.toList());
        if (!batchInsertList.isEmpty()) {
            for (Production production : batchInsertList) {
                production.setId(null);
                production.setProductionMasterId(masterId);
                productionMapper.insert(production);
            }
        }
main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java
@@ -16,6 +16,7 @@
import com.ruoyi.business.mapper.PurchaseRegistrationMapper;
import com.ruoyi.business.service.PurchaseRegistrationService;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -49,6 +50,13 @@
    @Override
    public IPage<PurchaseRegistration> selectPurchaseRegistrationList(Page page, PurchaseRegistrationDto purchaseRegistrationDto) {
        LambdaQueryWrapper<PurchaseRegistration> queryWrapper = new LambdaQueryWrapper<>();
        if (StringUtils.isNotBlank(purchaseRegistrationDto.getSearchAll())){
            queryWrapper.and(wrapper -> wrapper
                    .like(PurchaseRegistration::getCoal, purchaseRegistrationDto.getSearchAll())
                    .or()
                    .like(PurchaseRegistration::getSupplierName, purchaseRegistrationDto.getSearchAll())
            );
        }
        queryWrapper.orderByDesc(PurchaseRegistration::getCreateTime);
        return purchaseRegistrationMapper.selectPage(page, queryWrapper);
    }