src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -183,7 +183,7 @@ addQualityInspect(purchaseLedger, salesLedgerProduct); } else { //ç´æ¥å ¥åº stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId()); stockUtils.addStockWithBatchNo(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId(),purchaseLedger.getPurchaseContractNumber()+"-"+salesLedgerProduct.getId()); } } } else if (status.equals(3)) { @@ -211,11 +211,10 @@ } salesQuotationMapper.updateById(salesQuote); } // åºåºå®¡æ¹ä¿®æ¹ // åºåºå®¡æ¹ä¿®æ¹=åè´§å®¡æ¹ if (approveProcess.getApproveType().equals(7)) { String[] split = approveProcess.getApproveReason().split(":"); ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>() .eq(ShippingInfo::getShippingNo, split[1]) .eq(ShippingInfo::getShippingNo, approveProcess.getApproveReason()) .orderByDesc(ShippingInfo::getCreateTime) .last("limit 1")); if (shippingInfo != null) { @@ -228,6 +227,7 @@ } shippingInfoMapper.updateById(shippingInfo); } //åºåæ£å } fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVE_NODE, approveNode.getId(), approveNode.getStorageBlobDTOS()); src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.approve.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -24,8 +25,10 @@ import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.basic.utils.FileUtil; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.project.system.domain.SysUser; @@ -35,8 +38,10 @@ import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.mapper.ShippingInfoMapper; import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.pojo.ShippingInfo; import com.ruoyi.sales.service.impl.CommonFileServiceImpl; import lombok.RequiredArgsConstructor; @@ -65,6 +70,8 @@ private final CommonFileServiceImpl commonFileService; private final ISysNoticeService sysNoticeService; private final PurchaseLedgerMapper purchaseLedgerMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; private final StockUtils stockUtils; private final ShippingInfoMapper shippingInfoMapper; private final ApproveNodeMapper approveNodeMapper; private final ApproveProcessConfigNodeService approveProcessConfigNodeService; @@ -89,11 +96,6 @@ if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("å®¡æ ¸ç¨æ·ä¸åå¨"); if (sysDept == null) throw new RuntimeException("é¨é¨ä¸åå¨"); if (sysUser == null) throw new RuntimeException("ç³è¯·äººä¸åå¨"); // String today = LocalDate.now().format(DATE_FORMAT); // Long approveId = dailyRedisCounter.incrementAndGetByDb(); // String formattedCount = String.format("%03d", approveId); // //æµç¨ ID // String approveID = today + formattedCount; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); ApproveProcess approveProcess = new ApproveProcess(); String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "", "approve_id"); @@ -157,9 +159,19 @@ || !StringUtils.hasText(approveProcessVO.getApproveReason())) { throw new RuntimeException("å®¡æ ¸ç¨æ·ä¸åå¨"); } purchaseLedgerMapper.update(null, new LambdaUpdateWrapper<PurchaseLedger>() .eq(PurchaseLedger::getPurchaseContractNumber, approveProcessVO.getApproveReason()) .set(PurchaseLedger::getApprovalStatus, 3)); //éè´å ¥åº PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>() .eq(PurchaseLedger::getPurchaseContractNumber, approveProcessVO.getApproveReason()) .last("limit 1")); List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>() .lambda().eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()).eq(SalesLedgerProduct::getType, 2)); for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) { stockUtils.addStockWithBatchNo(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId(),purchaseLedger.getPurchaseContractNumber()+"-"+salesLedgerProduct.getId()); } } @Override src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -81,6 +81,23 @@ } /** * åæ ¼å ¥åºå¸¦æ¹æ¬¡å· * @param productModelId * @param quantity * @param recordType * @param recordId */ public void addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setBatchNo(batchNo); stockInventoryService.addStockInRecordOnly(stockInventoryDto); } /** * åæ ¼åºåº * * @param productModelId src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -181,15 +181,6 @@ if (productList != null && !productList.isEmpty()) { handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType()); } //æ°å¢åæææ£éª 审æ¹ä¹åæçææ£éª // if (productList != null) { // for (SalesLedgerProduct saleProduct : productList) { // //æ¯å¦æ¨éè´¨æ£ï¼å¦ætrue就添å // if (saleProduct.getIsChecked()) { // addQualityInspect(purchaseLedger, saleProduct); // } // } // } // 5. è¿ç§»ä¸´æ¶æä»¶å°æ£å¼ç®å½ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.PURCHASE_LEDGER, purchaseLedger.getId(), purchaseLedgerDto.getStorageBlobDTOS()); return 1; src/main/java/com/ruoyi/purchase/service/impl/PurchaseReturnOrdersServiceImpl.java
@@ -4,25 +4,33 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.common.enums.SaleEnum; import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.security.LoginUser; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.purchase.dto.PurchaseReturnOrderDto; import com.ruoyi.purchase.dto.PurchaseReturnOrderProductsDto; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper; import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.pojo.PurchaseReturnOrderProducts; import com.ruoyi.purchase.pojo.PurchaseReturnOrders; import com.ruoyi.purchase.service.PurchaseReturnOrdersService; import com.ruoyi.purchase.vo.PurchaseReturnDetailsVo; import com.ruoyi.purchase.vo.PurchaseReturnOrderVo; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.stock.mapper.StockOutRecordMapper; import com.ruoyi.stock.pojo.StockOutRecord; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -48,6 +56,10 @@ private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper; private final ISalesLedgerService salesLedgerService; private final AccountIncomeService accountIncomeService; private final StockUtils stockUtils; private final SalesLedgerProductMapper salesLedgerProductMapper; private final PurchaseLedgerMapper purchaseLedgerMapper; private final StockOutRecordMapper stockOutRecordMapper; @Override public IPage<PurchaseReturnOrderVo> listPage(Page page, PurchaseReturnOrderDto purchaseReturnOrderDto) { @@ -67,6 +79,10 @@ // è¿é为æ°å¢å æ¤id为null purchaseReturnOrderProductsDto.setId(null); purchaseReturnOrderProductsMapper.insert(purchaseReturnOrderProductsDto); //åºåéè¦åºåº(éè´éè´§) PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(purchaseReturnOrderDto.getPurchaseLedgerId()); SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(purchaseReturnOrderProductsDto.getSalesLedgerProductId()); stockUtils.substractStock(salesLedgerProduct.getProductModelId(), purchaseReturnOrderProductsDto.getReturnQuantity(), StockOutQualifiedRecordTypeEnum.PURCHASE_RETURN_STOCK_OUT.getCode(), purchaseReturnOrderDto.getId(), purchaseLedger.getPurchaseContractNumber()+"-"+salesLedgerProduct.getId()); } }else { throw new RuntimeException("è¯·éæ©éè´§åå"); @@ -120,7 +136,10 @@ LambdaUpdateWrapper<PurchaseReturnOrderProducts> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(PurchaseReturnOrderProducts::getPurchaseReturnOrderId, id); purchaseReturnOrderProductsMapper.delete(updateWrapper); //(éè´éè´§çæ°æ®éè¦å æ) stockOutRecordMapper.delete(Wrappers.<StockOutRecord>lambdaQuery() .eq(StockOutRecord::getRecordType,StockOutQualifiedRecordTypeEnum.PURCHASE_RETURN_STOCK_OUT.getCode()) .eq(StockOutRecord::getRecordId, id)); // è´¢å¡ LambdaUpdateWrapper<AccountIncome> updateWrapperAccountIncome = new LambdaUpdateWrapper<>(); updateWrapperAccountIncome.eq(AccountIncome::getBusinessId, id); src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -71,7 +71,6 @@ if (CollUtil.isEmpty(list)) { return AjaxResult.success(list); } // List<Long> productIds = list.stream().map(SalesLedgerProduct::getId).collect(Collectors.toList()); List<SimpleReturnOrderGroupDto> groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds); Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getSalesLedgerProductId, item -> item.getSumReturnQuantity())); @@ -83,13 +82,6 @@ if (item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTicketsAmount(BigDecimal.ZERO); } // ProcurementPageDto procurementDto = new ProcurementPageDto(); // procurementDto.setSalesLedgerProductId(item.getId()); // procurementDto.setProductCategory(item.getProductCategory()); // IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto); // BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity"); // ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0); if (item.getApproveStatus() != 2) { if (item.getHasSufficientStock() == 0) { item.setApproveStatus(0); src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -61,7 +61,7 @@ ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveType(7); approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId()); approveProcessVO.setApproveReason(req.getType() + ":" +sh); approveProcessVO.setApproveReason(sh);//åè´§ç¼å· approveProcessVO.setApproveUserIds(req.getApproveUserIds()); approveProcessVO.setApproveUser(loginUser.getUserId()); approveProcessVO.setApproveTime(LocalDate.now().toString()); @@ -122,7 +122,14 @@ } @GetMapping("/getDateil/{id}") @Operation(summary = "éè¿idæ¥è¯¢è¯¦æ ") public R getDateil(@PathVariable("id") Long id) { return R.ok(shippingInfoService.getDetail(id)); } @GetMapping("/getDateilByShippingNo") @Operation(summary = "éè¿åè´§åå·æ¥è¯¢è¯¦æ ") public R getDateilByShippingNo(String shippingNo) { return R.ok(shippingInfoService.getDateilByShippingNo(shippingNo)); } } src/main/java/com/ruoyi/sales/dto/ShippingApproveDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.sales.dto; import com.ruoyi.sales.pojo.ShippingInfo; import lombok.Data; import java.util.List; //åè´§å®¡æ¹æ¥ç详æ @Data public class ShippingApproveDto { private ShippingInfo shippingInfo; private List<ShippingProductDetailDto> shippingProductDetailDtoList; } src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/sales/mapper/ShippingProductDetailMapper.java
@@ -4,6 +4,7 @@ import com.ruoyi.sales.dto.ShippingProductDetailDto; import com.ruoyi.sales.pojo.ShippingProductDetail; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -19,4 +20,6 @@ public interface ShippingProductDetailMapper extends BaseMapper<ShippingProductDetail> { List<ShippingProductDetailDto> getDetail(Long id); List<ShippingProductDetailDto> getDateilByShippingNo(@Param("shippingNo") String shippingNo); } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -257,5 +257,6 @@ private Boolean isProduction; @TableField(exist = false) @Schema(description = "å¾ åè´§æ°é") private BigDecimal noQuantity; } src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.dto.ShippingApproveDto; import com.ruoyi.sales.dto.ShippingInfoDto; import com.ruoyi.sales.dto.ShippingProductDetailDto; import com.ruoyi.sales.pojo.ShippingInfo; @@ -28,4 +29,6 @@ boolean add(ShippingInfoDto req); List<ShippingProductDetailDto> getDetail(Long id); ShippingApproveDto getDateilByShippingNo(String shippingNo); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -101,9 +101,6 @@ @Override public List<SalesLedgerProduct> selectSalesLedgerProductList(SalesLedgerProduct salesLedgerProduct) { // LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); // queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId()) // .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct); if(!CollectionUtils.isEmpty(salesLedgerProducts)){ salesLedgerProducts.forEach(item -> { src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -61,6 +61,8 @@ public boolean add(SalesQuotationDto salesQuotationDto) { LoginUser loginUser = SecurityUtils.getLoginUser(); SalesQuotation salesQuotation = new SalesQuotation(); BeanUtils.copyProperties(salesQuotationDto, salesQuotation); salesQuotation.setId(null); Customer customer = customerMapper.selectById(Long.valueOf(salesQuotationDto.getCustomerId())); if (ObjectUtils.isNotEmpty(customer)) { salesQuotation.setCustomer(customer.getCustomerName()); src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -13,6 +13,7 @@ import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.dto.ShippingApproveDto; import com.ruoyi.sales.dto.ShippingInfoDto; import com.ruoyi.sales.dto.ShippingProductDetailDto; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; @@ -68,7 +69,6 @@ } //æ£ååºå if(!"å·²åè´§".equals(byId.getStatus())){ // SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId()); List<ShippingProductDetail> shippingProductDetails = shippingProductDetailMapper.selectList(new LambdaQueryWrapper<ShippingProductDetail>().eq(ShippingProductDetail::getShippingInfoId, req.getId())); if (CollectionUtils.isEmpty(shippingProductDetails)) { throw new RuntimeException("åè´§ä¿¡æ¯ä¸åå¨"); @@ -141,4 +141,15 @@ public List<ShippingProductDetailDto> getDetail(Long id) { return shippingProductDetailMapper.getDetail(id); } @Override public ShippingApproveDto getDateilByShippingNo(String shippingNo) { ShippingApproveDto shippingApproveDto = new ShippingApproveDto(); ShippingInfo shippingInfo = new ShippingInfo(); shippingInfo.setShippingNo(shippingNo); shippingApproveDto.setShippingInfo(shippingInfoMapper.listPage(new Page(1, -1),shippingInfo).getRecords().get(0)); List<ShippingProductDetailDto> dateilByShippingNo = shippingProductDetailMapper.getDateilByShippingNo(shippingNo); shippingApproveDto.setShippingProductDetailDtoList(dateilByShippingNo); return shippingApproveDto; } } src/main/resources/mapper/sales/ShipmentApprovalMapper.xml
ÎļþÒÑɾ³ý src/main/resources/mapper/sales/ShippingProductDetailMapper.xml
@@ -18,5 +18,14 @@ left join product p on p.id = pm.product_id where spd.shipping_info_id = #{id} </select> <select id="getDateilByShippingNo" resultType="com.ruoyi.sales.dto.ShippingProductDetailDto"> select si.batch_no, pm.model as specification_model, p.product_name, spd.quantity as delivery_quantity from shipping_product_detail spd left join shipping_info sp on sp.id = spd.shipping_info_id left join stock_inventory si on si.id = spd.stock_inventory_id left join product_model pm on pm.id = si.product_model_id left join product p on p.id = pm.product_id where sp.shipping_no = #{shippingNo} </select> </mapper>