协同办公-发货审批页面,开发接口。优化添加发货信息接口,勾连发货审批。优化销售产品查询接口,多表联查数据。添加发货车牌号、发货日期、审批状态、返回数据。
已添加7个文件
已修改8个文件
654 ■■■■■ 文件已修改
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/ShipmentApprovalMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
@@ -1,6 +1,8 @@
package com.ruoyi.approve.vo;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.sales.pojo.CommonFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@@ -8,22 +10,37 @@
@Data
public class ApproveProcessVO {
    /**
     * ä¸´æ—¶æ–‡ä»¶id列表
     */
    private List<String> tempFileIds;
    /**
     * å®¡æ‰¹æµç¨‹id
     */
    private Long id;
    private String approveId;
    /**
     * å®¡æ‰¹éƒ¨é—¨id
     */
    private Long approveDeptId;
    /**
     * å®¡æ‰¹æ—¶é—´
     */
    private String approveTime;
    /**
     * ç”³è¯·äººid
     */
    // ç”³è¯·äºº
    private Long approveUser;
    /**
     * å®¡æ‰¹äººid列表
     */
    // å®¡æ‰¹äºº
    private String approveUserIds;
    /**
     * å®¡æ‰¹ç†ç”±
     */
    private String approveReason;
    /**
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.ruoyi.sales.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShipmentApproval;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.sales.service.ShipmentApprovalService;
import com.ruoyi.sales.service.ShippingInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@RestController
@RequestMapping("/shipmentApproval")
@Api(tags = "发货审批管理")
public class ShipmentApprovalController extends BaseController {
    @Autowired
    private ShipmentApprovalService shipmentApprovalService;
    @Autowired
    private ShipmentApprovalMapper shipmentApprovalMapper;
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @GetMapping("/listPage")
    @ApiOperation("发货审批列表")
    public AjaxResult listPage(Page page, ShipmentApproval req) {
        IPage<ShipmentApproval> listPage = shipmentApprovalService.listPage(page,req);
        return AjaxResult.success(listPage);
    }
    @PostMapping("/update")
    @ApiOperation("发货审批,更新发货审批状态")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult update(@RequestBody ShipmentApproval req) {
        ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId());
        if (shipmentApproval == null) {
            return AjaxResult.error("发货审批不存在");
        }
        shipmentApproval.setApproveStatus(req.getApproveStatus());
        boolean update = shipmentApprovalService.updateById(shipmentApproval);
        if(update){
            SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId());
            salesLedgerProduct.setApproveStatus(req.getApproveStatus());
            salesLedgerProductService.updateById(salesLedgerProduct);
        }
        return update ? AjaxResult.success() : AjaxResult.error();
    }
    /**
     * å¯¼å‡ºå‘货信息管理
     */
    @PostMapping("/export")
    @ApiOperation("导出发货审批")
    public void export(HttpServletResponse response) {
        List<ShipmentApproval> list = shipmentApprovalService.list(null);
        ExcelUtil<ShipmentApproval> util = new ExcelUtil<ShipmentApproval>(ShipmentApproval.class);
        util.exportExcel(response, list, "发货审批");
    }
}
src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -1,5 +1,6 @@
package com.ruoyi.sales.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -7,13 +8,19 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShipmentApproval;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.sales.service.ISalesLedgerService;
import com.ruoyi.sales.service.ShippingInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -30,6 +37,10 @@
    @Autowired
    private ShippingInfoService shippingInfoService;
    @Autowired
    private ShipmentApprovalMapper shipmentApprovalMapper;
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @GetMapping("/listPage")
@@ -41,8 +52,32 @@
    @PostMapping("/add")
    @ApiOperation("添加发货信息")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody ShippingInfo req) {
        boolean save = shippingInfoService.save(req);
        if(save){
            LambdaQueryWrapper<ShippingInfo> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(ShippingInfo::getSalesLedgerId, req.getSalesLedgerId());
            wrapper.eq(ShippingInfo::getSalesLedgerProductId, req.getSalesLedgerProductId());
            ShippingInfo shippingInfo = shippingInfoService.getOne(wrapper);
            if(shippingInfo == null){
                return AjaxResult.error("发货信息不存在");
            }
            ShipmentApproval shipmentApproval = new ShipmentApproval();
            shipmentApproval.setSalesLedgerId(req.getSalesLedgerId());
            shipmentApproval.setSalesLedgerProductId(req.getSalesLedgerProductId());
            shipmentApproval.setApproveUserId(req.getApproverId());
            shipmentApproval.setApproveStatus(2);
            shipmentApproval.setShippingInfoId(shippingInfo.getId());
            shipmentApprovalMapper.insert(shipmentApproval);
            SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(req.getSalesLedgerProductId());
            if(salesLedgerProduct != null){
                salesLedgerProduct.setApproveStatus(2);
                salesLedgerProductService.updateById(salesLedgerProduct);
            }
        }
        return save ? AjaxResult.success() : AjaxResult.error();
    }
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -2,6 +2,9 @@
import com.ruoyi.common.config.MyBaseMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * äº§å“ä¿¡æ¯Mapper接口
@@ -10,4 +13,5 @@
 * @date 2025-05-08
 */
public interface SalesLedgerProductMapper extends MyBaseMapper<SalesLedgerProduct> {
    List<SalesLedgerProduct> selectSalesLedgerProductList(@Param("salesLedgerProduct") SalesLedgerProduct salesLedgerProduct);
}
src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.sales.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.pojo.ShipmentApproval;
import com.ruoyi.sales.pojo.ShippingInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ShipmentApprovalMapper extends BaseMapper<ShipmentApproval> {
    IPage<ShipmentApproval> listPage(Page page,@Param("req") ShipmentApproval req);
}
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -125,5 +125,9 @@
    @ApiModelProperty(value = "付款方式")
    private String paymentMethod;
    @TableField(exist = false)
    @ApiModelProperty(value = "生产状态")
    private String productionStatus = "未开始";
}
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -11,6 +11,7 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * äº§å“ä¿¡æ¯å¯¹è±¡ sales_ledger_product
@@ -177,4 +178,28 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "登记日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime registerDate;
    /**
     * å‘货车牌号
     */
    @Excel(name = "发货车牌号")
    @TableField(exist = false)
    private String shippingCarNumber;
    /**
     * å‘货日期
     */
    @Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date shippingDate;
    @TableField(exist = false)
    @ApiModelProperty(value = "生产状态")
    private String productionStatus = "未开始";
    /**
     * å‘货审批状态
     */
//    @TableField(exist = false)
    @ApiModelProperty(value = "审批状态")
    private Integer approveStatus;
}
src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,352 @@
package com.ruoyi.sales.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@Data
@TableName("shipment_approval")
public class ShipmentApproval {
    @TableId(type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value = "发货信息id")
    private Long shippingInfoId;
    @ApiModelProperty(value = "销售台账id")
    private Long salesLedgerId;
    @ApiModelProperty(value = "销售报价产品表id")
    private Long salesLedgerProductId;
     @ApiModelProperty(value = "申请部门id")
    private Long approveDeptId;
    @ApiModelProperty(value = "申请部门名称")
    @Excel(name = "申请部门")
    private String approveDeptName;
     @ApiModelProperty(value = "审批用户id")
    private Integer approveUserId;
    @ApiModelProperty(value = "审批用户名称")
    @Excel(name = "审批用户")
    private String approveUserNames;
    /**
     * å®¡æ‰¹çŠ¶æ€
     */
    @ApiModelProperty(value = "审批状态:0未出库,1已出库,2待审核,3审核完成,4审核失败")
    @Excel(name = "审批状态", readConverterExp = "0=未出库,1=已出库,2=待审核,3=审核完成,4=审核失败")
    private Integer approveStatus;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Integer createUser;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField(exist = false)
    private Date shippingDate;
    @Excel(name = "发货车牌号")
    @TableField(exist = false)
    private String shippingCarNumber;
    /**
     * é¢„警数量
     */
    @TableField(exist = false)
    private BigDecimal warnNum;
    /**
     * äº§å“å¤§ç±»
     */
    @Excel(name = "产品大类")
    @TableField(exist = false)
    private String productCategory;
    /**
     * è§„格型号
     */
    @Excel(name = "规格型号")
    @TableField(exist = false)
    private String specificationModel;
    /**
     * å•位
     */
    @Excel(name = "单位")
    @TableField(exist = false)
    private String unit;
    /**
     * æ•°é‡
     */
    @Excel(name = "数量")
    @TableField(exist = false)
    private BigDecimal quantity;
    @Excel(name = "最低库存数量")
    @TableField(exist = false)
    private BigDecimal minStock;
    /**
     * ç¨Žçއ
     */
    @Excel(name = "税率")
    @TableField(exist = false)
    private BigDecimal taxRate;
    /**
     * å«ç¨Žå•ä»·
     */
    @Excel(name = "含税单价")
    @TableField(exist = false)
    private BigDecimal taxInclusiveUnitPrice;
    /**
     * å«ç¨Žæ€»ä»·
     */
    @Excel(name = "含税总价")
    @TableField(exist = false)
    private BigDecimal taxInclusiveTotalPrice;
    /**
     * ä¸å«ç¨Žæ€»ä»·
     */
    @Excel(name = "不含税总价")
    @TableField(exist = false)
    private BigDecimal taxExclusiveTotalPrice;
    /**
     * å‘票类型
     */
    @TableField(exist = false)
    private String invoiceType;
    /**
     * å°è´¦ç±»åž‹ 1.销售 2,采购
     */
    @TableField(exist = false)
    private Integer type;
    /**
     * æœ¬æ¬¡æ¥ç¥¨æ•°
     */
    @TableField(exist = false)
    private BigDecimal ticketsNum;
    /**
     * æœ¬æ¬¡æ¥ç¥¨é‡‘额(元)
     */
    @TableField(exist = false)
    private BigDecimal ticketsAmount;
    /**
     * æœªæ¥ç¥¨æ•°
     */
    @TableField(exist = false)
    private BigDecimal futureTickets;
    /**
     * æœªæ¥ç¥¨é‡‘额(元)
     */
    @TableField(exist = false)
    private BigDecimal futureTicketsAmount;
    @ApiModelProperty(value = "开票数")
    @TableField(exist = false)
    private BigDecimal invoiceNum;
    @ApiModelProperty(value = "未开票数")
    @TableField(exist = false)
    private BigDecimal noInvoiceNum;
    @ApiModelProperty(value = "开票金额")
    @TableField(exist = false)
    private BigDecimal invoiceAmount;
    @ApiModelProperty(value = "未开票金额")
    @TableField(exist = false)
    private BigDecimal noInvoiceAmount;
    @ApiModelProperty(value = "本次开票数")
    @TableField(exist = false)
    private BigDecimal currentInvoiceNum;
    @TableField(exist = false)
    @ApiModelProperty(value = "本次开票金额")
    private BigDecimal currentInvoiceAmount;
    /**
     *  äº§å“id
     */
    @TableField(exist = false)
    private Long productId;
    /**
     * äº§å“è§„æ ¼id
     */
    @TableField(exist = false)
    private Long productModelId;
    @ApiModelProperty(value = "初始未开票数")
    @TableField(exist = false)
    private BigDecimal originalNoInvoiceNum;
    @ApiModelProperty(value = "临时未开票数")
    @TableField(exist = false)
    private BigDecimal tempNoInvoiceNum;
    @ApiModelProperty(value = "临时未开票金额")
    @TableField(exist = false)
    private BigDecimal tempnoInvoiceAmount;
    @ApiModelProperty(value = "临时未来票数")
    @TableField(exist = false)
    private BigDecimal tempFutureTickets;
    @ApiModelProperty(value = "临时未来票金额")
    @TableField(exist = false)
    private BigDecimal tempFutureTicketsAmount;
    @ApiModelProperty("登记人")
    @TableField(exist = false)
    private String register;
    @ApiModelProperty("登记日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "登记日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @TableField(exist = false)
    private LocalDateTime registerDate;
    /**
     * é”€å”®åˆåŒå·
     */
    @Excel(name = "销售合同号")
    @TableField(exist = false)
    private String salesContractNo;
    /**
     * å®¢æˆ·åˆåŒå·
     */
    @Excel(name = "客户合同号")
    @TableField(exist = false)
    private String customerContractNo;
    /**
     * é¡¹ç›®åç§°
     */
    @Excel(name = "项目名称")
    @TableField(exist = false)
    private String projectName;
    /**
     * å½•入日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @TableField(exist = false)
    private Date entryDate;
    /**
     * ä¸šåŠ¡å‘˜
     */
    @Excel(name = "业务员")
    @TableField(exist = false)
    private String salesman;
    @TableField(exist = false)
    private Long customerId;
    /**
     * å®¢æˆ·åç§°
     */
    @Excel(name = "客户名称")
    @TableField(exist = false)
    private String customerName;
    /**
     * å½•入人
     */
    @TableField(exist = false)
    private String entryPerson;
    @TableField(exist = false)
    @ApiModelProperty(value = "录入人")
    @Excel(name = "录入人")
    private String entryPersonName;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注")
    @TableField(exist = false)
    private String remarks;
    /**
     * é™„件材料,存储文件名等相关信息
     */
    @TableField(exist = false)
    private String attachmentMaterials;
    /**
     * åˆåŒé‡‘额(产品含税总价)
     */
    @Excel(name = "合同金额")
    @TableField(exist = false)
    private BigDecimal contractAmount;
    @TableField(exist = false)
    @ApiModelProperty(value = "未开票金额(元)")
    @Excel(name = "未开票金额")
    private BigDecimal noInvoiceAmountTotal = BigDecimal.ZERO;
    @ApiModelProperty(value = "签订日期")
    @TableField(exist = false)
    private LocalDate executionDate;
    @TableField(exist = false)
    @ApiModelProperty(value = "已开票金额(元)")
    @Excel(name = "已开票金额")
    private BigDecimal invoiceTotal = BigDecimal.ZERO;
    @TableField(exist = false)
    @ApiModelProperty(value = "回款金额")
    private BigDecimal receiptPaymentAmountTotal = BigDecimal.ZERO;
    @TableField(exist = false)
    @ApiModelProperty(value = "待回款金额")
    private BigDecimal noReceiptAmount = BigDecimal.ZERO;
    @ApiModelProperty(value = "付款方式")
    @TableField(exist = false)
    private String paymentMethod;
    @TableField(exist = false)
    @ApiModelProperty(value = "生产状态")
    private String productionStatus = "未开始";
}
src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -23,7 +23,8 @@
    @ApiModelProperty(value = "销售台账id")
    private Long salesLedgerId;
    @ApiModelProperty(value = "销售报价产品表id")
    private Long salesLedgerProductId;
    @TableField(exist = false)
    @ApiModelProperty(value = "销售合同号")
    @Excel(name = "销售合同号")
@@ -64,5 +65,8 @@
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @ApiModelProperty(value = "审批人id")
    @TableField(exist = false)
    private Integer approverId;
}
src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.sales.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.sales.pojo.ShipmentApproval;
import com.ruoyi.sales.pojo.ShippingInfo;
public interface ShipmentApprovalService extends IService<ShipmentApproval>{
    IPage<ShipmentApproval> listPage(Page page, ShipmentApproval req);
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -52,10 +52,10 @@
    @Override
    public List<SalesLedgerProduct> selectSalesLedgerProductList(SalesLedgerProduct salesLedgerProduct) {
        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(queryWrapper);
//        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
//                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
        if(!CollectionUtils.isEmpty(salesLedgerProducts)){
            InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
            invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.sales.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.ShipmentApproval;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.ShipmentApprovalService;
import com.ruoyi.sales.service.ShippingInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author :yys
 * @date : 2025/10/22 9:33
 */
@Service
@Slf4j
public class ShipmentApprovalServiceImpl extends ServiceImpl<ShipmentApprovalMapper, ShipmentApproval> implements ShipmentApprovalService {
    @Autowired
    private ShipmentApprovalMapper shipmentApprovalMapper;
    @Override
    public IPage<ShipmentApproval> listPage(Page page, ShipmentApproval req) {
        IPage<ShipmentApproval> listPage = shipmentApprovalMapper.listPage(page, req);
        return listPage;
    }
}
src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -82,6 +82,6 @@
                AND  T1.entry_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
            </if>
        </where>
        order by entry_date desc
    order by T1.entry_date desc
    </select>
</mapper>
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.sales.mapper.SalesLedgerProductMapper">
    <select id="selectSalesLedgerProductList" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
        SELECT
        T1.*,
        t3.shipping_car_number,
        t3.shipping_date
        FROM
        sales_ledger_product T1
        left join shipping_info t3 on T1.id = t3.sales_ledger_id
        <where>
            1=1
            <if test="salesLedgerProduct.salesLedgerId != null and salesLedgerProduct.salesLedgerId != '' ">
                AND  T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId}
            </if>
            <if test="salesLedgerProduct.type != null and salesLedgerProduct.type != '' ">
                AND  T1.type = #{salesLedgerProduct.type}
            </if>
        </where>
    </select>
</mapper>
src/main/resources/mapper/sales/ShipmentApprovalMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.sales.mapper.ShipmentApprovalMapper">
    <select id="listPage" resultType="com.ruoyi.sales.pojo.ShipmentApproval">
        SELECT *,
        si.shipping_car_number,
        T2.nick_name AS entry_person_name
        FROM shipment_approval sa
                 LEFT JOIN shipping_info si ON sa.shipping_info_id = si.id
                 LEFT JOIN sales_ledger sl ON sa.sales_ledger_id = sl.id
                 LEFT JOIN sales_ledger_product slp ON sa.sales_ledger_product_id = slp.id
                 LEFT JOIN sys_user T2 ON sl.entry_person = T2.user_id
        <where>
            1=1
            <if test="req.approveStatus != null and req.approveStatus != '' ">
                AND  sa.approve_status = #{req.approveStatus}
            </if>
            <if test="req.salesContractNo != null and req.salesContractNo != '' ">
                AND  sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
            </if>
        </where>
    </select>
</mapper>