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/dto/Details.java
@@ -10,10 +10,11 @@ */ @Data public class Details { private Integer id; // 产åid private Integer id; // å°è´¦äº§åid private BigDecimal inboundQuantity; // å ¥åºæ°é private BigDecimal warnNum; // é¢è¦æ°éï¼éè´å ¥åºææï¼ //åä»· private BigDecimal unitPrice; private BigDecimal totalPrice; private Long productModelId; // åºç¡äº§åid } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
@@ -24,4 +24,6 @@ */ private Integer type; private Long productModelId;// åºç¡äº§åID } src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
@@ -9,6 +9,7 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.List; /** @@ -41,4 +42,6 @@ IPage<ProcurementPageDtoCopy> listPageCopyByProduction(Page page, @Param("req") ProcurementPageDto procurementDto); IPage<ProcurementPageDtoCopy> listPagePRS(Page page, @Param("req") ProcurementPageDto procurementDto); BigDecimal getSumQuantity(@Param("productModelId") Long productModelId); } src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
@@ -7,6 +7,7 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.List; /** @@ -26,4 +27,6 @@ IPage<ProcurementRecordOutPageDto> listPageByProduct(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto); IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto); BigDecimal getSumQuantity(@Param("productModelId") Long productModelId); } src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -1,8 +1,6 @@ package com.ruoyi.procurementrecord.pojo; import com.baomidou.mybatisplus.annotation.*; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; @@ -89,4 +87,9 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * 产åID */ private Long productModelId; } src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -95,4 +95,9 @@ */ @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * 产åID */ private Long productModelId; } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -10,7 +10,6 @@ import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordOutService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; @@ -22,7 +21,6 @@ import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.text.DateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -80,7 +78,8 @@ .createUser(Long.valueOf(procurementRecordOutAdd.getUserId())) .createBy(sysUser.getNickName()) .updateUser(Long.valueOf(procurementRecordOutAdd.getUserId())) .updateTime(LocalDateTime.now()); .updateTime(LocalDateTime.now()) .productModelId(procurementRecordOutAdd.getProductModelId()); this.save(procurementRecordOut.build()); return 0; } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -14,8 +14,8 @@ import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.procurementrecord.pojo.CustomStorage; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; @@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -772,7 +771,8 @@ .createUser(loginUser.getUserId()) .updateTime(LocalDateTime.now()) .updateUser(loginUser.getUserId()) .createBy(procurementDto.getNickName()); .createBy(procurementDto.getNickName()) .productModelId(detail.getProductModelId()); this.save(procurementRecordBuilder.build()); // å ¥åºæååæéè´æ°é // LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.procurementrecord.utils; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.math.BigDecimal; @Component @RequiredArgsConstructor public class StockUtils { private final ProcurementRecordOutMapper procurementRecordOutMapper; private final ProcurementRecordMapper procurementRecordMapper; // è·åååå©ä½åºå public BigDecimal getStockQuantity(Long productModelId) { // å ¥åºæ°é BigDecimal sumQuantity = procurementRecordMapper.getSumQuantity(productModelId); // åºåºæ°é BigDecimal outQuantity = procurementRecordOutMapper.getSumQuantity(productModelId); return outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity); } } 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; @@ -76,6 +77,8 @@ private ProductOrderMapper productOrderMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private StockUtils stockUtils; @Override @@ -169,6 +172,7 @@ qualityInspect.setInspectState(0); qualityInspect.setInspectType(inspectType); qualityInspect.setProductMainId(productionProductMain.getId()); qualityInspect.setProductModelId(productModel.getId()); qualityInspectMapper.insert(qualityInspect); List<QualityTestStandardParam> qualityTestStandardParams = qualityTestStandardParamMapper.selectListByProductId(product.getId()); @@ -186,6 +190,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
@@ -242,6 +242,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/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -77,7 +77,7 @@ IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto); if(result.getRecords().size()>0) { ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0); if (item.getQuantity().compareTo(procurementDtoCopy.getInboundNum0()) >= 0) { if (item.getQuantity().compareTo(procurementDtoCopy.getInboundNum0()) >= 0 && item.getApproveStatus() == 0) { item.setApproveStatus(1); salesLedgerProductService.addOrUpdateSalesLedgerProduct(item); } src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -9,7 +9,9 @@ import com.ruoyi.procurementrecord.dto.ProcurementAddDto; import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordOutService; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.sales.mapper.ShipmentApprovalMapper; import com.ruoyi.sales.mapper.ShippingInfoMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; @@ -26,6 +28,7 @@ import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -43,6 +46,8 @@ private ISalesLedgerProductService salesLedgerProductService; @Autowired private ProcurementRecordOutService procurementRecordOutService; @Autowired private ProcurementRecordService procurementRecordStorageService; @GetMapping("/listPage") @ApiOperation("å货审æ¹å表") @@ -66,15 +71,22 @@ SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId()); salesLedgerProduct.setApproveStatus(req.getApproveStatus()); salesLedgerProductService.updateById(salesLedgerProduct); if(req.getApproveStatus()==3){ ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(new LambdaQueryWrapper<ProcurementRecordStorage>() .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId())); if(procurementRecordStorage==null){ return AjaxResult.error("éè´è®°å½ä¸åå¨"); } //å货审æ¹éè¿ï¼ç产该订ååºåºè®°å½ ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd(); procurementRecordOutAdd.setId(procurementRecordStorage.getId()); procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId())); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId())); procurementRecordOutAdd.setQuantity(String.valueOf(salesLedgerProduct.getQuantity())); //è·åå½åæ¶é´ LocalDateTime now = LocalDateTime.now(); LocalDate now = LocalDate.now(); procurementRecordOutAdd.setTime(now.toString()); procurementRecordOutService.stockout(procurementRecordOutAdd); } src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -353,4 +353,9 @@ </if> </where> </select> <select id="getSumQuantity" resultType="BigDecimal"> select COALESCE(sum(inbound_num), 0) from procurement_record_storage where product_model_id = #{productModelId} </select> </mapper> src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -169,4 +169,11 @@ </where> order by t1.create_time desc </select> <select id="getSumQuantity" resultType="BigDecimal"> select COALESCE(sum(inbound_num), 0) from procurement_record_out where type = 1 and product_model_id = #{productModelId} </select> </mapper> src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -11,7 +11,7 @@ t3.shipping_date FROM sales_ledger_product T1 left join shipping_info t3 on T1.id = t3.sales_ledger_id left join shipping_info t3 on T1.id = t3.sales_ledger_product_id <where> 1=1 <if test="salesLedgerProduct.salesLedgerId != null and salesLedgerProduct.salesLedgerId != '' ">