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 = "åºåºæ¶é´") 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/TicketRegistrationServiceImpl.java
@@ -222,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())); 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/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 <= #{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 <= #{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,7 +147,7 @@ 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, 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