gongchunyi
6 天以前 33d93225f790ff72f8ba5e86f8cf2c3e2db94d0d
feat: 新增宽、高、面积,产品加工绑定
已修改7个文件
116 ■■■■■ 文件已修改
doc/河南鹤壁天沐钢化玻璃厂.sql 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/ºÓÄϺױÚÌìãå¸Ö»¯²£Á§³§.sql
@@ -38,4 +38,14 @@
    ADD COLUMN remark VARCHAR(500) DEFAULT NULL COMMENT '备注';
ALTER TABLE sales_ledger_product_process
    CHANGE COLUMN remark code VARCHAR(255) COMMENT '编码';
    CHANGE COLUMN remark code VARCHAR(255) COMMENT '编码';
ALTER TABLE `product-inventory-management-hbtmblc`.`sales_ledger_product`
    MODIFY COLUMN `width` decimal(20, 15) NULL DEFAULT NULL COMMENT '宽(mm)' AFTER `is_checked`,
    MODIFY COLUMN `height` decimal(20, 15) NULL DEFAULT NULL COMMENT '高(mm)' AFTER `width`,
    MODIFY COLUMN `actual_piece_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '实际单片面积(㎡)' AFTER `height`,
    MODIFY COLUMN `actual_total_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '实际总面积(㎡)' AFTER `actual_piece_area`,
    MODIFY COLUMN `settle_piece_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '结算单片面积(㎡)' AFTER `actual_total_area`,
    MODIFY COLUMN `settle_total_area` decimal(20, 15) NULL DEFAULT NULL COMMENT '结算总面积(㎡)' AFTER `settle_piece_area`,
    ADD COLUMN `perimeter` decimal(20, 15) NULL COMMENT '周长' AFTER `settle_total_area`,
    ADD COLUMN `heavy_box` decimal(20, 15) NULL COMMENT '重箱' AFTER `perimeter`;
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -270,6 +270,18 @@
    @ApiModelProperty("结算总面积(㎡)")
    private BigDecimal settleTotalArea;
    /**
     * å‘¨é•¿
     */
    @ApiModelProperty("周长(cm)")
    private BigDecimal perimeter;
    /**
     * å‘¨é•¿
     */
    @ApiModelProperty("重箱")
    private BigDecimal heavyBox;
    @TableField(exist = false)
    @ApiModelProperty("销售产品额外加工")
    private List<SalesLedgerProductProcess> salesProductProcessList;
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProductProcessBind.java
@@ -32,7 +32,7 @@
    private Integer id;
    @ApiModelProperty(value = "销售台账产品信息ID")
    private Integer salesLedgerProductId;
    private Long salesLedgerProductId;
    @ApiModelProperty(value = "销售产品加工明细ID")
    private Integer salesLedgerProductProcessId;
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductProcessBindService.java
@@ -1,7 +1,10 @@
package com.ruoyi.sales.service;
import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * <p>
@@ -13,4 +16,6 @@
 */
public interface ISalesLedgerProductProcessBindService extends IService<SalesLedgerProductProcessBind> {
    void updateProductProcessBind(List<SalesLedgerProductProcess> list, Long salesLedgerProductId);
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductProcessBindServiceImpl.java
@@ -1,10 +1,14 @@
package com.ruoyi.sales.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.sales.pojo.SalesLedgerProductProcess;
import com.ruoyi.sales.pojo.SalesLedgerProductProcessBind;
import com.ruoyi.sales.mapper.SalesLedgerProductProcessBindMapper;
import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -17,4 +21,19 @@
@Service
public class SalesLedgerProductProcessBindServiceImpl extends ServiceImpl<SalesLedgerProductProcessBindMapper, SalesLedgerProductProcessBind> implements ISalesLedgerProductProcessBindService {
    @Override
    public void updateProductProcessBind(List<SalesLedgerProductProcess> list, Long salesLedgerProductId) {
        if (list == null || list.isEmpty()) {
            return;
        }
        //  å…ˆæ¸…空再插入
        baseMapper.delete(new LambdaQueryWrapper<SalesLedgerProductProcessBind>().in(SalesLedgerProductProcessBind::getSalesLedgerProductId, salesLedgerProductId));
        list.forEach(s -> {
            SalesLedgerProductProcessBind salesLedgerProductProcessBind = new SalesLedgerProductProcessBind();
            salesLedgerProductProcessBind.setSalesLedgerProductId(salesLedgerProductId);
            salesLedgerProductProcessBind.setSalesLedgerProductProcessId(s.getId());
            salesLedgerProductProcessBind.setQuantity(s.getQuantity());
            baseMapper.insert(salesLedgerProductProcessBind);
        });
    }
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -24,9 +24,8 @@
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.pojo.*;
import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInventory;
@@ -84,7 +83,7 @@
    private StockUtils stockUtils;
    private final ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService;
    @Autowired
    private ProductStructureMapper productStructureMapper;
@@ -104,14 +103,14 @@
//        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
//                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
        if(!CollectionUtils.isEmpty(salesLedgerProducts)){
        if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
            salesLedgerProducts.forEach(item -> {
                // å‘货信息
                ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
                        .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
                        .orderByDesc(ShippingInfo::getCreateTime)
                        .last("limit 1"));
                if(shippingInfo != null){
                if (shippingInfo != null) {
                    item.setShippingDate(shippingInfo.getShippingDate());
                    item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
                    item.setShippingStatus(shippingInfo.getStatus());
@@ -131,8 +130,8 @@
                    BigDecimal noInvoiceNum = BigDecimal.ZERO;
                    BigDecimal noInvoiceAmount = BigDecimal.ZERO;
                    for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
                        if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
                            invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
                        if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
                            invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
                            invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
                        }
                    }
@@ -166,7 +165,7 @@
        //删除发货信息
        List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                .in(ShippingInfo::getSalesLedgerProductId, Arrays.asList(ids)));
        if(!CollectionUtils.isEmpty(shippingInfos)){
        if (!CollectionUtils.isEmpty(shippingInfos)) {
            shippingInfoService.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
        }
@@ -203,12 +202,12 @@
    @Transactional(rollbackFor = Exception.class)
    public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
        // å¾…回款,付款
        if(salesLedgerProduct.getType().equals(1)){
        if (salesLedgerProduct.getType().equals(1)) {
            salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal()));
            //未开票数量+金额
            salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
            salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
        }else{
        } else {
            salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal()));
            // æœªæ¥ç¥¨æ•°é‡+金额
            salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
@@ -258,6 +257,9 @@
                        PurchaseLedger.class
                );
            }
            //  æ¸…空销售产品绑定的加工
            salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
        }
        return result;
    }
@@ -279,7 +281,7 @@
        List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
                .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
                .orderByDesc(ProcessRoute::getCreateTime));
        if (processRoutes.size()>0){
        if (processRoutes.size() > 0) {
            ProcessRoute processRoute = processRoutes.get(0);
            //新增生产订单工艺路线主表
            ProductProcessRoute productProcessRoute = new ProductProcessRoute();
@@ -316,7 +318,7 @@
                        }
                    }
                    // ç”Ÿæˆå®Œæ•´çš„工单号
                    String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
                    String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
                    ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                    productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                    productWorkOrder.setProductOrderId(productOrder.getId());
@@ -431,9 +433,9 @@
        IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPage(page, salesLedgerProduct);
        salesLedgerProductDtoIPage.getRecords().forEach(item -> {
            // åˆ¤æ–­çŠ¶æ€
            if(item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0){
            if (item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0) {
                item.setStatusName("已完成付款");
            }else{
            } else {
                item.setStatusName("未完成付款");
            }
        });
@@ -445,9 +447,9 @@
        IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPagePurchaseLedger(page, salesLedgerProduct);
        salesLedgerProductDtoIPage.getRecords().forEach(item -> {
            // åˆ¤æ–­çŠ¶æ€
            if(item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0){
            if (item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0) {
                item.setStatusName("已完成付款");
            }else{
            } else {
                item.setStatusName("未完成付款");
            }
        });
@@ -488,6 +490,7 @@
            throw new RuntimeException("动态更新主表金额失败", e);
        }
    }
    @Override
    public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
        //获取产品最新的工艺路线
@@ -506,7 +509,7 @@
            //所需数量
            BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
            BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
            BigDecimal subtract = stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
            if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
                count++;
                stringBuffer.append(productStructureDto.getProductName())
@@ -517,9 +520,9 @@
                        .append(System.lineSeparator());
            }
        }
        if (count>0) {
        if (count > 0) {
            return R.fail(stringBuffer.toString());
        }else {
        } else {
            return R.ok();
        }
    }
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -754,17 +754,8 @@
            for (SalesLedgerProduct product : updateList) {
                product.setType(type.getCode());
                salesLedgerProductMapper.updateById(product);
                //  å®žçŽ°åˆ é™¤ç»‘å®šçš„å…¨éƒ¨åŠ å·¥
                salesLedgerProductProcessBindService.remove(new LambdaQueryWrapper<SalesLedgerProductProcessBind>().eq(SalesLedgerProductProcessBind::getSalesLedgerProductId, product.getId()));
                //  ç»‘定产品额外加工
                List<SalesLedgerProductProcess> salesProductProcessList = product.getSalesProductProcessList();
                salesProductProcessList.forEach(s -> {
                    SalesLedgerProductProcessBind processBind = new SalesLedgerProductProcessBind();
                    processBind.setSalesLedgerProductId(Math.toIntExact(product.getId()));
                    processBind.setSalesLedgerProductProcessId(s.getId());
                    processBind.setQuantity(s.getQuantity());
                    salesLedgerProductProcessBindService.save(processBind);
                });
                //  æ¸…空销售产品绑定的加工
                salesLedgerProductProcessBindService.updateProductProcessBind(product.getSalesProductProcessList(), product.getId());
            }
        }
        // æ‰§è¡Œæ’入操作
@@ -776,14 +767,8 @@
                salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
                salesLedgerProductMapper.insert(salesLedgerProduct);
                //  ç»‘定产品额外加工
                List<SalesLedgerProductProcess> salesProductProcessList = salesLedgerProduct.getSalesProductProcessList();
                salesProductProcessList.forEach(s -> {
                    SalesLedgerProductProcessBind processBind = new SalesLedgerProductProcessBind();
                    processBind.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
                    processBind.setSalesLedgerProductProcessId(s.getId());
                    processBind.setQuantity(s.getQuantity());
                    salesLedgerProductProcessBindService.save(processBind);
                });
                //  æ¸…空销售产品绑定的加工
                salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
                // æ·»åŠ ç”Ÿäº§æ•°æ®
                salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
            }