doc/20260113-product_model.sql
@@ -4,3 +4,11 @@ alter table process_route add process_route_code varchar(255) null comment '工艺路线编码'; alter table procurement_record_storage add product_model_id bigint null comment '产品规格id'; alter table procurement_record_out add product_model_id bigint null comment '产品规格id'; alter table quality_inspect add product_model_id bigint null comment '产品规格id'; src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
@@ -1,8 +1,12 @@ package com.ruoyi.basic.dto; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.production.dto.ProductStructureDto; import lombok.Data; import java.util.List; @Data public class ProductModelDto extends ProductModel { private List<ProductStructureDto> productStructureList; } src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
src/main/java/com/ruoyi/production/service/ProductStructureService.java
@@ -1,6 +1,7 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.basic.dto.ProductModelDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProductStructure; @@ -9,7 +10,7 @@ public interface ProductStructureService extends IService<ProductStructure> { List<ProductStructureDto> listByproductModelId(Long productId); ProductModelDto listByproductModelId(Long productId); Boolean addProductStructureDto(ProductStructureDto productStructureDto); src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -2,15 +2,22 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.ProductModelDto; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.ProductStructureMapper; import com.ruoyi.production.pojo.ProductStructure; import com.ruoyi.production.service.ProductStructureService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; @Service @@ -20,10 +27,21 @@ @Autowired private ProductStructureMapper productStructureMapper; @Autowired private ProductModelMapper productModelMapper; @Autowired private ProductMapper productMapper; @Override public List<ProductStructureDto> listByproductModelId(Long productModelId) { return productStructureMapper.listByproductModelId( productModelId); public ProductModelDto listByproductModelId(Long productModelId) { ProductModel productModel = productModelMapper.selectById(productModelId); Product product = productMapper.selectById(productModel.getProductId()); ProductModelDto productModelDto = new ProductModelDto(); BeanUtils.copyProperties(productModel,productModelDto); productModelDto.setProductName(product.getProductName()); List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModelId); productModelDto.setProductStructureList(productStructureDtos); return productModelDto; } @Override src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -13,6 +13,7 @@ import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.controller.ProductWorkOrderController; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.dto.ProductionProductMainDto; @@ -73,6 +74,8 @@ private ProductOrderMapper productOrderMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private StockUtils stockUtils; @Override @@ -166,6 +169,7 @@ qualityInspect.setInspectState(0); qualityInspect.setInspectType(inspectType); qualityInspect.setProductMainId(productionProductMain.getId()); qualityInspect.setProductModelId(productModel.getId()); qualityInspectMapper.insert(qualityInspect); qualityTestStandardMapper.selectList( @@ -183,6 +187,12 @@ if (productModel != null) { List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModel.getId()); for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException("库存不足"); } ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -239,6 +239,7 @@ qualityInspect.setProductId(saleProduct.getId()); qualityInspect.setProductName(saleProduct.getProductCategory()); qualityInspect.setModel(saleProduct.getSpecificationModel()); qualityInspect.setProductModelId(saleProduct.getProductModelId()); qualityInspect.setUnit(saleProduct.getUnit()); qualityInspect.setQuantity(saleProduct.getQuantity()); qualityInspectMapper.insert(qualityInspect); src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -144,6 +144,8 @@ * 报工id */ private Long productMainId; private Long productModelId; //不合格现象 private String defectivePhenomena; src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.quality.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; @@ -16,6 +17,7 @@ import com.ruoyi.framework.security.LoginUser; import com.ruoyi.procurementrecord.dto.Details; import com.ruoyi.procurementrecord.dto.ProcurementAddDto; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.mapper.QualityInspectMapper; @@ -43,7 +45,9 @@ import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -119,16 +123,45 @@ ArrayList<Details> detailss = new ArrayList<>(); Details details = new Details(); details.setId(Math.toIntExact(qualityInspect.getProductId())); details.setId(Math.toIntExact(salesLedgerProduct.getId())); details.setInboundQuantity(qualityInspect.getQuantity()); details.setWarnNum(salesLedgerProduct.getWarnNum()); details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); details.setProductModelId(qualityInspect.getProductModelId()); detailss.add( details); procurementRecordOutAdd.setDetails(detailss); procurementRecordService.add(procurementRecordOutAdd); } }else if (qualityInspect.getInspectType() == 1) { //查询UnitPrice/TotalPrice ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setTypeName("生产入库"); procurementRecordOutAdd.setNickName(loginUser.getNickName()); List<Details> details = new ArrayList<>(); Details details1 = new Details(); details1.setInboundQuantity(qualityInspect.getQuantity()); details1.setProductModelId(qualityInspect.getProductModelId()); procurementRecordOutAdd.setDetails(details); ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder() .salesLedgerProductId(details1.getId()) .inboundBatches( "生产半成品入库") .inboundNum(details1.getInboundQuantity()) .type(2) .warnNum(new BigDecimal(0)) .unitPrice(new BigDecimal(0)) .totalPrice(new BigDecimal(0)) .createTime(LocalDateTime.now()) .createUser(loginUser.getUserId()) .updateTime(LocalDateTime.now()) .updateUser(loginUser.getUserId()) .createBy(procurementRecordOutAdd.getNickName()) .productModelId(details1.getProductModelId()); procurementRecordService.save(procurementRecordBuilder.build()); }else if (qualityInspect.getInspectType() == 2) { //查询UnitPrice/TotalPrice @@ -140,9 +173,10 @@ List<Details> details = new ArrayList<>(); Details details1 = new Details(); details1.setInboundQuantity(qualityInspect.getQuantity()); details1.setId(Math.toIntExact(salesLedgerProduct.getId())); details1.setId(Math.toIntExact(salesLedgerProduct.getProductId())); details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); details1.setProductModelId(salesLedgerProduct.getProductModelId()); details.add(details1); procurementRecordOutAdd.setDetails(details); procurementRecordService.add(procurementRecordOutAdd); src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -171,7 +171,7 @@ </select> <select id="getSumQuantity" resultType="BigDecimal"> select sum(inbound_num) select COALESCE(sum(inbound_num), 0) from procurement_record_out where type = 1 and product_model_id = #{productModelId}