云
4 天以前 251be431ad12399fe4ebce599c353d05dcec7888
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/productsales/MesWmProductSalesMapper.java
@@ -18,6 +18,10 @@
@Mapper
public interface MesWmProductSalesMapper extends BaseMapperX<MesWmProductSalesDO> {
    default MesWmProductSalesDO selectByIdForUpdate(Long id) {
        return selectOne(new LambdaQueryWrapperX<MesWmProductSalesDO>().eq(MesWmProductSalesDO::getId, id).last("FOR UPDATE"));
    }
    default PageResult<MesWmProductSalesDO> selectPage(MesWmProductSalesPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<MesWmProductSalesDO>()
                .likeIfPresent(MesWmProductSalesDO::getCode, reqVO.getCode())
@@ -50,6 +54,35 @@
        return selectPage(reqVO, wrapper);
    }
    /**
     * 分页查询可退销售出库单:仅已完成状态,且存在「出库数量 > 已退数量」的行
     */
    default PageResult<MesWmProductSalesDO> selectReturnablePage(MesWmProductSalesPageReqVO reqVO,
                                                                 Integer finishedStatus, Integer canceledStatus,
                                                                 List<Long> permittedClientIds) {
        LambdaQueryWrapperX<MesWmProductSalesDO> wrapper = new LambdaQueryWrapperX<MesWmProductSalesDO>()
                .likeIfPresent(MesWmProductSalesDO::getCode, reqVO.getCode())
                .likeIfPresent(MesWmProductSalesDO::getName, reqVO.getName())
                .eqIfPresent(MesWmProductSalesDO::getClientId, reqVO.getClientId())
                .eq(MesWmProductSalesDO::getStatus, finishedStatus)
                .betweenIfPresent(MesWmProductSalesDO::getSalesDate, reqVO.getShipmentDate())
                .betweenIfPresent(MesWmProductSalesDO::getOutboundTime, reqVO.getOutboundTime());
        if (permittedClientIds != null) {
            if (CollUtil.isEmpty(permittedClientIds)) {
                return PageResult.empty();
            }
            wrapper.in(MesWmProductSalesDO::getClientId, permittedClientIds);
        }
        wrapper.apply("EXISTS (SELECT 1 FROM mes_wm_product_sales_line psl " +
                        "WHERE psl.deleted = 0 AND psl.sales_id = mes_wm_product_sales.id AND psl.quantity > " +
                        "(SELECT IFNULL(SUM(rl.quantity), 0) FROM mes_wm_return_sales_line rl " +
                        "INNER JOIN mes_wm_return_sales rs ON rs.id = rl.return_id AND rs.deleted = 0 " +
                        "WHERE rl.deleted = 0 AND rl.product_sales_line_id = psl.id AND rs.status != {0}))",
                canceledStatus);
        wrapper.orderByDesc(MesWmProductSalesDO::getId);
        return selectPage(reqVO, wrapper);
    }
    default MesWmProductSalesDO selectByCode(String code) {
        return selectOne(MesWmProductSalesDO::getCode, code);
    }