src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -133,6 +133,14 @@ return AjaxResult.success(result); } @GetMapping("/listPageByProductProduction") @Log(title = "生产入库-入库管理-生产入库查询", businessType = BusinessType.OTHER) @ApiOperation(value = "入库查询") public AjaxResult listPageByProductProduction(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDto> result = procurementRecordService.listPageByProductProduction(page, procurementDto); return AjaxResult.success(result); } @GetMapping("/listPageByCustom") @Log(title = "自定义入库-入库管理-入库查询", businessType = BusinessType.OTHER) @ApiOperation(value = "入库查询") src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
@@ -52,6 +52,13 @@ return AjaxResult.success(result); } @GetMapping("/listPageBySemiProduct") @Log(title = "生产出库-出库台账-出库查询", businessType = BusinessType.OTHER) public AjaxResult listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto) { IPage<ProcurementRecordOutPageDto> result = procurementRecordOutService.listPageBySemiProduct(page, procurementDto); return AjaxResult.success(result); } @GetMapping("/listPageByCustom") @Log(title = "自定义出库-出库台账-出库查询", businessType = BusinessType.OTHER) public AjaxResult listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) { src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
@@ -44,4 +44,6 @@ IPage<ProcurementPageDtoCopy> listPagePRS(Page page, @Param("req") ProcurementPageDto procurementDto); BigDecimal getSumQuantity(@Param("productModelId") Long productModelId); IPage<ProcurementPageDto> listPageByProductProduction(Page page, @Param("req") ProcurementPageDto procurementDto); } src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
@@ -29,4 +29,8 @@ IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto); BigDecimal getSumQuantity(@Param("productModelId") Long productModelId); ProcurementRecordOut selectCode(@Param("format") String format); IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto); } src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java
@@ -27,4 +27,6 @@ IPage<ProcurementRecordOutPageDto> listPageByProduct(Page page, ProcurementRecordOutPageDto procurementDto); IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto); IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto); } src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -61,4 +61,6 @@ InventoryInformationDto getReportList(); IPage<ProductModel> listPageProductionStock(Page page); IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto); } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -69,7 +69,7 @@ Long aLong = procurementRecordOutMapper.selectCount(procurementRecordLambdaQueryWrapper); ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(procurementRecordOutAdd.getId()) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong1 + 1)) .code("SC" + dateFormat.format(now) + String.format("%03d", aLong1 + 1)) .salesLedgerProductId(procurementRecordOutAdd.getSalesLedgerProductId()) .inboundBatches(aLong.equals(0L) ? "第1批次" : "第"+ (aLong + 1) + "批次") .inboundNum(new BigDecimal(procurementRecordOutAdd.getQuantity())) @@ -119,4 +119,9 @@ public IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) { return procurementRecordOutMapper.listPageByCustom(page, procurementDto); } @Override public IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto) { return procurementRecordOutMapper.listPageBySemiProduct(page, procurementDto); } } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -889,4 +889,10 @@ return iPage; } @Override public IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPageByProductProduction(page, procurementDto); return procurementPageDtoIPage; } } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -13,6 +13,8 @@ import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.controller.ProductWorkOrderController; import com.ruoyi.production.dto.ProductStructureDto; @@ -27,6 +29,7 @@ import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,6 +37,8 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; @@ -43,6 +48,7 @@ @AllArgsConstructor public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService { private final ProcurementRecordOutMapper procurementRecordOutMapper; private ProductionProductMainMapper productionProductMainMapper; private ProductWorkOrderController productWorkOrderController; @@ -93,7 +99,6 @@ SysUser user = SecurityUtils.getLoginUser().getUser(); // 新增逻辑 ProductionProductMain productionProductMain = new ProductionProductMain(); ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId()); @@ -137,7 +142,6 @@ productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId()); productionProductMain.setWorkOrderId(dto.getWorkOrderId()); productionProductMain.setStatus(0); // 添加报工主表 int insert = productionProductMainMapper.insert(productionProductMain); @@ -188,16 +192,40 @@ List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModel.getId()); for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); Product product = productMapper.selectById(productModel1.getProductId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException("库存不足"); throw new RuntimeException(product.getProductName() + "库存为0"); } if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) { throw new RuntimeException(product.getProductName() + "库存不足"); } ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); productionProductInput.setProductMainId(productionProductMain.getId()); productionProductInputMapper.insert(productionProductInput); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate now = LocalDate.now(); ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now)); Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS"+dateFormat.format(now))[1]); //添加出库处理 ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(0) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(0) .inboundBatches(aLong.equals(0L) ? "第1批次" : "第"+ (aLong + 1) + "批次") .inboundNum(productionProductInput.getQuantity()) .type(4) .createTime(LocalDateTime.now()) .createUser(user.getUserId()) .createBy(user.getNickName()) .updateUser(user.getUserId()) .updateTime(LocalDateTime.now()) .productModelId(productModel1.getId()); procurementRecordOutMapper.insert(procurementRecordOut.build()); } } @@ -210,6 +238,11 @@ // 获取生产订单 ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(new QueryWrapper<ProductionProductMain>().lambda().eq(ProductionProductMain::getWorkOrderId, dto.getWorkOrderId())); if (productionProductMains.isEmpty()) { productWorkOrder.setActualStartTime(LocalDate.now()); } ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId()); if (productOrder == null) { throw new RuntimeException("生产订单不存在"); src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -146,7 +146,7 @@ procurementRecordOutAdd.setDetails(details); ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder() .salesLedgerProductId(details1.getId()) .salesLedgerProductId(0) .inboundBatches( "生产半成品入库") .inboundNum(details1.getInboundQuantity()) .type(2) @@ -173,7 +173,7 @@ List<Details> details = new ArrayList<>(); Details details1 = new Details(); details1.setInboundQuantity(qualityInspect.getQuantity()); details1.setId(Math.toIntExact(salesLedgerProduct.getProductId())); details1.setId(Math.toIntExact(salesLedgerProduct.getId())); details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); details1.setProductModelId(salesLedgerProduct.getProductModelId()); src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -229,6 +229,7 @@ ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productOrder.getId()); productWorkOrder.setQuantity(salesLedgerProduct.getQuantity()); productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -12,13 +12,16 @@ import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.other.mapper.TempFileMapper; import com.ruoyi.other.pojo.TempFile; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.project.system.domain.SysDept; @@ -122,6 +125,10 @@ private static final long LOCK_EXPIRE_TIME = 30; // 锁自动过期时间(秒) private final RedisTemplate<String, String> redisTemplate; @Autowired private ProductModelMapper productModelMapper; @Autowired private ProductStructureMapper productStructureMapper; @Override public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) { @@ -689,6 +696,7 @@ productOrderMapper.insert(productOrder); ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())); List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(salesLedgerProduct.getProductModelId()); if (processRoute != null) { List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId())); // 生成当前日期的前缀:年月日 @@ -725,9 +733,18 @@ // 生成完整的工单号 String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productStructureDtos.stream().forEach(productStructureDto -> { if (productStructureDto.getProductModelId().equals(productProcessRouteItem.getProductModelId())){ productWorkOrder.setQuantity(productStructureDto.getUnitQuantity().multiply(salesLedgerProduct.getQuantity())); productWorkOrder.setPlanQuantity(productWorkOrder.getQuantity()); } }); if (Objects.equals(productProcessRouteItem.getProductModelId(), salesLedgerProduct.getProductModelId())) { productWorkOrder.setQuantity(salesLedgerProduct.getQuantity()); productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity()); } productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productOrder.getId()); productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -261,7 +261,7 @@ 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 <where> t1.type = 2 t1.type = 2 and t1.sales_ledger_product_id != 0 <if test="req.customerName != null and req.customerName != ''"> and t3.customer_name like concat('%',#{req.customerName},'%') </if> @@ -358,4 +358,25 @@ from procurement_record_storage where product_model_id = #{productModelId} </select> <select id="listPageByProductProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto"> select t1.*, t2.model as product_category , t2.unit, t3.product_name from procurement_record_storage t1 left join product_model t2 on t1.product_model_id = t2.id left join product t3 on t2.product_id = t3.id <where> t1.type = 2 and t1.sales_ledger_product_id = 0 <if test="req.productCategory != null and req.productCategory != ''"> and t3.product_name like concat('%',#{req.productCategory},'%') </if> <if test="req.timeStr != null and req.timeStr != ''"> and t1.create_time like concat('%',#{req.timeStr},'%') </if> </where> order by t1.create_time desc </select> </mapper> src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -39,8 +39,7 @@ order by t1.create_time desc </select> <select id="list" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto"> select t3.supplier_name, select t3.supplier_name, t2.product_category, t1.id, t2.specification_model, @@ -60,8 +59,7 @@ </select> <select id="listOne" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto"> select t3.customer_contract_no, select t3.customer_contract_no, t3.sales_contract_no, t3.customer_name, t2.product_category, @@ -83,8 +81,7 @@ </select> <select id="listTwo" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto"> select t1.supplier_name, select t1.supplier_name, t1.product_category, t1.id, t1.specification_model, @@ -173,7 +170,40 @@ <select id="getSumQuantity" resultType="BigDecimal"> select COALESCE(sum(inbound_num), 0) from procurement_record_out where type = 1 and product_model_id = #{productModelId} where product_model_id = #{productModelId} </select> <select id="selectCode" resultType="com.ruoyi.procurementrecord.pojo.ProcurementRecordOut"> select * from procurement_record_out where code like concat('%', #{format}) order by id desc limit 1 </select> <select id="listPageBySemiProduct" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto"> select t1.id, t1.code, t2.unit, t1.inbound_num, t1.create_time, t1.create_by, t2.model as specification_model, t2.product_code, t3.product_name as product_category from procurement_record_out t1 left join product_model t2 on t2.id = t1.product_model_id left join product t3 on t3.id = t2.product_id <where> and t1.type = 4 <if test="req.productCategory !=null and req.productCategory !=''"> t3.product_name like concat('%',#{req.productCategory},'%') </if> <if test="req.timeStr != null and req.timeStr != ''"> and t1.create_time like concat('%',#{req.timeStr},'%') </if> </where> order by t1.create_time desc </select> </mapper>