doc/ºÓÄϺױÚÌìãå¸Ö»¯²£Á§³§.sql
@@ -109,3 +109,17 @@ `user_id` int NULL DEFAULT NULL COMMENT 'ç¨æ·id', PRIMARY KEY (`id`) ); ALTER TABLE `product-inventory-management-hbtmblc`.`stock_in_record` ADD COLUMN `sales_ledger_id` bigint NULL COMMENT 'éå®å°è´¦ID' AFTER `weighing_date`, ADD COLUMN `sales_ledger_product_id` bigint NULL COMMENT 'éå®å°è´¦äº§åID' AFTER `sales_ledger_id`; ALTER TABLE `product-inventory-management-hbtmblc`.`sales_ledger_product` ADD COLUMN `product_stock_status` int NULL COMMENT '产åå ¥åºç¶æ' AFTER `floor_code`; ALTER TABLE `product-inventory-management-hbtmblc`.`stock_out_record` MODIFY COLUMN `outbound_batches` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'åºåºæ¹æ¬¡' AFTER `id`, MODIFY COLUMN `stock_out_num` decimal(16, 4) NULL DEFAULT NULL COMMENT 'åºåºæ°é' AFTER `outbound_batches`, MODIFY COLUMN `record_id` int NULL DEFAULT NULL COMMENT 'åºåºæ¥æºid' AFTER `stock_out_num`, ADD COLUMN `sales_ledger_id` bigint NULL COMMENT 'éå®è®¢åID' AFTER `type`, ADD COLUMN `sales_ledger_product_id` bigint NULL COMMENT 'éå®è®¢å产åID' AFTER `sales_ledger_id`; src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
@@ -12,7 +12,7 @@ QUALITYINSPECT_STOCK_IN("6", "è´¨æ£-åæ ¼å ¥åº"), DEFECTIVE_PASS("11", "ä¸åæ ¼-è®©æ¥æ¾è¡"), RETURN_HE_IN("14", "éå®éè´§-åæ ¼å ¥åº"), SALE_STOCK_IN("15", "éå®-åæ ¼å ¥åº"); SALE_STOCK_IN("15", "éå®è®¢å-åæ ¼å ¥åº"); private final String code; src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -35,6 +35,7 @@ /** * ä¸åæ ¼å ¥åº * * @param productModelId * @param quantity * @param recordType @@ -51,6 +52,7 @@ /** * ä¸åæ ¼åºåº * * @param productModelId * @param quantity * @param recordType @@ -67,22 +69,39 @@ /** * åæ ¼å ¥åº * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void addStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) { addStock(null, null, productModelId, quantity, recordType, recordId); } /** * åæ ¼å ¥åº * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void addStock(Long salesLedgerId, Long salesLedgerProductId, Long productModelId, BigDecimal quantity, String recordType, Long recordId) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setSalesLedgerId(salesLedgerId); stockInventoryDto.setSalesLedgerProductId(salesLedgerProductId); stockInventoryService.addstockInventory(stockInventoryDto); } /** * åæ ¼åºåº * * @param productModelId * @param quantity * @param recordType @@ -97,6 +116,25 @@ stockInventoryService.subtractStockInventory(stockInventoryDto); } /** * åæ ¼åºåº * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void substractStock(Long salesId, Long salseProductId, Long productModelId, BigDecimal quantity, String recordType, Long recordId) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setSalesLedgerId(salesId); stockInventoryDto.setSalesLedgerProductId(salseProductId); stockInventoryService.subtractStockInventory(stockInventoryDto); } //ä¸åæ ¼åºåå é¤ public void deleteStockInRecord(Long recordId, String recordType) { StockInRecord one = stockInRecordService.getOne(new QueryWrapper<StockInRecord>() @@ -106,6 +144,7 @@ stockInRecordService.batchDelete(Collections.singletonList(one.getId())); } } public void deleteStockOutRecord(Long recordId, String recordType) { StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper<StockOutRecord>() .lambda().eq(StockOutRecord::getRecordId, recordId) src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -397,8 +397,8 @@ @PostMapping("/salesStock") @ApiOperation("éå®å°è´¦äº§åå ¥åº") public AjaxResult salesStock(@RequestBody SalesLedger salesLedger) { salesLedgerService.salesStock(salesLedger); public AjaxResult salesStock(@RequestBody SalesProductStockDto dto) { salesLedgerService.salesStock(dto); return AjaxResult.success(); } src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -87,12 +87,11 @@ //åºåº stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); stockUtils.addStock(salesLedgerProduct.getSalesLedgerId(), salesLedgerProduct.getId(), salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); } return AjaxResult.success(); } /** src/main/java/com/ruoyi/sales/dto/SalesProductStockDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.ruoyi.sales.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * <br> * éå®è®¢å产åå ¥åºDto * </br> * * @author deslrey * @version 1.0 * @since 2026/4/17 13:53 */ @Data @ApiModel(value = "SalesProductStockDto", description = "éå®è®¢å产åå ¥åºDto") public class SalesProductStockDto { @ApiModelProperty("éå®è®¢åId") private Long salesLedgerId; @ApiModelProperty("éå®è®¢å产åId") private List<Long> salesLedgerProducts; } src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -149,9 +149,9 @@ private Integer deliveryStatus; /** * å ¥åºç¶æï¼0-æªå ¥åºï¼1-å·²å ¥åº * å ¥åºç¶æï¼0-æªå ¥åºï¼1-é¨åå ¥åºï¼2-å·²å ¥åº */ @ApiModelProperty("å ¥åºç¶æï¼0-æªå ¥åºï¼1-å·²å ¥åº") @ApiModelProperty("å ¥åºç¶æï¼0-æªå ¥åºï¼1-é¨åå ¥åºï¼2-å·²å ¥åº") private Integer stockStatus; @TableField(exist = false) src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -292,6 +292,12 @@ @ApiModelProperty("楼å±ç¼å·") private String floorCode; /** * 产åå ¥åºç¶æ 0-æªå ¥åºï¼1-å·²å ¥åº */ @ApiModelProperty("产åå ¥åºç¶æ") private Integer productStockStatus; @TableField(exist = false) @ApiModelProperty("éå®äº§åé¢å¤å å·¥") private List<SalesLedgerProductProcess> salesProductProcessList; src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -67,5 +67,5 @@ List<SalesLabelDto> salesLabel(Long salesLedgerId); void salesStock(SalesLedger salesLedger); void salesStock(SalesProductStockDto dto); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -49,7 +49,13 @@ import com.ruoyi.sales.service.ISalesLedgerProductProcessService; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.mapper.StockInRecordMapper; import com.ruoyi.stock.mapper.StockOutRecordMapper; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.pojo.StockOutRecord; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.stock.service.StockInventoryService; import com.ruoyi.stock.service.StockOutRecordService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; @@ -130,6 +136,10 @@ private final ISalesLedgerProcessRouteService salesLedgerProcessRouteService; private final StockInventoryService stockInventoryService; private final StockInRecordMapper stockInRecordMapper; private final StockOutRecordMapper stockOutRecordMapper; private final StockInRecordService stockInRecordService; private final StockOutRecordService stockOutRecordService; @Autowired private SysDeptMapper sysDeptMapper; @@ -703,6 +713,25 @@ if (CollectionUtils.isNotEmpty(shippingInfos)) { shippingInfoServiceImpl.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList())); } // å é¤å ³èçå ¥åº/åºåºè®°å½ï¼èµ°æå¡å±å é¤ï¼è§¦ååºåæ°éåéï¼ List<Long> stockInRecordIds = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>() .in(StockInRecord::getSalesLedgerId, idList) .select(StockInRecord::getId)) .stream() .map(StockInRecord::getId) .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(stockInRecordIds)) { stockInRecordService.batchDelete(stockInRecordIds); } List<Long> stockOutRecordIds = stockOutRecordMapper.selectList(new LambdaQueryWrapper<StockOutRecord>() .in(StockOutRecord::getSalesLedgerId, idList) .select(StockOutRecord::getId)) .stream() .map(StockOutRecord::getId) .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(stockOutRecordIds)) { stockOutRecordService.batchDelete(stockOutRecordIds); } // å é¤é件表 commonFileService.deleteByBusinessIds(idList, FileNameType.SALE.getValue()); @@ -860,6 +889,7 @@ if (!updateList.isEmpty()) { for (SalesLedgerProduct product : updateList) { product.setType(type.getCode()); product.setProductStockStatus(0); salesLedgerProductMapper.updateById(product); // æ¸ ç©ºéå®äº§åç»å®çå å·¥ salesLedgerProductProcessBindService.updateProductProcessBind(product.getSalesProductProcessList(), product.getId()); @@ -872,6 +902,7 @@ salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity()); salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice()); salesLedgerProduct.setProductStockStatus(0); salesLedgerProductMapper.insert(salesLedgerProduct); // ç»å®äº§åé¢å¤å å·¥ // æ¸ ç©ºéå®äº§åç»å®çå å·¥ @@ -1509,23 +1540,27 @@ @Override @Transactional(rollbackFor = Exception.class) public void salesStock(SalesLedger salesLedger) { if (salesLedger == null || salesLedger.getId() == null) { public void salesStock(SalesProductStockDto dto) { if (dto == null || dto.getSalesLedgerId() == null) { throw new NullPointerException("å ¥åºå¤±è´¥,è¯·éæ©éè¦å ¥åºçéå®è®¢å"); } // æ¥è¯¢éå®è®¢åæ¯å¦åå¨ SalesLedger ledger = baseMapper.selectById(salesLedger.getId()); SalesLedger ledger = baseMapper.selectById(dto.getSalesLedgerId()); if (ledger == null) { throw new ServiceException("å ¥åºå¤±è´¥,éå®è®¢åä¸åå¨"); } if (ledger.getStockStatus() == null) { throw new ServiceException("å ¥åºå¤±è´¥,éå®è®¢åå ¥åºç¶æå¼å¸¸"); } if (ledger.getStockStatus() == 1) { if (ledger.getStockStatus() == 2) { throw new ServiceException("å ¥åºå¤±è´¥,该éå®è®¢åå·²å ¥åº,请å¿éå¤å ¥åº"); } List<Long> products = dto.getSalesLedgerProducts(); if (products == null || products.isEmpty()) { throw new ServiceException("å ¥åºå¤±è´¥,å ¥åºäº§åä¸è½ä¸ºç©º"); } // æ¥è¯¢éå®è®¢åç产å List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId())); List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().in(SalesLedgerProduct::getId, products)); if (salesLedgerProducts == null || salesLedgerProducts.isEmpty()) { throw new ServiceException("å ¥åºå¤±è´¥,æªæ¥è¯¢å°è¯¥éå®è®¢åçéå®äº§å"); } @@ -1533,15 +1568,20 @@ if (product.getProductModelId() == null) { continue; } StockInventoryDto dto = new StockInventoryDto(); dto.setRecordId(product.getId()); dto.setRecordType(StockInQualifiedRecordTypeEnum.SALE_STOCK_IN.getCode()); dto.setQualitity(product.getQuantity()); dto.setProductModelId(product.getProductModelId()); stockInventoryService.addstockInventory(dto); StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(product.getId()); stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.SALE_STOCK_IN.getCode()); stockInventoryDto.setQualitity(product.getQuantity()); stockInventoryDto.setProductModelId(product.getProductModelId()); stockInventoryDto.setSalesLedgerId(ledger.getId()); stockInventoryDto.setSalesLedgerProductId(product.getId()); stockInventoryService.addstockInventory(stockInventoryDto); } // æ´æ°éå®è®¢åå ¥åºç¶æ ledger.setStockStatus(1); // æéå®è®¢å产åå ¥åºæ 嵿´æ°ä¸»åå ¥åºç¶æï¼1-é¨åå ¥åºï¼2-å·²å ¥åº List<SalesLedgerProduct> ledgerAllProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId())); boolean hasStocked = CollectionUtils.isNotEmpty(ledgerAllProducts) && ledgerAllProducts.stream().anyMatch(item -> Objects.equals(item.getProductStockStatus(), 1)); boolean allStocked = CollectionUtils.isNotEmpty(ledgerAllProducts) && ledgerAllProducts.stream().allMatch(item -> Objects.equals(item.getProductStockStatus(), 1)); ledger.setStockStatus(allStocked ? 2 : (hasStocked ? 1 : 0)); baseMapper.updateById(ledger); } } src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -24,9 +24,11 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -85,7 +87,7 @@ if(!"å·²åè´§".equals(byId.getStatus())){ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId()); if (salesLedgerProduct != null) { stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); stockUtils.substractStock(salesLedgerProduct.getSalesLedgerId(), salesLedgerProduct.getId(), salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); } } byId.setExpressNumber(req.getExpressNumber()); src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -39,4 +39,8 @@ private BigDecimal currentStock; private BigDecimal unLockedQuantity; private Long salesLedgerId; private Long salesLedgerProductId; } src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -62,4 +62,10 @@ @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty("éå®è®¢åID") private Long salesLedgerId; @ApiModelProperty("éå®è®¢å产åID") private Long salesLedgerProductId; } src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
@@ -71,4 +71,10 @@ @ApiModelProperty(value = "ç±»å 0åæ ¼å ¥åº 1ä¸åæ ¼å ¥åº") private String type; @ApiModelProperty("éå®è®¢åID") private Long salesLedgerId; @ApiModelProperty("éå®è®¢å产åID") private Long salesLedgerProductId; } src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.common.enums.StockOutQualifiedRecordTypeEnum; @@ -11,6 +13,10 @@ import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.stock.dto.StockInRecordDto; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockUninventoryDto; @@ -28,6 +34,7 @@ import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Objects; @Service @AllArgsConstructor @@ -36,6 +43,8 @@ private StockInRecordMapper stockInRecordMapper; private StockInventoryMapper stockInventoryMapper; private StockUninventoryMapper stockUninventoryMapper; private SalesLedgerProductMapper salesLedgerProductMapper; private SalesLedgerMapper salesLedgerMapper; @Override public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) { @@ -72,6 +81,7 @@ public int batchDelete(List<Long> ids) { for (Long id : ids) { StockInRecord stockInRecord = stockInRecordMapper.selectById(id); validateCanDeleteBySalesLedger(stockInRecord); if (stockInRecord.getType().equals("0")) { StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())); if (stockInventory == null) { @@ -80,7 +90,12 @@ StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setQualitity(stockInRecord.getStockInNum()); stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto); int affectRows = stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto); if (affectRows <= 0) { throw new BaseException("åºååé失败,å½ååºåä¸è¶³,æ æ³å é¤è¯¥å ¥åºè®°å½"); } // éå®å ¥åºè®°å½å 餿¶ï¼åééå®äº§ååéå®è®¢åå ¥åºç¶æ rollbackSalesStockStatus(stockInRecord); } }else if (stockInRecord.getType().equals("1")) { StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId())); @@ -90,13 +105,54 @@ StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); stockUninventoryDto.setQualitity(stockInRecord.getStockInNum()); stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto); int affectRows = stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto); if (affectRows <= 0) { throw new BaseException("ä¸åæ ¼åºååé失败,å½ååºåä¸è¶³,æ æ³å é¤è¯¥å ¥åºè®°å½"); } } } } return stockInRecordMapper.deleteBatchIds(ids); } private void validateCanDeleteBySalesLedger(StockInRecord stockInRecord) { if (stockInRecord == null || stockInRecord.getSalesLedgerId() == null) { return; } SalesLedger salesLedger = salesLedgerMapper.selectById(stockInRecord.getSalesLedgerId()); if (salesLedger != null && Objects.equals(salesLedger.getDeliveryStatus(), 5)) { throw new BaseException("éå®è®¢åå·²åè´§,对åºå ¥åºè®°å½ä¸å 许å é¤"); } } private void rollbackSalesStockStatus(StockInRecord stockInRecord) { if (stockInRecord == null || stockInRecord.getSalesLedgerProductId() == null) { return; } SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(stockInRecord.getSalesLedgerProductId()); if (salesLedgerProduct == null) { return; } salesLedgerProduct.setProductStockStatus(0); salesLedgerProductMapper.updateById(salesLedgerProduct); Long salesLedgerId = stockInRecord.getSalesLedgerId() != null ? stockInRecord.getSalesLedgerId() : salesLedgerProduct.getSalesLedgerId(); if (salesLedgerId == null) { return; } SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId); if (salesLedger == null) { return; } List<SalesLedgerProduct> ledgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId)); boolean hasStocked = CollectionUtils.isNotEmpty(ledgerProducts) && ledgerProducts.stream().anyMatch(item -> Objects.equals(item.getProductStockStatus(), 1)); boolean allStocked = CollectionUtils.isNotEmpty(ledgerProducts) && ledgerProducts.stream().allMatch(item -> Objects.equals(item.getProductStockStatus(), 1)); salesLedger.setStockStatus(allStocked ? 2 : (hasStocked ? 1 : 0)); salesLedgerMapper.updateById(salesLedger); } @Override public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) { List<StockInRecordExportData> list = stockInRecordMapper.listStockInRecordExportData(stockInRecordDto); src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; @@ -46,6 +47,7 @@ private StockInRecordService stockInRecordService; private StockOutRecordService stockOutRecordService; private SalesLedgerProductMapper salesLedgerProductMapper; @Override public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) { return stockInventoryMapper.pagestockInventory(page, stockInventoryDto); @@ -56,12 +58,22 @@ @Transactional(rollbackFor = Exception.class) public Boolean addstockInventory(StockInventoryDto stockInventoryDto) { //æ°å¢å ¥åºè®°å½åæ·»å åºå // æ´æ°äº§åå ¥åºç¶æ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(stockInventoryDto.getSalesLedgerProductId()); if (salesLedgerProduct == null) { throw new ServiceException("å ¥åºå¤±è´¥,éå®äº§åä¸åå¨"); } salesLedgerProduct.setProductStockStatus(1); salesLedgerProductMapper.updateById(salesLedgerProduct); StockInRecordDto stockInRecordDto = new StockInRecordDto(); stockInRecordDto.setRecordId(stockInventoryDto.getRecordId()); stockInRecordDto.setRecordType(stockInventoryDto.getRecordType()); stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity()); stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); stockInRecordDto.setType("0"); stockInRecordDto.setSalesLedgerId(stockInventoryDto.getSalesLedgerId()); stockInRecordDto.setSalesLedgerProductId(stockInventoryDto.getSalesLedgerProductId()); stockInRecordService.add(stockInRecordDto); //åè¿è¡æ°å¢åºåæ°éåºå //å æ¥è¯¢åºå表ä¸çäº§åæ¯å¦åå¨ï¼ä¸å卿°å¢ï¼å卿´æ° @@ -92,6 +104,8 @@ stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity()); stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); stockOutRecordDto.setType("0"); stockOutRecordDto.setSalesLedgerId(stockInventoryDto.getSalesLedgerId()); stockOutRecordDto.setSalesLedgerProductId(stockInventoryDto.getSalesLedgerProductId()); stockOutRecordService.add(stockOutRecordDto); StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())); if (ObjectUtils.isEmpty(oldStockInventory)) { src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -11,6 +11,8 @@ import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockOutRecordDto; import com.ruoyi.stock.dto.StockUninventoryDto; @@ -28,6 +30,7 @@ import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Objects; /** * <p> @@ -43,6 +46,7 @@ private StockOutRecordMapper stockOutRecordMapper; private StockInventoryMapper stockInventoryMapper; private StockUninventoryMapper stockUninventoryMapper; private SalesLedgerMapper salesLedgerMapper; @Override public IPage<StockOutRecordDto> listPage(Page page, StockOutRecordDto stockOutRecordDto) { @@ -75,6 +79,7 @@ public int batchDelete(List<Long> ids) { for (Long id : ids) { StockOutRecord stockOutRecord = stockOutRecordMapper.selectById(id); validateCanDeleteBySalesLedger(stockOutRecord); if (stockOutRecord.getType().equals("0")) { StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockOutRecord.getProductModelId())); if (stockInventory == null) { @@ -100,6 +105,16 @@ return stockOutRecordMapper.deleteBatchIds(ids); } private void validateCanDeleteBySalesLedger(StockOutRecord stockOutRecord) { if (stockOutRecord == null || stockOutRecord.getSalesLedgerId() == null) { return; } SalesLedger salesLedger = salesLedgerMapper.selectById(stockOutRecord.getSalesLedgerId()); if (salesLedger != null && Objects.equals(salesLedger.getDeliveryStatus(), 5)) { throw new BaseException("éå®è®¢åå·²åè´§,对åºåºåºè®°å½ä¸å 许å é¤"); } } @Override public void exportStockOutRecord(HttpServletResponse response, StockOutRecordDto stockOutRecordDto) { List<StockOutRecordExportData> list = stockOutRecordMapper.listStockOutRecordExportData(stockOutRecordDto); src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -96,7 +96,7 @@ AND T1.stock_status = #{salesLedgerDto.stockStatus} </if> </where> ORDER BY T1.entry_date DESC ORDER BY T1.entry_date DESC,T1.id DESC </select> <select id="selectIncomeStats" resultType="com.ruoyi.home.dto.IncomeExpenseAnalysisDto"> src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -51,6 +51,7 @@ </set> where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity} </update> <select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto"> select si.id, si.qualitity, @@ -66,7 +67,7 @@ pm.unit, p.product_name from stock_inventory si left join product_model pm on si. = pm.id left join product_model pm on si.product_model_id = pm.id left join product p on pm.product_id = p.id where 1 = 1 <if test="ew.productName != null and ew.productName !=''"> @@ -76,6 +77,7 @@ and si.product_model_id = #{ew.productModelId} </if> </select> <select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData"> select si.qualitity, pm.model, src/main/resources/mybatis/mybatis-config.xml
@@ -12,8 +12,8 @@ <!-- é ç½®é»è®¤çæ§è¡å¨.SIMPLEå°±æ¯æ®éæ§è¡å¨;REUSEæ§è¡å¨ä¼éç¨é¢å¤çè¯å¥(prepared statements);BATCHæ§è¡å¨å°éç¨è¯å¥å¹¶æ§è¡æ¹éæ´æ° --> <setting name="defaultExecutorType" value="SIMPLE" /> <!-- æå® MyBatis æç¨æ¥å¿çå ·ä½å®ç° --> <setting name="logImpl" value="SLF4J" /> <!-- <setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl" />--> <!-- <setting name="logImpl" value="SLF4J" />--> <setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/> <!-- 使ç¨é©¼å³°å½åæ³è½¬æ¢å段 --> <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> --> </settings>