doc/20260119-procurement_record_storage.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,2 @@ alter table procurement_record_storage add quality_inspect_id bigint null comment 'è´¨æ£id'; src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
@@ -22,5 +22,6 @@ private String typeName; private Integer purchaseLedgerId; private Long qualityInspectId; } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -192,4 +192,6 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate endDate; private Long productModelId; } src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -100,4 +100,6 @@ * 产åID */ private Long productModelId; private Long qualityInspectId; } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -781,7 +781,8 @@ .updateTime(LocalDateTime.now()) .updateUser(loginUser.getUserId()) .createBy(procurementDto.getNickName()) .productModelId(detail.getProductModelId()); .productModelId(detail.getProductModelId()) .qualityInspectId(ObjectUtils.isNotNull(procurementDto.getQualityInspectId())?procurementDto.getQualityInspectId():0L); this.save(procurementRecordBuilder.build()); // å ¥åºæååæéè´æ°é // LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -896,6 +897,42 @@ @Override public IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPageByProductProduction(page, procurementDto); List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords(); // 计ç®å¾ å ¥åºæ°é // æ¥è¯¢éè´è®°å½å·²å ¥åºæ°é List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList()); if(CollectionUtils.isEmpty( collect)){ return procurementPageDtoIPage; } LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect) .eq(ProcurementRecordOut::getType, 4); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if(CollectionUtils.isEmpty( procurementRecords)){ return procurementPageDtoIPage; } for (ProcurementPageDto dto : procurementPageDtos) { // æ ¹æ®éè´å°è´¦IDçé对åºçåºåºè®°å½ List<ProcurementRecordOut> collect1 = procurementRecords.stream() .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) .collect(Collectors.toList()); // å¦ææ²¡æç¸å ³çåºåºè®°å½ï¼è·³è¿è¯¥æ¡æ°æ® if(CollectionUtils.isEmpty(collect1)){ dto.setInboundNum0(dto.getInboundNum()); continue; } // 计ç®å·²åºåºæ°éæ»åï¼å¹¶è®¾ç½®å¾ åºåºæ°é BigDecimal totalInboundNum = collect1.stream() .map(ProcurementRecordOut::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // å¾ åºåºæ°é = æ»æ°é - å·²åºåºæ°é dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); } return procurementPageDtoIPage; } src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -50,10 +50,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.*; import java.util.stream.Collectors; /** @@ -258,48 +255,119 @@ @Override @Transactional(rollbackFor = Exception.class) public int delRegistration(Long[] ids) { // å é¤éè´å°è´¦äº§åå¼ç¥¨è®°å½å¯¹è±¡ LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); productRecordLambdaQueryWrapper.in(ProductRecord::getId, Arrays.asList(ids)); List<ProductRecord> productRecords = productRecordMapper.selectList(productRecordLambdaQueryWrapper); if(CollectionUtils.isEmpty(productRecords)){ // æ¥è¯¢è¦å é¤çäº§åæ¥ç¥¨è®°å½ LambdaQueryWrapper<ProductRecord> productWrapper = new LambdaQueryWrapper<>(); productWrapper.in(ProductRecord::getId, Arrays.asList(ids)); List<ProductRecord> productRecords = productRecordMapper.selectList(productWrapper); if (CollectionUtils.isEmpty(productRecords)) { return 0; } LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>(); ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getId, productRecords.stream().map(ProductRecord::getTicketRegistrationId).collect(Collectors.toList())); List<TicketRegistration> ticketRegistrations = ticketRegistrationMapper.selectList(ticketRegistrationLambdaQueryWrapper); // ä¿®æ¹äº§åä¿¡æ¯ for (ProductRecord productRecord : productRecords) { BigDecimal subtract = ticketRegistrations.get(0).getInvoiceAmount().subtract(productRecords.get(0).getTicketsAmount()); // å°äºçäº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)); } LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, productRecord.getSaleLedgerProjectId()) .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductLambdaQueryWrapper); if(!CollectionUtils.isEmpty(salesLedgerProducts)){ for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) { salesLedgerProduct.setFutureTickets(salesLedgerProduct.getFutureTickets().add(productRecord.getTicketsNum())); salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getFutureTicketsAmount().add(productRecord.getTicketsAmount())); salesLedgerProductMapper.updateById(salesLedgerProduct); // æ¶éå ³èID Set<Long> ticketRegistrationIds = productRecords.stream() .map(ProductRecord::getTicketRegistrationId) .collect(Collectors.toSet()); } Set<Long> salesLedgerProductIds = productRecords.stream() .map(ProductRecord::getSaleLedgerProjectId) .collect(Collectors.toSet()); // æ¥è¯¢æ¥ç¥¨ç»è®° List<TicketRegistration> ticketRegistrations = ticketRegistrationMapper.selectBatchIds(ticketRegistrationIds); // å¤çæ¥ç¥¨ç»è®°éé¢ã仿¬¾æµæ°´ for (TicketRegistration ticket : ticketRegistrations) { // 该æ¥ç¥¨ç»è®°ä¸ææäº§åè®°å½ List<ProductRecord> recordsOfTicket = productRecords.stream() .filter(r -> r.getTicketRegistrationId().equals(ticket.getId())) .collect(Collectors.toList()); // 计ç®è¦åéçéé¢ BigDecimal rollbackAmount = recordsOfTicket.stream() .map(ProductRecord::getTicketsAmount) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal remain = ticket.getInvoiceAmount().subtract(rollbackAmount); if (remain.compareTo(BigDecimal.ZERO) <= 0) { // å 餿¥ç¥¨ç»è®° ticketRegistrationMapper.deleteById(ticket.getId()); // å é¤ä»æ¬¾æµæ°´ paymentRegistrationMapper.delete( new LambdaQueryWrapper<PaymentRegistration>() .eq(PaymentRegistration::getTicketRegistrationId, ticket.getId()) ); } else { ticket.setInvoiceAmount(remain); ticketRegistrationMapper.updateById(ticket); } } // å é¤éè´å°è´¦äº§åå¼ç¥¨è®°å½ productRecordMapper.delete(productRecordLambdaQueryWrapper); // åééå®å°è´¦äº§åçæªæ¥ç¥¨ for (ProductRecord record : productRecords) { LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SalesLedgerProduct::getId, record.getSaleLedgerProjectId()) .eq(SalesLedgerProduct::getType, 2); SalesLedgerProduct product = salesLedgerProductMapper.selectOne(wrapper); if (product != null) { product.setFutureTickets( product.getFutureTickets().add(record.getTicketsNum()) ); product.setFutureTicketsAmount( product.getFutureTicketsAmount().add(record.getTicketsAmount()) ); salesLedgerProductMapper.updateById(product); } } // å é¤äº§åæ¥ç¥¨è®°å½ productRecordMapper.delete(productWrapper); // éæ°è®¡ç® currentInvoiceAmount for (Long productId : salesLedgerProductIds) { refreshCurrentInvoiceAmount(productId); } return 1; } private void refreshCurrentInvoiceAmount(Long salesLedgerProductId) { // æ¥è¯¢è¯¥äº§åææ°ä¸æ¡æ¥ç¥¨è®°å½ LambdaQueryWrapper<ProductRecord> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProductRecord::getSaleLedgerProjectId, salesLedgerProductId) .orderByDesc(ProductRecord::getCreatedAt) .last("limit 1"); ProductRecord latestRecord = productRecordMapper.selectOne(wrapper); SalesLedgerProduct product = salesLedgerProductMapper.selectById(salesLedgerProductId); if (product == null) { return; } if (latestRecord == null) { // 没æä»»ä½æ¥ç¥¨è®°å½ product.setTicketsAmount(BigDecimal.ZERO); } else { // æ°¸è¿åææ°ä¸æ¡ product.setTicketsAmount(latestRecord.getTicketsAmount()); } salesLedgerProductMapper.updateById(product); } @Override public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) { TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(ticketRegistrationDto.getId()); src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl; import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectFile; @@ -12,6 +15,7 @@ import com.ruoyi.quality.service.IQualityInspectParamService; import com.ruoyi.quality.service.IQualityInspectService; import com.ruoyi.quality.service.IQualityUnqualifiedService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -34,6 +38,8 @@ @Resource private IQualityInspectFileService qualityInspectFileService; @Autowired private ProcurementRecordService procurementRecordService; /** @@ -62,6 +68,8 @@ //å 餿£éªéä»¶ qualityInspectFileService.remove(Wrappers.<QualityInspectFile>lambdaQuery() .in(QualityInspectFile::getInspectId,ids)); //å é¤å ¥åºè®°å½ procurementRecordService.remove(Wrappers.<ProcurementRecordStorage>lambdaQuery().in(ProcurementRecordStorage::getQualityInspectId,ids)); //å 餿£éªå return AjaxResult.success(qualityInspectService.removeBatchByIds(ids)); } src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -113,7 +113,7 @@ if ("åæ ¼".equals(qualityInspect.getCheckResult())) { ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); procurementRecordOutAdd.setType(1); procurementRecordOutAdd.setTypeName("éè´å ¥åº"); procurementRecordOutAdd.setTypeName("éè´åæææ£éªåæ ¼å ¥åº"); procurementRecordOutAdd.setNickName(loginUser.getNickName()); procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId())); if (qualityInspect.getPurchaseLedgerId() == null) { @@ -131,13 +131,14 @@ details.setProductModelId(qualityInspect.getProductModelId()); detailss.add( details); procurementRecordOutAdd.setDetails(detailss); procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); procurementRecordService.add(procurementRecordOutAdd); } }else if (qualityInspect.getInspectType() == 1) { //æ¥è¯¢UnitPrice/TotalPrice ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setTypeName("çäº§å ¥åº"); procurementRecordOutAdd.setTypeName("ç产è¿ç¨æ£éªåæ ¼å ¥åº"); procurementRecordOutAdd.setNickName(loginUser.getNickName()); List<Details> details = new ArrayList<>(); Details details1 = new Details(); @@ -158,7 +159,8 @@ .updateTime(LocalDateTime.now()) .updateUser(loginUser.getUserId()) .createBy(procurementRecordOutAdd.getNickName()) .productModelId(details1.getProductModelId()); .productModelId(details1.getProductModelId()) .qualityInspectId(qualityInspect.getId()); procurementRecordService.save(procurementRecordBuilder.build()); @@ -168,7 +170,7 @@ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId()); ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setTypeName("çäº§å ¥åº"); procurementRecordOutAdd.setTypeName("ç产åºåæ£éªåæ ¼å ¥åº"); procurementRecordOutAdd.setNickName(loginUser.getNickName()); List<Details> details = new ArrayList<>(); Details details1 = new Details(); @@ -179,6 +181,7 @@ details1.setProductModelId(salesLedgerProduct.getProductModelId()); details.add(details1); procurementRecordOutAdd.setDetails(details); procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); procurementRecordService.add(procurementRecordOutAdd); } qualityInspect.setInspectState(1);//å·²æäº¤ src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -89,19 +89,21 @@ // 审æ¹éè¿ if (req.getApproveStatus() == 3) { // æ¥è¯¢éè´å ¥åºè®°å½ LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>() .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId()); ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper); if (procurementRecordStorage == null) { // ä¿è¯åé¢çä¿®æ¹å ¨é¨åæ» throw new ServiceException("éè´è®°å½ä¸åå¨ï¼å®¡æ¹åæ»"); } // // æ¥è¯¢éè´å ¥åºè®°å½ // LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>() // .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId()); // ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper); // // if (procurementRecordStorage == null) { // // ä¿è¯åé¢çä¿®æ¹å ¨é¨åæ» // throw new ServiceException("éè´è®°å½ä¸åå¨ï¼å®¡æ¹åæ»"); // } // çæåºåºè®°å½ ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd(); procurementRecordOutAdd.setId(procurementRecordStorage.getId()); // procurementRecordOutAdd.setId(procurementRecordStorage.getId()); procurementRecordOutAdd.setId(0); procurementRecordOutAdd.setProductModelId(salesLedgerProduct.getProductModelId()); procurementRecordOutAdd.setSalesLedgerProductId((long) Math.toIntExact(salesLedgerProduct.getId())); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId())); src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -98,10 +98,10 @@ if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){ invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum()); invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount()); noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum); noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount); } } noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum); noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount); ledgerProduct.setInvoiceNum(invoiceNum); ledgerProduct.setInvoiceAmount(invoiceAmount); ledgerProduct.setNoInvoiceNum(noInvoiceNum); src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -13,7 +13,6 @@ <result column="tenant_id" property="tenantId" /> <result column="product_name" property="productName" /> <result column="product_id" property="productId" /> <result column="product_code" property="productCode" /> </resultMap> <select id="listPageProductModel" resultType="com.ruoyi.basic.pojo.ProductModel"> select pm.*,p.product_name src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -361,6 +361,7 @@ <select id="listPageByProductProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto"> select t1.*, t1.inbound_num as inboundNum0, t2.model as specification_model , t2.unit, t3.product_name as product_category src/main/resources/mapper/system/SysUserMapper.xml
@@ -88,7 +88,7 @@ <if test="params.endTime != null and params.endTime != ''"><!-- ç»ææ¶é´æ£ç´¢ --> AND date_format(u.create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') </if> <if test="params.deptId != null"> <if test="deptId != null"> AND u.user_id IN ( SELECT user_id FROM sys_user_dept WHERE dept_id = #{deptId}