已添加1个文件
已修改29个文件
339 ■■■■ 文件已修改
src/main/java/com/ruoyi/common/vo/FileVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/Details.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementUpdateDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionReportDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hckx.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/device/DeviceRepairMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/CustomStorageMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/quality/QualityInspectMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/vo/FileVo.java
@@ -29,5 +29,5 @@
    @ApiModelProperty(value = "修改用户")
    private Integer updateUser;
    private Integer id;
    private Long id;
}
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -34,6 +34,7 @@
    @Autowired
    private ProcurementRecordService procurementRecordService;
    @GetMapping("/productlist")
    @Log(title = "采购入库-入库管理-新增入库查询", businessType = BusinessType.OTHER)
    public AjaxResult list(ProcurementDto procurementDto) {
src/main/java/com/ruoyi/procurementrecord/dto/Details.java
@@ -13,4 +13,7 @@
    private Integer id;  // äº§å“id
    private BigDecimal inboundQuantity;  // å…¥åº“数量
    private BigDecimal warnNum;  // é¢„警数量(采购入库才有)
    //单价
    private BigDecimal unitPrice;
    private BigDecimal totalPrice;
}
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -61,6 +62,20 @@
    @Excel(name = "入库数量")
    private BigDecimal inboundNum;
    /**
     * å…¥åº“单价
     */
    @ApiModelProperty(value = "入库单价")
    @Excel(name = "入库单价")
    private BigDecimal unitPrice;
    /**
     * å…¥åº“总价
     */
    @ApiModelProperty(value = "入库总价")
    @Excel(name = "入库总价")
    private BigDecimal totalPrice;
    @Excel(name = "预警数量")
    private BigDecimal warnNum;
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -2,6 +2,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@@ -57,6 +58,20 @@
    private BigDecimal inboundNum;
    /**
     * å…¥åº“单价
     */
    @ApiModelProperty(value = "入库单价")
    @Excel(name = "入库单价")
    private BigDecimal unitPrice;
    /**
     * å…¥åº“总价
     */
    @ApiModelProperty(value = "入库总价")
    @Excel(name = "入库总价")
    private BigDecimal totalPrice;
    /**
     * å¾…出库数量
     */
    @Excel(name = "待出库数量")
@@ -65,7 +80,7 @@
     * å‡ºåº“数量
     */
    @Excel(name = "出库数量")
    private BigDecimal totalInboundNum;
    private BigDecimal totalInboundNum = BigDecimal.ZERO;
    /**
     * æœ€ä½Žåº“存数量
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -44,6 +44,18 @@
    private BigDecimal inboundNum;
    /**
     * å•ä»·
     */
    @Excel(name = "单价")
    private BigDecimal unitPrice;
    /**
     * æ€»ä»·
     */
    @Excel(name = "总价")
    private BigDecimal totalPrice;
    /**
     * å‡ºå…¥åº“æ—¶é—´
     */
//    @Excel(name = "出库时间")
@@ -112,4 +124,8 @@
    @Excel(name = "不含税总价")
    private BigDecimal taxExclusiveTotalPrice;
    /**
     * ç‰©å“ç±»åž‹
     */
    private String itemType;
}
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementUpdateDto.java
@@ -20,4 +20,9 @@
    private List<Integer> ids;
    /**
     * å‡ºåº“类型 1-采购 2-销售 3-自定义
     */
    private Integer type;
}
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageMapper.java
@@ -1,11 +1,16 @@
package com.ruoyi.procurementrecord.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import org.apache.ibatis.annotations.Param;
/**
 * @author :yys
 * @date : 2025/11/10 13:11
 */
public interface CustomStorageMapper extends BaseMapper<CustomStorage> {
    IPage<CustomStorage> listPageCopyByCustom(Page page,@Param("req") CustomStorage customStorageLambdaQueryWrapper);
}
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -43,7 +43,7 @@
     */
    @Excel(name = "出库数量")
    @TableField(exist = false)
    private BigDecimal totalInboundNum;
    private BigDecimal totalInboundNum = BigDecimal.ZERO;
    // ç‰©å“ç±»åž‹
    @Excel(name = "物品类型")
    private String itemType;
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -1,6 +1,8 @@
package com.ruoyi.procurementrecord.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
@@ -47,6 +49,7 @@
     */
    private BigDecimal inboundNum;
    /**
     * å‡ºåº“类型 1-采购 2-销售 3-自定义
     */
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -37,6 +37,16 @@
    private BigDecimal inboundNum;
    /**
     * å•ä»·
     */
    private BigDecimal unitPrice;
    /**
     * æ€»ä»·
     */
    private BigDecimal totalPrice;
    /**
     * é¢„警数量
     */
    private BigDecimal warnNum;
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -119,7 +119,8 @@
        procurementRecordMapper.deleteBatchIds(procurementRecordStorageById.stream().map(ProcurementRecordStorage::getId).collect(Collectors.toList()));
        // åˆ é™¤æ‰€æœ‰å¯¹åº”的出库记录
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordOutLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, procurementDto.getIds());
        procurementRecordOutLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, procurementDto.getIds())
                .eq(ProcurementRecordOut::getType,procurementDto.getType());
        List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(procurementRecordOutLambdaQueryWrapper);
        if(!CollectionUtils.isEmpty(procurementRecordOuts)){
            procurementRecordOutMapper.deleteBatchIds(procurementRecordOuts.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
@@ -537,6 +538,7 @@
            // å¦‚果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                dto.setTotalInboundNum(BigDecimal.ZERO);
                continue;
            }
@@ -548,28 +550,33 @@
            dto.setTotalInboundNum(totalInboundNum);
            // å¾…出库数量 = æ€»æ•°é‡ - å·²å‡ºåº“数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
            // åº“存价值
            if(dto.getUnitPrice() != null){
                dto.setTotalPrice(dto.getTotalInboundNum().multiply(dto.getUnitPrice()));
            }
        }
        return procurementPageDtoCopyIPage;
    }
    @Override
    public IPage<CustomStorage> listPageCopyByCustom(Page page, CustomStorage customStorage) {
        LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        customStorageLambdaQueryWrapper.groupBy(CustomStorage::getProductCategory, CustomStorage::getSpecificationModel);
        if(customStorage != null){
            if(!StringUtils.isEmpty(customStorage.getSupplierName())){
                customStorageLambdaQueryWrapper.like(CustomStorage::getSupplierName, customStorage.getSupplierName());
            }
            // ç­›é€‰å…¥åº“æ—¶é—´
            if(customStorage.getInboundDate() != null){
                customStorageLambdaQueryWrapper.eq(CustomStorage::getInboundDate, customStorage.getInboundDate());
            }
            if(!StringUtils.isEmpty(customStorage.getProductCategory())){
                customStorageLambdaQueryWrapper.like(CustomStorage::getProductCategory, customStorage.getProductCategory());
            }
        }
        customStorageLambdaQueryWrapper.orderByDesc(CustomStorage::getInboundDate);
        IPage<CustomStorage> pageList = customStorageMapper.selectPage(page, customStorageLambdaQueryWrapper);
//        LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        customStorageLambdaQueryWrapper.groupBy(CustomStorage::getProductCategory, CustomStorage::getSpecificationModel,CustomStorage::getTaxInclusiveUnitPrice);
//        if(customStorage != null){
//            if(!StringUtils.isEmpty(customStorage.getSupplierName())){
//                customStorageLambdaQueryWrapper.like(CustomStorage::getSupplierName, customStorage.getSupplierName());
//            }
//            // ç­›é€‰å…¥åº“æ—¶é—´
//            if(customStorage.getInboundDate() != null){
//                customStorageLambdaQueryWrapper.eq(CustomStorage::getInboundDate, customStorage.getInboundDate());
//            }
//            if(!StringUtils.isEmpty(customStorage.getProductCategory())){
//                customStorageLambdaQueryWrapper.like(CustomStorage::getProductCategory, customStorage.getProductCategory());
//            }
//        }
//        customStorageLambdaQueryWrapper.orderByDesc(CustomStorage::getInboundDate);
        IPage<CustomStorage> pageList = customStorageMapper.listPageCopyByCustom(page, customStorage);
        List<CustomStorage> procurementPageDtoCopyList = pageList.getRecords();
        // è®¡ç®—待入库数量
        // æŸ¥è¯¢é‡‡è´­è®°å½•已入库数量
@@ -593,6 +600,7 @@
            // å¦‚果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                dto.setTotalInboundNum(BigDecimal.ZERO);
                continue;
            }
@@ -604,6 +612,10 @@
            dto.setTotalInboundNum(totalInboundNum);
            // å¾…出库数量 = æ€»æ•°é‡ - å·²å‡ºåº“数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
            // åº“存价值
            if(dto.getTaxInclusiveUnitPrice() != null){
                dto.setTaxInclusiveTotalPrice(dto.getInboundNum0().multiply(dto.getTaxInclusiveUnitPrice()));
            }
        }
        pageList.setRecords(procurementPageDtoCopyList);
        return pageList;
@@ -636,6 +648,8 @@
                    .inboundNum(detail.getInboundQuantity())
                    .type(procurementDto.getType())
                    .warnNum(detail.getWarnNum())
                    .unitPrice(detail.getUnitPrice())
                    .totalPrice(detail.getInboundQuantity().multiply(detail.getUnitPrice()))
                    .createTime(LocalDateTime.now())
                    .createUser(loginUser.getUserId())
                    .updateTime(LocalDateTime.now())
@@ -715,12 +729,13 @@
        for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
            // æ ¹æ®é‡‡è´­å°è´¦ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()) && ProcurementRecordOut.getType().equals(1))
                    .collect(Collectors.toList());
            // å¦‚果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                dto.setTotalInboundNum(BigDecimal.ZERO);
                continue;
            }
@@ -732,6 +747,10 @@
            dto.setTotalInboundNum(totalInboundNum);
            // å¾…出库数量 = æ€»æ•°é‡ - å·²å‡ºåº“数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
            // åº“存价值
            if(dto.getUnitPrice() != null){
                dto.setTotalPrice(dto.getInboundNum0().multiply(dto.getUnitPrice()));
            }
        }
        return procurementPageDtoCopyIPage;
    }
src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
@@ -43,6 +43,11 @@
     * ç”Ÿäº§ç‚’机
     */
    private String speculativeTradingName;
    /**
     * äº§çº¿
     */
    @ApiModelProperty(value = "产线")
    private String productionLine;
    /**
     * è§„格型号
src/main/java/com/ruoyi/production/dto/ProductionReportDto.java
@@ -38,4 +38,16 @@
    @ApiModelProperty(value = "生产日期")
    private String schedulingDate;
    /**
     * å…¥åº“单价
     */
    @ApiModelProperty(value = "入库单价")
    private BigDecimal unitPrice;
    /**
     * å…¥åº“总价
     */
    @ApiModelProperty(value = "入库总价")
    private BigDecimal totalPrice;
}
src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
@@ -35,6 +35,10 @@
    @Excel(name = "生产炒机")
    private String speculativeTradingName;
    @ApiModelProperty(value = "产线")
    @Excel(name = "产线")
    private String productionLine;
    @ApiModelProperty(value = "开始时间")
    private String entryDateStart;
src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
@@ -44,6 +44,11 @@
    private String speculativeTradingName;
    /**
     * äº§çº¿
     */
    private String productionLine;
    /**
     * æ´¾å·¥äººåç§°
     */
    private String schedulingUserName;
src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -190,10 +190,26 @@
                i++;
                continue;
            }
            String productionLine = "";
            switch (name.get()){
                    case "炒机1":
                    productionLine = "产线1";
                    break;
                    case "炒机2":
                    productionLine = "产线2";
                    break;
                    case "炒机3":
                    productionLine = "产线3";
                    break;
                    case "炒机4":
                    productionLine = "产线4";
                    break;
            }
            SalesLedgerScheduling salesLedgerScheduling = SalesLedgerScheduling.builder()
                    .salesLedgerId(productionDispatchAddDto.getSalesLedgerId())
                    .salesLedgerProductId(productionDispatchAddDto.getSalesLedgerProductId())
                    .speculativeTradingName(name.get())
                    .productionLine(productionLine)
                    .schedulingUserId(sysUser.getUserId())
                    .schedulingUserName(sysUser.getNickName())
                    .schedulingNum(productionDispatchAddDto.getSchedulingNum())
src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
@@ -129,6 +129,8 @@
        Details details1 = new Details();
        details1.setInboundQuantity(productionReportDto.getFinishedNum());
        details1.setId(Integer.parseInt(salesLedgerWork.getSalesLedgerProductId().toString()));
        details1.setUnitPrice(productionReportDto.getUnitPrice());
        details1.setTotalPrice(productionReportDto.getTotalPrice());
        details.add(details1);
        procurementRecordOutAdd.setDetails(details);
        procurementRecordService.add(procurementRecordOutAdd);
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -27,9 +27,11 @@
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
import com.ruoyi.purchase.mapper.ProductRecordMapper;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
import com.ruoyi.purchase.pojo.PaymentRegistration;
import com.ruoyi.purchase.pojo.ProductRecord;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.pojo.TicketRegistration;
@@ -93,6 +95,8 @@
    private final TicketRegistrationMapper ticketRegistrationMapper;
    private final ProductRecordMapper productRecordMapper;
    private final PaymentRegistrationMapper paymentRegistrationMapper;
    private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
@@ -353,12 +357,16 @@
        salesLedgerProductMapper.delete(queryWrapper);
        // æ‰¹é‡åˆ é™¤å…³è”的采购台账的来票登记
        LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
        ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getSalesLedgerId,ids);
        ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId,ids);
        ticketRegistrationMapper.delete(ticketRegistrationLambdaQueryWrapper);
        // æ‰¹é‡åˆ é™¤å…³è”的采购台账的来票登记记录
        LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId,ids);
        productRecordMapper.delete(productRecordLambdaQueryWrapper);
        // æ‰¹é‡åˆ é™¤ä»˜æ¬¾ç™»è®°
        LambdaQueryWrapper<PaymentRegistration> paymentRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
        paymentRegistrationLambdaQueryWrapper.in(PaymentRegistration::getPurchaseLedgerId,ids);
        paymentRegistrationMapper.delete(paymentRegistrationLambdaQueryWrapper);
        // æ‰¹é‡åˆ é™¤é‡‡è´­å°è´¦
        return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
    }
src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -21,6 +21,7 @@
import com.ruoyi.purchase.mapper.ProductRecordMapper;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
import com.ruoyi.purchase.pojo.PaymentRegistration;
import com.ruoyi.purchase.pojo.ProductRecord;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.pojo.TicketRegistration;
@@ -221,13 +222,7 @@
            Path formalFilePath = formalDirPath.resolve(formalFilename);
            try {
                // æ‰§è¡Œæ–‡ä»¶è¿ç§»ï¼ˆä½¿ç”¨åŽŸå­æ“ä½œç¡®ä¿å®‰å…¨æ€§ï¼‰
//                Files.move(
//                        Paths.get(tempFile.getTempPath()),
//                        formalFilePath,
//                        StandardCopyOption.REPLACE_EXISTING,
//                        StandardCopyOption.ATOMIC_MOVE
//                );
                // åŽŸå­ç§»åŠ¨å¤±è´¥ï¼Œä½¿ç”¨å¤åˆ¶+删除
                Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
                Files.deleteIfExists(Paths.get(tempFile.getTempPath()));
@@ -271,6 +266,8 @@
            // å°äºŽç­‰äºŽ0删除 ï¼Œå¤§äºŽ0修改
            if(subtract.compareTo(BigDecimal.ZERO) <= 0){
                ticketRegistrationMapper.deleteById(ticketRegistrations.get(0));
                // åˆ é™¤ä»˜æ¬¾æµæ°´è®°å½•
                paymentRegistrationMapper.delete(new LambdaQueryWrapper<PaymentRegistration>().eq(PaymentRegistration::getTicketRegistrationId, ticketRegistrations.get(0).getId()));
            }else if(subtract.compareTo(BigDecimal.ZERO) > 0){
                ticketRegistrations.get(0).setInvoiceAmount(subtract);
                ticketRegistrationMapper.updateById(ticketRegistrations.get(0));
src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
@@ -1,12 +1,16 @@
package com.ruoyi.sales.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.sales.dto.InvoiceLedgerDto;
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
import com.ruoyi.sales.mapper.InvoiceLedgerFileMapper;
import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.service.InvoiceLedgerService;
import io.jsonwebtoken.lang.Collections;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -25,6 +29,9 @@
    @Autowired
    private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
    @Autowired
    private InvoiceLedgerFileMapper invoiceLedgerFileMapper;
    /**
     * å¼€ç¥¨å°è´¦æ–°å¢ž
@@ -70,6 +77,19 @@
    }
    /**
     * å¼€ç¥¨å°è´¦æ–‡ä»¶åˆ é™¤
     */
    @DeleteMapping("/delFile")
    @Log(title = "开票台账", businessType = BusinessType.DELETE)
    public AjaxResult invoiceLedgerDelFile(@RequestBody List<Integer> ids) {
        if(Collections.isEmpty(ids)) return AjaxResult.error("请选择要删除的文件");
        invoiceLedgerFileMapper.deleteBatchIds(ids);
        return AjaxResult.success();
    }
    /**
     * å¼€ç¥¨å°è´¦æ–‡ä»¶ä¸Šä¼ 
     * @param file
     * @return
src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java
@@ -10,6 +10,9 @@
@Data
public class InvoiceLedgerFile {
    @ApiModelProperty(value = "文件ID")
    private Long id;
    @ApiModelProperty(value = "文件名称")
    private String name;
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -19,8 +19,12 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
import com.ruoyi.production.mapper.SalesLedgerSchedulingMapper;
import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
import com.ruoyi.production.pojo.SalesLedgerScheduling;
import com.ruoyi.production.pojo.SalesLedgerWork;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.sales.dto.MonthlyAmountDto;
@@ -82,6 +86,14 @@
    private final InvoiceLedgerMapper invoiceLedgerMapper;
    private final SalesLedgerSchedulingMapper salesLedgerSchedulingMapper;
    private final SalesLedgerWorkMapper salesLedgerWorkMapper;
    private final SalesLedgerProductionAccountingMapper  salesLedgerProductionAccountingMapper;
    private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
    private final InvoiceRegistrationMapper invoiceRegistrationMapper;
    @Autowired
    private SysDeptMapper sysDeptMapper;
@@ -348,20 +360,50 @@
        if (CollectionUtils.isEmpty(idList)) {
            return 0;
        }
        // ç”Ÿäº§è®¢å•有待排产数据,台账不可删除
        LambdaQueryWrapper<SalesLedgerScheduling> salesLedgerSchedulingLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerScheduling>()
                .in(SalesLedgerScheduling::getSalesLedgerId, idList);
        if (salesLedgerSchedulingMapper.selectCount(salesLedgerSchedulingLambdaQueryWrapper) > 0) {
            throw new BaseException("有排产数据,不可删除");
        }
        // åˆ é™¤é”€å”®ç®¡ç†æ•°æ®
        // 1. å…ˆåˆ é™¤å­è¡¨æ•°æ®
        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
        productWrapper.in(SalesLedgerProduct::getSalesLedgerId, idList);
        salesLedgerProductMapper.delete(productWrapper);
        LambdaQueryWrapper<InvoiceRegistrationProduct> wrapper = new LambdaQueryWrapper<>();
        wrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList);
        List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(wrapper);
        List<Integer> invoiceLedgerIds = new ArrayList<>();
        if(CollectionUtils.isNotEmpty(invoiceRegistrationProducts)){
            LambdaQueryWrapper<InvoiceLedger> wrapperOne = new LambdaQueryWrapper<>();
            wrapperOne.in(InvoiceLedger::getInvoiceRegistrationProductId, invoiceRegistrationProducts.stream().map(InvoiceRegistrationProduct::getId).collect(Collectors.toList()));
            List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(wrapperOne);
            if(CollectionUtils.isNotEmpty(invoiceLedgers)){
                invoiceLedgerIds = invoiceLedgers.stream().map(InvoiceLedger::getId).collect(Collectors.toList());
            }
            invoiceLedgerMapper.delete(wrapperOne);
        }
        invoiceRegistrationProductMapper.delete(wrapper);
        LambdaQueryWrapper<InvoiceRegistration> wrapperTwo = new LambdaQueryWrapper<>();
        wrapperTwo.in(InvoiceRegistration::getSalesLedgerId, idList);
        invoiceRegistrationMapper.delete(wrapperTwo);
        if(CollectionUtils.isNotEmpty(invoiceLedgerIds)){
            LambdaQueryWrapper<ReceiptPayment> wrapperTree = new LambdaQueryWrapper<>();
            wrapperTree.in(ReceiptPayment::getInvoiceLedgerId, invoiceLedgerIds);
            receiptPaymentMapper.delete(wrapperTree);
        }
        // åˆ é™¤ç”Ÿäº§ç®¡æŽ§æ•°æ®
        // åˆ é™¤ç”Ÿäº§è®¢å•数据
        LambdaQueryWrapper<SalesLedgerScheduling> in = new LambdaQueryWrapper<SalesLedgerScheduling>()
                .in(SalesLedgerScheduling::getSalesLedgerId, idList);
        salesLedgerSchedulingMapper.delete(in);
        // åˆ é™¤ç”Ÿäº§æ´¾å·¥æ•°æ®
        LambdaQueryWrapper<SalesLedgerWork> workOrderWrapper = new LambdaQueryWrapper<>();
        workOrderWrapper.in(SalesLedgerWork::getSalesLedgerId, idList);
        salesLedgerWorkMapper.delete(workOrderWrapper);
        // åˆ é™¤ç”Ÿäº§æŠ¥å·¥æ•°æ®
        LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
        reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, idList);
        salesLedgerProductionAccountingMapper.delete(reportWrapper);
        // 2. å†åˆ é™¤ä¸»è¡¨æ•°æ®
        return salesLedgerMapper.deleteBatchIds(idList);
    }
src/main/resources/application-hckx.yml
@@ -45,7 +45,7 @@
  accessKey: admin
  secretKey: 12345678
  preview-expiry: 24 # é¢„览地址默认24小时
  default-bucket: uploadPath
  default-bucket: jxc
# ç”¨æˆ·é…ç½®
user:
  password:
src/main/resources/mapper/device/DeviceRepairMapper.xml
@@ -33,7 +33,7 @@
                and dl.device_model like concat('%',#{deviceRepairDto.deviceModel},'%')
            </if>
            <if test="deviceRepairDto.status != null">
                and dl.status = #{deviceRepairDto.status}
                and dr.status = #{deviceRepairDto.status}
            </if>
            <if test="deviceRepairDto.remark != null">
                and dr.remark like concat('%',#{deviceRepairDto.remark},'%')
src/main/resources/mapper/procurementrecord/CustomStorageMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.procurementrecord.mapper.CustomStorageMapper">
    <select id="listPageCopyByCustom" resultType="com.ruoyi.procurementrecord.pojo.CustomStorage">
        select *,
               sum(inbound_num) as inboundNum,
               sum(inbound_num) as inboundNum0,
               sum(tax_inclusive_total_price) as taxInclusiveTotalPrice
               from custom_storage
        <where>
            <if test="req.productCategory != null and req.productCategory != ''">
                and product_category like  concat('%',#{req.productCategory},'%')
            </if>
            <if test="req.supplierName !=null and req.supplierName != ''">
                and supplier_name like concat('%',#{req.supplierName},'%')
            </if>
            <if test="req.inboundDate !=null">
                and inbound_date like concat('%',#{req.inboundDate},'%')
            </if>
        </where>
        group by product_category, specification_model, tax_inclusive_unit_price
        order by inbound_date desc
    </select>
</mapper>
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -42,6 +42,8 @@
        t2.tax_inclusive_unit_price,
        (t1.inbound_num * t2.tax_inclusive_unit_price) as taxInclusiveTotalPrice,
        (t1.inbound_num * t2.tax_inclusive_unit_price - t1.inbound_num * t2.tax_inclusive_unit_price * t2.tax_rate / 100) as taxExclusiveTotalPrice,
        t1.unit_price,
        t1.total_price,
        t1.inbound_batches,
        t1.inbound_num,
        t1.inbound_num as inboundNum0,
@@ -131,9 +133,10 @@
        t2.tax_inclusive_total_price,
        t2.tax_exclusive_total_price,
        t1.inbound_batches,
        t1.unit_price as unitPrice,
        sum(t1.total_price) as totalPrice,
        sum(t1.inbound_num) as inboundNum,
        sum(t1.inbound_num) as inboundNum0,
        t1.inbound_num as totalInboundNum,
        t1.create_time,
        t1.update_time,
        t1.create_by,
@@ -168,7 +171,7 @@
                and t1.create_time &lt;= #{req.endDate}
            </if>
        </where>
        group by t3.supplier_name,t2.product_category,t2.specification_model
        group by t2.product_category,t2.specification_model,t1.unit_price
        order by t1.create_time desc
    </select>
    <select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
@@ -243,6 +246,8 @@
        t2.tax_inclusive_unit_price,
        (t1.inbound_num * t2.tax_inclusive_unit_price) as taxInclusiveTotalPrice,
        (t1.inbound_num * t2.tax_inclusive_unit_price - t1.inbound_num * t2.tax_inclusive_unit_price * t2.tax_rate / 100) as taxExclusiveTotalPrice,
        t1.unit_price,
        t1.total_price,
        t1.inbound_batches,
        t1.inbound_num,
        t1.inbound_num as inboundNum0,
@@ -284,9 +289,10 @@
        t2.tax_inclusive_total_price,
        t2.tax_exclusive_total_price,
        t1.inbound_batches,
        sum(t1.total_price) as totalPrice,
        t1.unit_price,
        sum(t1.inbound_num) as inboundNum,
        sum(t1.inbound_num) as inboundNum0,
        t1.inbound_num as totalInboundNum,
        t1.create_time,
        t1.update_time,
        t1.create_by,
@@ -321,7 +327,7 @@
                and t1.create_time &lt;= #{req.endDate}
            </if>
        </where>
        group by t2.product_category,t2.specification_model
        group by t2.product_category,t2.specification_model,t1.unit_price
        order by t1.create_time desc
    </select>
</mapper>
src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -17,10 +17,13 @@
        t1.inbound_num,
        t1.create_time,
        t1.create_by,
        t2.warn_num
        t2.warn_num,
        t4.unit_price,
        t4.unit_price *  t1.inbound_num as totalPrice
        from  procurement_record_out t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
        <where>
            and t1.type = 1
            <if test="req.supplierName != null and req.supplierName != ''">
@@ -113,10 +116,13 @@
        t2.tax_exclusive_total_price,
        t1.inbound_num,
        t1.create_time,
        t1.create_by
        t1.create_by,
        t4.unit_price,
        t4.unit_price *  t1.inbound_num as totalPrice
        from  procurement_record_out t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
        left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
        <where>
            and t1.type = 2
            <if test="req.customerName != null and req.customerName != ''">
@@ -141,11 +147,12 @@
        t2.unit,
        t2.tax_rate,
        t2.tax_inclusive_unit_price,
        t2.tax_inclusive_total_price,
        t2.tax_inclusive_unit_price * t1.inbound_num as totalPrice,
        t2.tax_exclusive_total_price,
        t1.inbound_num,
        t1.create_time,
        t1.create_by
        t1.create_by,
        t2.item_type
        from  procurement_record_out t1
        left join custom_storage t2 on t2.id = t1.procurement_record_storage_id
        <where>
src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
@@ -86,7 +86,8 @@
        T1.customer_name,
        t3.product_category,
        t3.specification_model,
        t3.unit
        t3.unit,
        T2.production_line
        FROM
        sales_ledger_scheduling T2
        LEFT JOIN sales_ledger T1 ON T1.id = T2.sales_ledger_id
src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -25,6 +25,7 @@
        <if test="qualityInspect.entryDateEnd != null and qualityInspect.entryDateEnd != '' ">
            AND  check_time &lt;= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
        </if>
        ORDER BY check_time DESC
    </select>
    <select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect">
        SELECT